Software Product Lines: Concepts and Implementation

Elective seminar, 12 Units



Kconfig, the Linux configuratorVariability and reuse are increasingly important in developing large-scale and reliable, but also customized software systems. The goal of software product line engineering is the large-scale strategic reuse of functionality across multiple software products within a domain, such that different software configurations tailored for different customers or use cases are derived from a common code base. This course is designed to walk students through the entire process of developing an maintaining software product lines and highly configurable software systems, including:

AndroidThe course will mostly look at technical issues, but also cover organizational challenges, such as scoping, team management, and introducing product-line practices. We will study how highly configurable systems are developed and maintained in industry and open source and look at recent research results. The goal of this course is to help students require the background and theoretical and practical knowledge to do research in this field and to consult on reuse projects in practice.

LinuxThroughout the lecture we will look at case studies, investigating existing (mostly open source) system and study their practices in developing variations and extensible platforms. Among others, we will study the variability mechanisms in the Linux kernel, in Android, in Eclipse, and in Debian.

Domain and application engineering


Lectures: Monday/Wednesday 9:00-10:20 a.m. in GHC 4211
No recitation

Professor Christian Kästner
WEH 5122
Office hours: Wed 4-5pm
Email: kaestner@cs.cmu...

The instructor has an open door policy: If his office door is open and no-one else is meeting with him, he is happy to answer any course-related questions. For appointments, send an email.


The following schedule gives a rough outline of the topics of the course, but will be updated throughout the semester.

Date Topic Reading Assignment
Homework Due
Aug 31 Introduction, Organization, Domain Engineering

Sep 2
Feature and decision models
[FOSPL, p. 3-31]

Sep 7
No class (Labor day)

Sep 9
Case study discussion
[FOSPL, Ch. 2]
[FODA, Sec 1 + 3-5, skim 7]
hw 1 Case studies
Sep 14
Analysis of feature models
[B05] [BSR10, Sec. 5]

Sep 16
Product management, scoping
Sep 21
No class

Sep 23
No class

hw 2 Domain analysis
Sep 28
Variability in requirements [SAS12, Sec 1-4]
Sep 30
Version control systems, Parameters [FOSPL, Ch. 5.1]

Oct 5
Design patterns, frameworks, platforms, components and services
[FOSPL, Ch. 4]
hw 3 Base implementation
Oct 7
Design patterns, frameworks, platforms, components and services (continued) [O02] [B09]

Oct 12
Case Studies: Android, Debian
[AJB+14] [ASD+12] hw 4 Framework implementation
Oct 14

Oct 19
Build systems, preprocessors
[FOSPL, Ch. 5] [F97]

Oct 21
Case Study: Linux kernel
[MKR+15] [MB05]
Nov 26
No class

hw 5 Preprocessor implementation
Oct 28
Tradeoff and maintenance discussion [FOSPL, Ch. 3]
Nov 2
Advanced Concepts: Feature-Oriented Programming [FOSPL, Ch. 6.1] [AKL13, Sec. 1-3]
Nov 4
Advanced Concepts: Aspect-Oriented Programming [FOSPL, Ch. 6] [ADTH09]
Nov 9
Generators, DSLs, MDD
[VV11] [S06]
hw 6 Open source analysis
Nov 11
No class

Nov 16
Quality assurance: Sampling
[GC11] [TLD+11]
Nov 18
Quality assurance: Testing
[PM06] [GDS12]
Nov 23
Quality assurance: Advanced concepts [TBKC06] [FOSPL, Ch. 10] hw 7 FOP/AOP implementation
Nov 25
No class (Thanksgiving)

Nov 30
Feature interactions
[NLN08] [FOSPL, Ch. 9]
Dec 2
No class

Dec 7
Adoption and evolution [CK02]
Dec 9
Project presentations

project Project presentation and writeup


Course Syllabus and Policies

Slides, supplementary documents, assignments, grades, and announcements can be found on blackboard.

Prerequisites: Basic programming skills (preferably in Java or C) and basic software engineering knowledge (process, requirements, ...)

Communication: We make announcements through blackboard. The instructor holds weekly office hours and is reachable by email. See also open door policy above.

Grading: Evaluation will be based on the following approximate percentages: 30% assignments, 30% project, 30% exams, 10% participation.

Textbooks: The course is largely based on the textbook S. Apel, D. Batory, C. Kästner, and G. Saake. Feature-Oriented Software Product Lines: Concepts and Implementation. Berlin/Heidelberg: Springer-Verlag, 2013 (electronic copy available through CMU library). In addition, we will assign or recommend supplementary readings with each chapter, which we will provide via blackboard.

Time management: This is a 12-unit course, and it is our intention to manage it so that you spend close to 12 hours a week on the course, on average. In general, 3 hours/week will be spent in class and 9 hours on assignments. Please feel free to give the course staff feedback on how much time the course is taking for you.

Late work policy: Late work will receive feedback but no credit. Students may use up to 5 late days throughout the semester. Exceptions to this policy will be made only in extraordinary circumstances, almost always involving a family or medical emergency with your academic advisor or the Dean of Student Affairs requesting the exception on your behalf. Accommodations for travel might be possible if requested at least 3 days in advance.

Academic honesty and collaboration: The usual policies apply, especially the University Policy on Academic Integrity. Copying files or parts of files with or without modifications is not acceptable; making your work available to others is not acceptable. Note that some assignments will be done in groups. We expect that group members collaborate but that groups work independently from other groups, not exchanging results. Within groups we expect that you are honest about your contribution to the group's work. In particular, it is inappropriate to cover for students who did not contribute to a group's result.