Teaching Team
Lecturer: Xhevahire Tërnava
About the course
Most of the software systems nowadays ship in many variants, with different features for different customers, markets, or devices (see, e.g., every Nokia phone released from 1982 to 2006). Copying and editing the code for each variant does not scale, so this course teaches the alternative of building a whole family of products from one shared, configurable codebase. You will learn to describe a family through its common and variable features, model the allowed feature combinations, decide when each choice is bound, implement features as composable modules, or using traditional approaches, and test configurations for unwanted interactions.
Lectures
- Software product lines: families, features, and process [1. Introduction] [8. Development process]
- Feature models, valid products, and their analysis [4. Feature modeling] [10. Product-line analysis]
- Variability mechanisms and binding time [2. Runtime variability] [3. Compile-time variability & clone-and-own] [5. Conditional compilation]
- A shared, modular implementation [6. Modular features] [7. Languages for features]
- Feature interactions and configuration testing [9. Feature interactions] [11. Product-line testing]
Tasks
- Task 1: Variability, product lines, and software reuse (PDF) · Three exercises for Lecture 1
- Task 2: Feature models, valid products, and their analysis (PDF) · Two exercises for Lecture 2
The rest of the tasks are to be decided.
Other references:
Note: These lectures are borrowed from the Software Product Lines course, under CC BY-SA 4.0. Lecture recordings are an alternative to reading: in that case, use only the matching video with the slides.
Optional references, not mandatory reading. The above slides are sufficient to complete the module.
- Other sources of lectures can be found online here: FAMILIAR project teaching.
- Sven Apel, et.al., (2013). Feature-Oriented Software Product Lines: Concepts and Implementation. [PDF]
- Klaus Pohl, et.al., (2005) Software Product Line Engineering: Foundations, Principles and Techniques.
- Jens Meinicke, et.al., (2017). Mastering Software Variability with FeatureIDE. [PDF]
Resources
Tools and access
- Required: FeatureIDE (Eclipse plugin) with a compatible JDK. Use the composer each task specifies: FeatureHouse for feature-oriented programming, Munge for conditional preprocessing.
- Getting started with FeatureIDE: tutorial and getting-started PDF.
- Optional: Télécom Paris common tools, Git for version history.
- Alternatives to FeatureIDE: UVL, a textual variability language. Not installed or assessed; use FeatureIDE's native editors.