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.