Syllabus¶
Customize before publishing
The assessment weights and logistics on this page are a ready-to-edit template, not an assertion of your current semester rules.
Learning outcomes¶
By the end of the course, a successful student should be able to:
- Compare software process models and select practices appropriate to project context.
- Elicit, analyze, prioritize, document, and validate software requirements.
- Use models and architectural views to communicate software structure and behavior.
- Apply modular design principles, common patterns, clean-code practices, and refactoring techniques.
- Use Git-based collaborative development, issue tracking, pull requests, and code review.
- Design and automate unit, integration, and system-level tests.
- Build a basic continuous integration pipeline and interpret quality signals.
- Analyze maintainability, technical debt, reliability, and software security risks.
- Estimate, plan, monitor, and retrospect on software development work.
- Evaluate AI-assisted software engineering outputs rather than accepting generated artifacts without verification.
Suggested assessment structure¶
| Component | Suggested weight | Evidence |
|---|---|---|
| Individual assignments / quizzes | 20% | Conceptual understanding and short engineering tasks |
| Labs | 15% | Repository artifacts and reproducible exercises |
| Midterm exam | 20% | Core principles, requirements, design, and process reasoning |
| Semester project | 35% | Incremental engineering evidence, demo, and documentation |
| Participation / review activities | 10% | Peer review, discussion, retrospectives, professionalism |
Adjust the weights to match the official course specification.
Topics¶
- Software engineering foundations and lifecycle models.
- Agile development and Scrum.
- Requirements engineering and backlog management.
- UML and lightweight software modeling.
- Architectural styles and architectural decision records.
- SOLID principles, coupling/cohesion, and design patterns.
- Clean code, code smells, and refactoring.
- Version control, branching, pull requests, and code review.
- Testing strategy, test doubles, coverage, and testability.
- Continuous integration, continuous delivery, and DevOps concepts.
- Software quality models, metrics, technical debt, and reliability.
- Secure software development and threat-aware engineering.
- Project planning, estimation, risk, and team coordination.
- Software maintenance, evolution, legacy systems, and reengineering.
- AI-assisted software engineering and foundation-model-era assurance.
Teaching approach¶
The course favors small, inspectable increments. Students should be able to demonstrate not only what they built but why it was built that way and how they verified it.
Recommended textbook choices¶
Select one primary textbook and use the others as supporting references:
- Ian Sommerville, Software Engineering.
- Roger S. Pressman and Bruce R. Maxim, Software Engineering: A Practitioner's Approach.
- Robert C. Martin, Clean Code (selected chapters, with critical discussion).
- Martin Fowler, Refactoring (selected techniques and catalog entries).
See Resources for standards and online references.