To meet various customer requirements, to ensure availability on different platforms, or to satisfy business goals and marketing strategies, today’s software products typically need to be released in multiple variants. As a consequence, software development is faced with the challenge of producing and maintaining flexible software systems which can be customized through several configuration options. This fact may result in many combinations of configuration options which may too many to maintain an overview of the entirety of software variants that implement these configurations. For the Linux kernel, a prominent example of a highly configurable software system, we may easily create a dedicated variant for every person on earth - it is even assumed that we could create more Linux variants than atoms in the universe.
In this lecture, we gradually dive into the active research field of engineering software product lines. After reviewing classical approaches for developing variable software in an ad-hoc manner, we introduce systematic methods and techniques amenable to software mass-customization by generating individual software products based on an integrated platform, following the idea of product line engineering known from traditional manufacturing and engineering disciplines. The course demonstrates how configurability of software systems can be modeled and analyzed, which variability implementation techniques can be used by fostering software reuse and dedicated variation points, and which strategies allow for testing the huge number of software variants that exponentially grows with the number of configuration options.
You will learn:
- How to distinguish software product lines from configurable software.
- How to differentiate ad-hoc variability implementation from dedicated approaches.
- How to model a variability-intensive software system systematically.
- How to implement a product line with compile-time features and modular variability.
- How to systematically develop a product line by employing development processes.
- How to ensure the quality of software variants.
- How to maintain product lines over time.
Overview (Fall Semester 2022)
- Lecturer: Timo Kehrer
- Assistants: Sandra Greiner
- Course materials: ILIAS
- Lectures: Thursday 13:15 - 15:00 (Hörsaal 002, Engehalde E8)
- Exercise hour: Thursday 15:00 - 16:00 (Hörsaal 002, Engehalde E8)
- Language: English
- Start: Thursday, September 22, 2022
- Exam: oral (Registration through Academia)
- Repetition: Spring 2023
Schedule (Fall Semester 2022)
- 22-Sep-22: Introduction,
- 29-Sep-22: Runtime Variability and Design Patterns
- 06-Oct-22: Compile-Time Variability with Clone-and-Own
- 13-Oct-22: Feature Modeling
- 20-Oct-22: Techniques for Compile-Time Features
- 27-Oct-22: Techniques for Modular Variability
- 03-Nov-22: Language-Based Techniques
- 10-Nov-22: Development Process
- 17-Nov-22: Feature Interactions
- 24-Nov-22: Product-Line Analyses
- 01-Dec-22: Product-Line Testing
- 08-Dec-22: Evolution and Maintenance
- 15-Dec-22: Q&A