home profile publications research teaching service awards

Software Engineering

[ News | Course material | Semester project | Links ]
"Complexity is easy; simplicity is hard."
-- Edmund Kean

This course is an introduction to software engineering and object-oriented software design. At the core of the lecture is the notion of software quality and the methods to achieve and maintain it in environments of "multi-person construction of multi-version software" [Parnas 1987].

Based on their pre-existing knowledge of an object-oriented programming language, students are familiarized with software architectures, design patterns and frameworks, software components and middleware, UML-based modelling, and validation by testing. Further, the course addresses the more organisational topics of project management and version control. Practical work underpins this by looking at suitable tools.

The course is recommended to all students on whose software skills people will depend one day.


  • don't forget to subscribe to the course mailing list:

Course material

Reading material

Also, the World Quality Report (local copy) is relevant, specifically the chapters pp 14, 28, 36.

Finally, the short story pragma SUPPRESS is required reading; make sure you have not only read, but understood it.

Course slides

Software Engineering Project

In a guided project over the course of the semester some non-trivial software tool will be developed.


Over the semester, students will develop some larger piece of software. The main objective is to learn group work and gain practical experience with critical software engineering methods and tools. Grading criteria are introduced and discussed upfront in class.

Project phases:

  1. Requirements analysis and design. In the first phase, students team up on their own in groups of 3 - 5. They analyse the requirements presented, document them, and establish a specification. Each team receives a grade for its specification. Among the specifications submitted one is chosen which will act as the common basis for the implementation phase following next.
  2. Component development using extreme programming. Over several 2-week phases ("sprints"), students will perform Extreme Programming cycles in order to develop components identified by the overall system design. Students work in teams of two in each sprint (Pair Programming). After each sprint, teams and code bases change randomly but ensuring that no team and codebase match more than once. The progress produced in each sprint, as submitted to the repository, will be graded.


Sample exams: [ midterm | final ]


What every computer science major should know [ local copy ]
RFC 1925 containing some wisdoms applicable not only to networking. Check it out!

As for tutorials, the maintainer of the standard, OMG, offers a list of UML tutorials. Further, many more good tutorials are available on the Web, for example Borland's tutorial, Sparx Systems' tutorial with a particular part on Database Modeling in UML, and UML material collected by the ISO TC211 expert..
Meantime there is also a host of UML tools available - such as Rational Rose and Enterprise Architect (EA) by Sparx Systems, or Omondo's free UML extension to Eclipse - collected in lists like this one.

How to write unmaintainable code
Software Calculus - The Missing Abstraction.

Make and svn


Testing and Debugging
The following list of tools is intended to give a first overview; no tool is particularly endorsed, and missing one doesn't mean any discouragement either.
  • links:
  • Unit Test Tools: [ AdaTEST | AQtest | Aunit | C++Test | Cantata | Check | COMPUTE | CppUnit | csUnit | CTA++ | CTB | cUnit | CUT | dotunit | EasyMock | GrandTestAuto | HarnessIt | HtmlUnit | HttpUnit | JavaScript | JsUnit | JsUnit | JTestCase | JUnit | JUnitEE | JUnitX | LingoUnit | MinUnit | Mock Creator | Mock Objects | MockMaker | Mockry | NUnit | ObjcUnit | OCUnit | OTF - An | PalmUnit | PBUnit | PerlUnit | phpAsserUnit | PhpUnit | PyUnit | QtUnit | Ruby/Mock | SUnit | TagUnit | TBGEN | TBrun | Test Mentor - Java Edition | unit++ | vbUnit3 Basic | vbUnit3 Basic | VectorCAST | XMLUnit | XSLTunit ]
  • Coverage Analysis Tools: [ gcov | Bullseye Coverage | Cantata++ | CodeTEST | LOGISCOPE | Panorama C/C++ | Rational PureCoverage | TCAT C/C++ | GCT ]
  • Memory Leaks Detection: [ Valgrind | Purify ]

Project Management
  • An XP team room
  • There is a host of tools; The V-Modell site offers the open-source tool V-Modell-XT-Projektassistent assisting from initial project proposal to final report.
Copyright © 2004+ Peter Baumann -- -- tel. +49-173-583 7882 -- Disclaimer