Software Engineering Lab
Lecturer (assistant) | |
---|---|
Number | 0000003219 |
Type | Practical course |
Duration | 5 SWS |
Term | Wintersemester 2024/25 |
Language of instruction | English |
Position within curricula | See TUMonline |
Dates | See TUMonline |
Admission information
Objectives
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.
Description
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.
Prerequisites
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.
Examination
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).
Links
Guest Speakers
Speaker | Date | Topic |
Phil Nash | June 5, 2024 | Testing Fundamentals |
Robert C. Martin ("Uncle Bob") | December 12, 2023 | Basic Test Driven Development |
Klaus Iglberger | January 9, 2023 | What is C++? - A Historical Perspective |
Titus Winters | June 13, 2022 | Software Engineering - Principles aka SWE Book Theses |