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:
- Value: Are we building the right thing?
- Correctness: Are we building the thing right?
- Changeability: Can the system evolve without excessive risk or cost?
- Collaboration: Can a team understand, review, and extend the work?
- 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.