This course is designed for students to use the engineering approach to develop practical, high-quality software projects. Topics include software life cycle, development process, requirement specification, design and testing techniques, verification and validation. Students will have a chance to review the basic coding skills, including C, C++, and Java, and learn to use project management tools, principle, and environment to facilitate the development of software. Topics include the basic elements of software design and construction, providing a solid understanding of control flow, abstract data types (ADTs), memory, type relationships, and dynamic behavior. This course also evaluates the benefits and overhead of object-oriented design (OOD) and analyzes software design options.