Software Architecture and Engineering

Main content

Software engineering is an engineering discipline whose focus is the cost-effective development of high-quality software systems. The emphasis in software engineering is on both words, software and engineering. An engineer is able to build a high-quality product using off-the-shelf components and integrating them under time and budget constraints.

This course will cover key techniques for building reliable software. These include: modeling, design patterns, code refactoring, testing, symbolic execution, as well as static and dynamic program analysis. To gain a deeper understanding of how to apply these techniques in practice, the course will also involve two hands-on projects based on the principles introduced in the lectures.

General Info

Course Catalogue: 252-0216-00
Lecturers: Prof. Peter Müller, Prof. Martin Vechev
Language: English
Hours: 4V, 3U
Credits: 8


Date Announcement
February 23, 2017 The exercise session and project team assignment has been published.
February 24, 2017 The rooms for the exercise sessions have been published.
March 6, 2017 The first part of the first project has been published.
March 16, 2017 The second part of the first project has been published.
April 19, 2017 The points for the first project have been published.
May 10, 2017 The second project has been published.
June 15, 2017 The points for the second project.


10:00-12:00, CAB G 61

10:00-12:00, CAB G 61

Contact: Prof. Peter Müller, Prof. Martin Vechev


Section Topic Downloads
1 Introduction Slides
2 Requirements Elicitation Slides
3 Modeling Slides, Alloy Examples
4 Modularity Slides
5 Testing Slides
6 Program Analysis Slides
7 Theory Background Slides
8 Applications Slides
9 Pointer Analysis Slides
10 Symbolic Testing Slides


Please go to the exercise session to which your team is assigned.

Monday, 13:00-16:00

  • Matthew Mirman, CHN D 44

Tuesday, 15:00-18:00

  • Alexandra Bugariu, ML E 12
  • Marco Eilers, CHN D 48
  • Martin Kucera, HG D 3.1

Thursday, 15:00-18:00

  • Valentin Wüstholz, ETZ F 91
Week Topics Downloads
2 Requirements Elicitation and Documentation Assignment, Solution
3 Program Specifications and Modeling Assignment, Solution
4 Modeling Assignment, Exercise Files, Solution, Solution Files
5 Alloy Assignment, Exercise Files, Solution, Solution Files
6 Design Patterns Assignment, Guice (Eclipse), Guice (IntelliJ), Solution
7 Testing Assignment, Exercise Files, Solution, Solution Files
8 Program Analysis Assignment, Slides, Solution
Static Program Analysis Assignment, Solution
11 Theory Background Assignment,Solution
12 Abstract Transformers Assignment,Solution
13 Pointer Analysis Assignment,Solution
14 Symbolic Execution Assignment,Solution


Project Topic Deadline Downloads
1.1 UML Modeling March 15, 2017 Task
1.2 Alloy Modeling April 2, 2017 Task, Stubs File
2 Static Program Analysis
June 9, 2017 Task


  • Bernd Bruegge, Allen H. Dutoit: Object-Oriented Software Engineering. Prentice Hall, 2004.
  • Martin Fowler: UML Distilled: A Brief Guide to the Standard Object Modeling Language. Addison-Wesley, 2004.
  • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns. Addison-Wesley, 1995.
  • Steve McConnell: Code Complete. Microsoft Press, 2004.
  • John D. Musa: Software Reliability Engineering: More Reliable Software Faster and Cheaper. AuthorHouse, 2004.
  • Mary Shaw, David Garlan: Software Architecture. Prentice Hall, 1996.
  • Joel Spolsky: Joel on Software. Apress, 2004.
  • Perdita Stevens, Rob Pooley: Using UML: Software Engineering with Objects and Components. Addison-Wesley, 2000.
Page URL:
© 2017 Eidgenössische Technische Hochschule Zürich