Skip to content

Syllabus

Course title

Software Engineering Principles and Patterns

Level

Graduate / PhD

Course description

This course studies software design as a disciplined process of choosing abstractions, responsibilities, dependencies, boundaries, and transformations. It covers core design principles; architecture principles, views, styles, and tactics; object-oriented and architectural patterns; anti-patterns; design and architecture smells; refactoring; refactoring to patterns; and automated techniques for pattern/smell detection, recommendation, and software transformation.

The second half of the course connects classical design knowledge with automated software engineering. Students investigate program representations, static analysis, repository mining, search-based software engineering, machine learning, reinforcement learning, and LLM-assisted techniques for design analysis and refactoring. Particular emphasis is placed on correctness, empirical evaluation, reproducibility, and research limitations.

Major modules

Module Core question
Principles What makes a design changeable and understandable?
Architecture How should responsibilities and dependencies be organized at system scale?
Patterns Which recurring structures resolve recurring design forces?
Smells & Refactoring How do we recognize and safely repair design degradation?
Automation & Research What parts of design analysis/transformation can be automated and how do we evaluate them?

Suggested 14-week flow

Week Topics Activity
1 Design reasoning; information hiding; modularity Design critique
2 Cohesion/coupling; SOLID; GRASP; contracts Principle clinic
3 Package/component principles; architecture fundamentals Dependency exercise
4 Styles, views, tactics, boundaries Architecture debate
5 Pattern theory; creational and structural patterns Pattern clinic
6 Behavioral patterns Pattern composition exercise
7 Architectural/enterprise patterns; pattern languages Mid-course case study
8 Anti-patterns; design/architecture smells Smell triage lab
9 Refactoring foundations; safe change Refactoring lab
10 Refactoring to patterns; legacy systems A3 review
11 Program representations; automated pattern/smell detection Mining lab
12 Automated refactoring; search-based design Optimization lab
13 ML/RL/LLM-assisted software design Research seminar
14 Evaluation, benchmarks, reproducibility Project presentations

Teaching format

A recommended format is a mixture of:

  • concept lectures;
  • research-paper seminars;
  • in-class design clinics;
  • architecture debates;
  • tooling/automation labs;
  • student-led replication reviews;
  • a research-oriented semester project.

Required background

See Prerequisites.

Assessment

See Assessment. The supplied grading model is intentionally editable and should be aligned with the official departmental syllabus each semester.

Core references

The course draws on Design Patterns, Refactoring, Refactoring to Patterns, Patterns of Enterprise Application Architecture, Pattern-Oriented Software Architecture, Working Effectively with Legacy Code, and research literature in automated refactoring, design pattern detection, code smells, and search-based software engineering. See Books & References and Seminal Papers.