Skip to content

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:

  1. Compare software process models and select practices appropriate to project context.
  2. Elicit, analyze, prioritize, document, and validate software requirements.
  3. Use models and architectural views to communicate software structure and behavior.
  4. Apply modular design principles, common patterns, clean-code practices, and refactoring techniques.
  5. Use Git-based collaborative development, issue tracking, pull requests, and code review.
  6. Design and automate unit, integration, and system-level tests.
  7. Build a basic continuous integration pipeline and interpret quality signals.
  8. Analyze maintainability, technical debt, reliability, and software security risks.
  9. Estimate, plan, monitor, and retrospect on software development work.
  10. 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.

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.