This course covers the software development process, from requirements elicitation and analysis, through specification and design, to implementation, integration, testing, and maintenance (evolution). A variety of concepts, principles, techniques, and tools are presented, encompassing topics such as software processes, project management, people management, software requirements, system models, architectural and detailed design, user interface design, programming practices, verification and validation, and software evolution. Although the emphasis will be on modern approaches some more traditional software engineering techniques will also be discussed.