[an error occurred while processing this directive]

Software Engineering

Main page   ||    Lecture   ||    Exercises   ||    Project   


Note to students

A key component of this course, as explained below, is the project. Because of the time constraints imposed by the semester the project will be handed out on the first lecture and will start in the first week. As a result it will be difficult to join the course later. Please make sure you attend from the beginning.

What this course is about

Software engineering is the construction of production software systems satisfying standards of quality.

Software engineering encompasses programming, but programming is only a part of it. One may describe the discipline as consisting of five main threads (D.I.A.M.O.):

  • Describe: specify (systems, designs, implementations...) and document.
  • Implement: build the products; this includes design as well as programming.
  • Assess: verify, validate, analyze, test, measure (both products and processes).
  • Manage: organize the work, communicate, collaborate
  • Operate: deploy systems and oversee their proper functioning. 

In a university environment it is common to practice the second of these aspects, learn a bit of the third, and sometimes get a glimpse of the first. But in industry all five are equally important. This course covers all of them, with approximately equal weights.

An engineering discipline is defined in part by the tools of the trade. Software engineering has developed particularly interesting tools over the past decades; the course gives a central place to presentations of state-of-the-art tools for such tasks as project management, configuration management, static analysis, testing etc.

The course is built for a large part around a project which requires students to build a real system with all the associated constraints and going through all the phases including requirements analysis and V&V (validation & verification). The V&V plan is developed not for the group's system but for another project.

This is a challenging course in which you may expect to learn a lot, both from the lectures and your own directed work on the project, about what it takes to build real software that serves the needs of real people.


Bertrand Meyer


  • Adam Darvas
  • Werner Dietl
  • Hermann Lehner
  • Marco Piccioni
  • Mitra Purandare
  • Arsenii Rudich
  • Joerg Derungs

Type of course

3V2U (three weekly lecture hours, two weekly exercise hours)


Lectures: English
Exercises: German and English


  • General
    • Craig Larman: Applying UML and Patterns, An Introduction to Object-Oriented Analysis and Design and Iterative Development Prentice Hall, 3rd Edition 2004
      This book helps newcomers to OOA/D to "think in objects", introducing the most frequently used UML diagramming notation, while emphasizing that OOA/D is much more than knowing UML notation and the Java language. It incrementally introduces the requirements and OOA/D activities, principles, and patterns that are most critical to success through two very complete case studies. (MPIC)
    • Watts S. Humphrey: A Self-Improvement Process for Software Engineers Addison-Wesley Professional, 2005
    • Watts S. Humphrey: TSP(SM)-Leading a Development Team Addison-Wesley Professional, 2005
    • Watts S. Humphrey: A Discipline for Software Engineering Addison-Wesley Professional, 1994
    • Alain Abran, James W. Moore (Eds.): Guide to the Software Engineering Body of Knowledge (SWEBOK). IEEE Computer Society, 2004.
    • Boehm et.al.: Software Cost Estimation with COCOMO II. Prentice Hall, 2000.
    • William J. Brown, Raphael C. Malveau, Hays W. McCormick III, Thomas J. Mowbray: Anti Patterns: Refactoring Software, Architectures and Projects in Crisis. Wiley Computer Publishing, 1998.
    • Martin Fowler: Refactoring: Improving the Design of Existing Code. Addison Wesley, 1999.
    • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns. Addison-Wesley, 1995.
    • Carlo Ghezzi, Mehdi Jazayeri, Dino Mandrioli: Fundamentals of Software Engineering. Prentice Hall, 2002.
    • Shari Lawrence Pfleeger and Joan M. Atlee: Software Engineering, third edition. Prentice Hall, 2005.
    • 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.
    • Ian Sommerville: Software Engineering. Addison Wesley, 2004.
    • Joel Spolsky: Joel on Software. Apress, 2004.
    • Clemens Szyperski: Component Software. Addison-Wesley, 1997.

  • Requirements
    • Karl E. Wiegers: Software Requirements, Second Edition Microsoft Press, 2003

  • O-O software engineering
    • Bernd Bruegge, Allen H. Dutoit: Object-Oriented Software Engineering. Prentice Hall, 2004.
    • Bertrand Meyer: Object-Oriented Software Construction. Prentice Hall, 1997.

  • Agile methods
    • Kent Beck: Extreme Programming Explained: Embrace Change. Addison-Wesley, 1999
      An overview of XP by one of the movement's founder. A bit too much a manifesto (this is not the place for critical, balanced assessments), but provides a good insight into the founding principles of the approach. (BM)
    • Craig Larman: Balancing Agility and Discipline. Addison-Wesley, 1993
      A concrete presentation of the most important agile practices. (BM)
    • Matt Stephens and Doug Rosenberg: Extreme Programming Refactored: The Case Against XP. APress, 2003.
      A pamphlet against the XP and what the authors see as the substitution of hype for successful practices. Funny at times, as extreme as its target at the risk of not being taken seriously, but provides a sound antidote for anyone overdosing in XP or just XP literature. (BM)
    • Pete McBreen: Questioning Extreme Programming. Addison-Wesley, 2002.
      Much more respectful than Stephens-Rosenberg, and prefaced by Kent Beck; provides a critical analysis of XP. (BM)
    • Craig Larman: Agile & Iterative Development, a Manager's Guide Addison-Wesley, 2004
      A concise, information-packed summary of the key ideas that drive all agile and iterative processes, with the details of four noteworthy methods: Scrum, XP, Rup and Evo. Explicitly targeted to managers and students. Uses statistically significant research and large-scale case studies. (MPIC)
    • Robert Cecil Martin: Agile Software Development, Principles, Patterns, and Practices Prentice Hall, 2003
      This book is crammed with sensible advice for software development. Weaves agile methods, design patterns and the fundamentals of modern software development in a coherent whole. Contains three case studies with useful C++ and Java code. (MPIC)

  • UML
    • Martin Fowler: UML Distilled: A Brief Guide to the Standard Object Modeling Language. Addison-Wesley, 2004.
    • Perdita Stevens, Rob Pooley: Using UML: Software Engineering with Objects and Components. Addison-Wesley, 2000.

  • Testing
    • Robert V. Binder: Testing Object-Oriented Systems: Models, Patterns, and Tools, Addison-Wesley, 1999
    • Glenford J. Myers: The Art of Software Testing, Wiley, 1979

  • Correctness
    • Java Modeling Language
      • G. T. Leavens and A. L. Baker. JML: A Notation for Detailed Design
      • Main website of JML
    • ESC/Java and ESC/Java2
      • C. Flanagan, K.R.M.Leino, and M. Lillibridge. Extended Static Checking for Java
      • Main website of ESC/Java2
    • Spec#
      • Barnett et al.: Verification of object-oriented programs with invariants
      • Barnett et al.: Boogie: A Modular Reusable Verifier for Object-Oriented Programs
      • M. Fähndrich and K. R. M. Leino: Declaring and checking non-null types in an object-oriented language
      • Main website of Spec#
      • Rustan Leino's lectures