The theory and practice of software engineering applied to the design and implementation of software systems. Course topics include practical issues of software requirements analysis and specification, design, modeling, tools, project management, construction, testing, deployment, metrics, quality assurance, and operation and maintenance, as well as computing ethics and professional practice.