Almost all of the devices we use in our daily activities now involve software. This ranges from embedded software used in personal healthcare devices to large safety-critical software systems used in airplanes. One of the ways to cater for such diversity in software use is to enable large-scale reuse by designing software to be configurable or variable. For example, the Linux kernel, with over 12,000 configurable options, can be configured as an operating system for mobile phones or for enterprise servers. Software Product Lines (SPLs) provide a systematic way of creating such configurable software where different, yet similar, products can be created from reusable components according to a selected combination of functionalities. The fact that SPLs deal with several products simultaneously instead of a single product creates many interesting software analysis, maintenance, and evolution challenges.
This course will discuss different techniques for implementing SPLs, as well as advanced research techniques for analyzing and maintaining highly configurable software in general. The course requires active participation: approximately 2/3 of the course involves seminar-style presentations and discussions of recent research papers as well as the course assignments and project. The remaining 1/3 consists of lectures and hands-on demos. Topics covered include, but are not limited to, using version control for variant management, evolution of configurable software, reverse-engineering SPLs, and variability modeling.
- Gain an understanding of the fundamentals of SPLs
- Understand how to use variability models and SAT solvers to reason about SPL configurations
- Become familiar with some of the available research tooling around analyzing and maintaining SPLs
- Get hands-on experience about various techniques for studying the evolution and maintenance of highly configurable software systems (e.g., through mining software repositories).
- Paper reviews