Software Engineering Lab

Lecturer (assistant)
TypePractical course
Duration5 SWS
TermSommersemester 2022
Language of instructionGerman
Position within curriculaSee TUMonline
DatesSee TUMonline

Admission information


After participating in the lab, the students are able to understand the structure and management of collaborative software projects. Further the students are able to apply the concepts of unit testing for the validation of their own implementations on every layer.


Software engineering skills of any engineer become more important with the ongoing digitization and automation. Software engineering means not only delivering an implementation that fulfills the requirements and generates correct results. A second highly important aspect is to deliver software that can be maintained by multiple contributors, over months, years or even decades. This lifetime aspect and the number of developers contributing to the software introduces additional requirements and challenges in the development process. Software has to be testable, readable, and extendable. Concepts such as unit tests, code reviews, and continuous integration support writing software with these characteristics.


Basic programming knowledge

Teaching and learning methods

On a biweekly basis, the students will learn new concepts of software engineering and manifest the concepts by applying them in practical exercises and homeworks. All homeworks are intended to improve/refactor/extend the given codebase. The students will learn to solve common problems of maintaining high sustainable and resilient software over time. In total, there will be 5-hour lab sessions per week where the new concepts are presented and a supervisor helps the students to get started, provides links to the relevant literature, and gives feedback and advice on the implementation.


The examination consists of the following components, which will also build the final grade: ● Biweekly programming homeworks (5 x 10%) ● Final exam (50%) The biweekly homeworks are as means to measure the students’ ability to understand the presented concept, and to apply the concept in practical examples. In the written examination, students demonstrate their theoretical knowledge of modern software engineering techniques by answering questions, reviewing code, and writing pseudo code under time pressure and without helping material. This includes a basic understanding of build systems, unit testing, test driven development, software development tools, and software refactoring techniques.

Recommended literature

[1] Winters, Titus, Hyrum Wright, and Tom Manshreck. "Software Engineering at Google: Lessons Learned from Programming over Time." (2020).