Modern software often has to be available on many platforms and adapted to many different user and customer needs. This applies to system software (e.g. operating systems), application software (e.g. word processing and games) and complex cyber-physical systems (e.g. automobiles). The resulting variety of configurations poses challenges for the development, testing, and maintenance of such systems. The lecture Software Product Lines teaches, among other things, how the configurability of systems can be modeled, which implementation techniques allow extensible and configurable software to be developed, and which strategies can still be used for meaningful testing despite an exponential number of variants.
The course includes the following contents:
Students are able to ...
The lecture provides a theoretical overview of techniques for modeling, implementing and analyzing configurable systems. In the exercise, this knowledge is further deepened through application tasks and practical understanding is promoted through the development of own software product lines with the aid of various programming techniques. Some of the software product lines to be developed can be chosen individually, so that students have the opportunity to gain programming experience in a domain of interest to them.
Basic knowledge of logic (in particular propositional logic) and software engineering (in particular process models, UML class diagrams, design patterns) as well as programming experience (e.g., in Java) are required.