"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:
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.
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.