This course follows Software Engineering-1 course as it continues the investigation into software development life cycle to its end. Students will be exposed to an in-depth coverage of design (architectural design, interface design). They will be introduced to different approaches to software development (e.g. Rapid Software Development, Extreme programming, and Component Based Software Engineering), system integration and validation, verification (inspections and dynamic testing techniques). This course also introduces students to the program evolution process, software maintenance, managing the code, documentation, configuration management, and software quality management including software measurements and metrics.