Design and Implementation of Software Systems

Embedded cyber-physical systems combine digital programmable devices with physical actuators and sensors in the real world. The importance of such systems is growing, as software allows more flexible control, for example, in autonomous driving, Industry 4.0, smart homes, etc. However, as software takes over more safety-related tasks and controls critical infrastructure, correct and fault-tolerant programming is essential.

Course Objectives

This course introduces well-established software-engineering principles, including object-oriented programming, its implementation in the Java programming language, software engineering practices and development processes, and formal modeling tools. After taking this course, the students know how to approach a large software project in a structured way. Further, they know how to write high-quality source code that is maintainable and extendable.

Lab

The lecture is accompanied by a lab, in which the students apply the concepts from the lecture to a real-life embedded system. Using the Lego Mindstorms robotics platform, the students develop software modules that read out sensors, control motors, and react to user input. In the final MazeBot Challenge, the students combine all modules to form an autonomous real-time system. During the course, students work together in teams using industry-standard software collaboration tools such as Git.

Prerequisites

Students taking this course should be familiar with imperative programming languages, e.g., C, Pascal, Fortran, or similar. The course provides a quick summary of imperative programming, but students without any programming knowledge should be prepared to put additional effort into catching up.