Software Engineering

Main page   ||    Lecture   ||    Exercises   ||    Project   


  • Reminder: as advertised in the course catalog, the exam will take place on August 5th in room HG F1 from 9:00 to 12:00 (180 mn), withouth documentation.
  • May 27: question and answer session scheduled on the 28th.
  • May 27: updated slides.
  • May 7: Next exercise session cancelled (May 8th, 9th and 12th).
  • May 7: Updated slides.
  • April 22: Updated lectures schedule, added guest lecture by Dr. Matthias Zenger.
  • April 18: Updated the sample data to fix a (stupid) bug in valid_easy.gen. Please download the file again.
  • April 16: Added sample data for Assignment 2.
  • April 10: Posted clarificaitons to Assignment 2.
  • April 9: To use CDD on the student network, please remove the environment variable ISE_EIFFEL. This is a temporary solution to a problem that should be fixed in a few days.
  • April 9: Bring your laptop at the next exercise session.
  • April 9: Deadline for assignment 2 is pushed to April 23rd.
  • April 2: New version of CDD EiffelStudio (Final 6) available. Download from
  • March 30: No excercise sessions on Monday, March 31st to stay synchronized with Thursday and Friday exercise sessions.
  • March 20: Bugfix for Assignment 2: I class SIMPLE_PARSER, line 130 should compare the string to ????, not just ??. The source file in has been updated. Thanks for the hint.
  • March 19: Added link to CDD EiffelStudio.
  • March 18: handed out assignment 2.
  • March 7: added the cover sheet for assignment 1.
  • March 5: handed out assignment 1.
  • March 5: updated exercises page.
  • February 27: added the IEEE 830 standard.
  • February 26: updated exercise page with assistants, time slots and rooms. Updated literature.
  • February 21: The address for the Software Engineering staff is up and running:
  • February 15: Page up and running.

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.

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, Manuel Oriol, Bernd Schoeller


  • Hermann Lehner
  • Roman Mitin
  • Arsenii Rudich
  • Joseph Ruskiewicz
  • Wolfgang Schwedler

CDD EiffelStudio

For assignment 2 and 3 you will need to use CDD EiffelStudio. Download it from and don't forget to submit your logs.

Type of course

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


Lectures: English
Exercises: German and English

Compact Literature

  • 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.
  • Ian Sommerville: Software Engineering. Addison Wesley, 2004.

Complete Literature

  • 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 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.
    • 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.
    • 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