home profile publications research teaching service awards

Advanced Computer Science II (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

The lecture is based on

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

Course slides:

Software Engineering Project

Via the homeworks, over the course of the semester a programmable game will be developed, called "Bug World". Goal is an installable package. At the end of the semester, a tournament will run where students can provide their strategies for competition.

Methodology: Over the semester, students have to develop a larger piece of software. The main objective is to learn group work and to gain practical experience with some software engineering methodologies, methods and supporting tools. The project is organized into several phases:

  1. Component development using extreme programming. Over several 2-week phases ("cycles"), students will exercise extreme programming cycles in order to develop components identified by the overall system design. Each cycle lasts two weeks (since students only work part-time on the lab). After each cycle, the progress will be discussed and plans will be fixed for the next cycle. Students work in teams of two students in each cycle and groups will change with every cycle. The results produced in each cycle will be graded.
  2. System integration and system testing (2 weeks). This phase is concerned with the integration of the components and the testing of the overall system. The integration test cases identified should be exercised (or updated and complemented as needed). Students work now again in larger groups. The system integration and testing phase must be documented appropriately and the documentation will be graded, as will be installability of the resulting package.
  3. Tournament and wrap up (1 week). In the last phase, there will be a tournament where students can let bugs play against each other. Students who write smart bugs may get bonus points.

Project details: [ Introduction slides | Bug World problem description | simulator man page | assembler man page | specification ]

Tool help: [ Netbeans IDE | Unified Modeling Language (UML) | git version control system | cppunit and a quickstart tutorial and another tutorial | socket programming tutorials ]


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-2018 Peter Baumann -- -- tel. +49-173-583 7882 -- Disclaimer