More details about the course can be found in Stud.IP and TUconnect.
Contents
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:
- Introduction to software variability and inherent challenges
- Modeling and analysis of the desired variability
- Implementing variability at runtime (e.g. configuration options) and compile-time (e.g. clone-and-own)
- Implementation of software product lines:
- Implementing features using conditional compilation (e.g. preprocessors and build systems).
- Modular implementation of features (e.g. components, services and plug-ins)
- Limitations of object orientation and extensions of object orientation (e.g. feature modules, aspects)
- Design patterns for software variability
- Process models for the use and development of software product lines
- Problems and dealing with feature interactions
- Methods for static and dynamic quality assurance of software product lines
- Evolution and maintenance of software product lines
- Current topics from research and practice
Learning Outcomes and Competences
Students are able to ...
- identify the limitations of traditional programming techniques with regard to the development of variable software.
- describe modeling, analysis and configuration of variability in software product lines.
- apply different implementation techniques for the development of software product lines.
- evaluate the suitability of presented programming techniques for different development scenarios.
- explain quality assurance techniques for software product lines and the associated challenges.
Methodical Realization
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.
Recommended Proficiencies
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.
Literature
- Feature-Oriented Software Product Lines - Concepts and Implementation; Sven Apel, Don Batory, Christian Kästner, Gunter Saake; Springer, 2013
- Mastering Software Variability with FeatureIDE; Jens Meinicke, Thomas Thüm, Reimar Schröter, Fabian Benduhn, Thomas Leich, Gunter Saake; Springer, 2017