Main page ||
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.
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
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
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
- 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)
Exercises: German and English
- 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
- 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.
- 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,
- 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
- 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)
- 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.
- Robert V. Binder: Testing Object-Oriented Systems: Models, Patterns, and Tools,
- Glenford J. Myers: The Art of Software Testing, Wiley, 1979
- 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
- 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