CPEN 321

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)