"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].
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.
News
don't forget to subscribe to the course mailing list:
In a guided project over the course of the semester some non-trivial software tool will be developed.
See the 2024 project intro slides and the resp. teaching slots.
Methodology:
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:
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.
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.
VanCBJ (C++, C, Java and Oracle Pro-C; Borland, but not MS VC)
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.
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.