Software Engineering
The course explores engineering principles for building non-trivial software-intensive systems: requirement specification, design, implementation, verification, and maintenance. The course uses a development project as the basic learning vehicle, providing students with an environment for applying the learned principles in practice while coping with constraints encountered when working on a real team: uncertain requirements, tight deadlines, etc. Students are evaluated based on their understanding of software engineering principles and their ability to apply these principles in practice.
4 credits
Learning Objectives
By the end of the course, students will learn several fundamental skills in modern software development:
- Software engineering principles: requirements specification, design, implementation, verification, and maintenance of software;
- Client-server application development paradigms, including mobile and cloud-based development;
- Teamwork, inter- and intra-team communication;
- Management of uncertainty in customer demands;
- Ability to adapt quickly to new toolsets;
- Strengths and weaknesses of modern generative AI technologies in assisting with software engineering tasks;
- Efficient technical communication and presentation.
Course Outline
- Overview of Software Engineering
- Software Development Processes
- Requirements Engineering
- Software Architecture and Design
- Teamwork, Advanced Version Control
- Code Review
- Software Quality, Testing, and Analysis
- Software Evolution and Maintenance
- Continuous Integration, DevOps
- Advanced Software Engineering Topics
Course Prerequisites
CPEN 221, CPSC 210, or equivalent.
Course Corequisites
CPEN 332 / CPEN 320 (Software Construction II)