Variability is commonly understood as the ability of a software system or software artifact (e.g., component) to be changed so that it fits a specific context. Variability allows adapting the structure of a software system, its behavior, or underlying processes. These adaptations are enabled through variation points and variants as options that can be selected at these variation points. So far, variability has mainly been studied in the classic software product line domain. However, variability is not limited to product lines or families, but imposes challenges on software development in general. Many other types of today's software systems are built with variability in mind; one prominent type is self-adaptive systems that are capable to adapt autonomously at runtime, another is dynamic software product lines that combines principles from product lines with self-adaptation. In this talk, I summarize the results of an extensive survey we recently performed on the use of variability in software systems in general [1]. Based on our findings, I present dimensions of variability in software engineering. This empirically grounded set of core dimensions provides a step towards an integrated perspective of variability in software systems, spanning across loosely coupled research areas in the software engineering community. To conclude, I outline some interesting opportunities for future research.
Invited Talk