Skip to content

Course Overview

Software Engineering studies systematic, disciplined, and measurable approaches to the development, operation, maintenance, and evolution of software. In this course, theory is connected to a practical team project so that concepts are exercised in realistic engineering artifacts.

Intended audience

The course is suitable for undergraduate computer science or computer engineering students who already have basic programming experience and can read and modify a small multi-file program.

Prerequisites

Students should be comfortable with:

  • Programming fundamentals and object-oriented programming.
  • Basic data structures and algorithms.
  • Command-line usage and installing development tools.
  • Reading technical documentation in English.

Prior experience with Git, automated testing, UML, or CI/CD is useful but not required.

Course threads

The course repeatedly returns to five questions:

  1. Value: Are we building the right thing?
  2. Correctness: Are we building the thing right?
  3. Changeability: Can the system evolve without excessive risk or cost?
  4. Collaboration: Can a team understand, review, and extend the work?
  5. Assurance: What evidence supports our confidence in quality and security?

Learning format

Lectures introduce concepts and vocabulary. Labs convert concepts into workflows and artifacts. Assignments assess individual or small-group understanding. The semester project integrates the full lifecycle.