Abstract
Variant-rich software systems offer a large degree of customization, allowing users to configure the target system according to their preferences and needs. Facing high degrees of variability, these systems often employ variability models to explicitly capture user-configurable features (e.g., systems options) and the constraints they impose. The explicit representation of features allows them to be referenced in different variation points across different artifacts, enabling the latter to vary according to specific feature selections. In such settings, the evolution of variability models interplays with the evolution of related artifacts, requiring the two to evolve together, or coevolve. Interestingly, little is known about how such coevolution occurs in real-world systems, as existing research has focused mostly on variability evolution as it happens in variability models only. Furthermore, existing techniques supporting variability evolution are usually validated with randomly-generated variability models or evolution scenarios that do not stem from practice. As the community lacks a deep understanding of how variability evolution occurs in real-world systems and how it relates to the evolution of different kinds of software artifacts, it is not surprising that industry reports existing tools and solutions ineffective, as they do not handle the complexity found in practice. Attempting to mitigate this overall lack of knowledge and to support tool builders with insights on how variability models coevolve with other artifact types, we study a large and complex real-world variant-rich software system: the Linux kernel. Specifically, we extract variability-coevolution patterns capturing changes in the variability model of the Linux kernel with subsequent changes in Makefiles and C source code. From the analysis of the patterns, we report on findings concerning evolution principles found in the kernel, and we reveal deficiencies in existing tools and theory when handling changes captured by our patterns.
Similar content being viewed by others
Notes
See also: http://c2.com/cgi/wiki?RuleOfThree
The numbers in the table do not account for commits that merge branches.
V4L/DVB: Video for Linux/Digital Video Broadcasting
These values are calculated as follows: for the additions sample, we sum the size of all its commit windows (502), and divide the result by the number of added primary features (268). Likewise, in the removals case, we sum the total number of commits in the commit windows in the corresponding sample (155), and divide it by the number of removed primary features (132).
When reviewing the original and extended samples, A 3 indicated five possible inconsistencies: three were minor comments, whereas for the remaining two, A 3 did not agree that they were instances of a particular pattern. Upon further clarification, A 3 agreed that the two instances were indeed related to the pattern in question. A 4, in turn, pointed out 7 % and 14 % inconsistencies in the classification of the primary features in the additions and removals samples, respectively. Almost all inconsistencies were confirmed, and the patterns’ frequencies were changed accordingly.
Basically, a rename just updates all references to a given feature name f to a new name f N in all spaces where f appears. Note that renaming does not cause any behavioural change, nor does it change the set of cross-tree constraints.
In our previous catalog (Passos et al. 2013), we named the pattern as Featurize code (FTC).
References
Alves V, Gheyi R, Massoni T, Kulesza U, Borba P, Lucena C (2006) Refactoring product lines. In: Proceedings of the international conference on generative programming and component engineering. ACM, pp 201–210
Apel S, Batory D, Kästner C, Saake G (2013) Feature-oriented software product lines: concepts and implementation. Springer
Babar MA, Chen L, Shull F (2010) Managing variability in software product lines. IEEE Softw 27(3):89–91, 94
Baresi L, Guinea S, Pasquale L (2012) Service-oriented dynamic software product lines. IEEE Comput 45(10):42–48
Batory DS, Barnett JR, Garza JF, Smith KP, Tsukuda K, Twichell BC, Wise TE (1988) GENESIS: an extensible database management system. IEEE Trans Softw Eng 14(11):1711–1730
Berger T, Nair D, Rublack R, Atlee JM, Czarnecki K, Wąsowski A (2014) Variability modeling in industry: practices, benefits, and challenges. In: Model-driven engineering languages and systems, lecture notes in computer science, vol 8767. Springer, pp 302–319
Berger T, She S, Lotufo R, Czarnecki K, Wąsowski A (2010) Feature-to-code mapping in two large product lines. Tech. rep., Department of Computer Science, University of Leipzig
Berger T, She S, Lotufo R, Wąsowski A, Czarnecki K (2010) Variability modeling in the real: a perspective from the operating systems domain. In: Proceedings of the international conference on automated software engineering. ACM, pp 73–82
Berger T, She S, Lotufo R, Wąsowski A, Czarnecki K (2013) A study of variability models and languages in the systems software domain. IEEE Trans Softw Eng 39(12):1611–1640
Borba P, Teixeira L, Gheyi R (2012) A theory of software product line refinement. Theor Comput Sci 455:2–30
Bovet D, Cesati M (2005) Understanding the Linux kernel, 3rd edn. O’Reilly
Chen K, Rajlich V (2010) Case study of feature location using dependence graph, after 10 years. In: Proceedings of the international workshop on program comprehension. IEEE, pp 1–3
Corbet J, Kroah-Hartman G, McPherson A (2013) Linux kernel development: how fast it is going, who is doing it, what they are doing, and who is sponsoring it. Last seen: July 16th, 2014. http://www.linuxfoundation.org/publications/linux-foundation/who-writes-linux-2013
Corbet J, Rubini A, Kroah-Hartman G (2005) Linux device drivers, 3rd edn. O’Reilly
Deprez JC, Lakhotia A (2000) A formalism to automate mapping from program features to code. In: Proceedings of the international workshop on program comprehension. IEEE, pp 69–78
Dietrich C, Tartler R, Schröder-Preikschat W, Lohmann D (2012) A robust approach for variability extraction from the Linux build system. In: Proceedings of the international software product line conference. ACM, pp 21–30
Dintzner N, Van Deursen A, Pinzger M (2013) Extracting feature model changes from the Linux kernel using FMDiff. In: Proceedings of the international workshop on variability modelling of software-intensive systems. ACM, pp 22:1–22:8
Eisenbarth T, Koschke R, Simon D (2003) Locating features in source code. IEEE Trans Softw Eng 29(3):210–224
Ernst MD, Badros GJ, Notkin D (2002) An empirical analysis of C preprocessor use. IEEE Trans Softw Eng 28(12):1146–1170
Favre JM (1997) Understanding in the large. In: Proceedings of the international workshop on program comprehension. IEEE, pp 29–38
Feitelson DG (2012) Perpetual development: a model of the Linux kernel life cycle. J Syst Softw 85(4):859–875
Fowler M, Beck K, Brant J, Opdyke W, Roberts D (1999) Refactoring: improving the design of existing code. Addison Wesley
Godfrey MW, Tu Q (2000) Evolution in open source software: a case study. In: Proceedings of the international conference on software maintenance. IEEE, pp 131–142
Guo J, Wang Y, Trinidad P, Benavides D (2012) Consistency maintenance for evolving feature models. Expert Syst Appl 39(5):4987–4998
Gurp JV, Bosch J, Svahnberg M (2001) On the notion of variability in software product lines. In: Proceedings of the working conference on software architecture. IEEE, pp 45–54
Holdschick H (2012) Challenges in the evolution of model-based software product lines in the automotive domain. In: Proceedings of the international workshop on feature-oriented software development. ACM, pp 70–73
Hunsen C, Zhang B, Siegmund J, Kästner C, Lessenich O, Becker M, Apel S (2014) Preprocessor-based variability in open-source and industrial software systems: an empirical study. Empir Softw Eng. To appear
Izurieta C, Bieman J (2006) The evolution of FreeBSD and Linux. In: Proceedings of the international symposium on empirical software engineering. ACM, pp 204–211
Janota M, Kiniry J (2007) Reasoning about feature models in higher-order logic. In: Proceedings of the international software product line conference. IEEE, pp 13–22
Kang KC, Cohen SG, Hess JA, Novak WE, Peterson AS (1990) Feature-oriented domain analysis (FODA) feasibility study. Tech. rep. Carnegie-Mellon University Software Engineering Institute
Kästner C, Apel S (2009) Virtual separation of concerns – a second chance for preprocessors. J Object Technol 8(6):59–78
Kästner C, Apel S, Batory D (2007) A case study implementing features using AspectJ. In: Proceedings of the international software product line conference. IEEE, pp 223–232
Kästner C, Apel S, Kuhlemann M (2008) Granularity in software product lines. In: Proceedings of the international conference on software engineering. ACM, pp 311–320
Kästner C, Giarrusso PG, Rendel T, Erdweg S, Ostermann K, Berger T (2011) Variability-aware parsing in the presence of lexical macros and conditional compilation. In: Proceedings of the international conference on object-oriented programming, systems, languages, and applications. ACM, pp 805–824
Kiczales G, Lamping J, Mendhekar A, Maeda C, Lopes C, Loingtier JM, Irwin J (1997) Aspect-oriented programming. In: Proceedings of the European conference on object-oriented programming. Springer, pp 220–242
Kim M, Notkin D, Grossman D, Wilson Jr. G (2013) Identifying and summarizing systematic code changes via rule inference. IEEE Trans Softw Eng 39 (1):45–62
Kuchana P (2004) Software architecture design patterns in java. Auerbach Publications
Le D, Walkingshaw E, Erwig M (2011) #ifdef confirmed harmful: promoting understandable software variation. In: Proceedings of the symposium on visual languages and human-centric computing. IEEE, pp 143–150
Liebig J, Apel S, Lengauer C, Kästner C, Schulze M (2010) An analysis of the variability in forty preprocessor-based software product lines. In: Proceedings of the international conference on software engineering. ACM, pp 105–114
Liebig J, Kästner C, Apel S (2011) Analyzing the discipline of preprocessor annotations in 30 million lines of C code. In: Proceedings of the international conference on aspect-oriented software development. ACM, pp 191–202
Lotufo R, She S, Berger T, Czarnecki K, Wąsowski A (2010) Evolution of the Linux kernel variability model. In: Proceedings of the international conference on software product lines: going beyond. Springer, pp 136–150
Love R (2010) Linux kernel development, 3rd edn. Addison Wesley
Marcus A, Rajlich V, Buchta J, Petrenko M, Sergeyev A (2005) Static techniques for concept location in object-oriented code. In: Proceedings of the international workshop on program comprehension. IEEE, pp 33–42
Massa A (2002) Embedded software development with eCos. Prentice Hall
Nadi S, Berger T, Kästner C, Czarnecki K (2014) Mining configuration constraints: static analyses and empirical results. In: Proceedings of the international conference on software engineering . ACM, pp 140–151
Nadi S, Holt R (2012) Mining kbuild to detect variability anomalies in Linux. In: Proceedings of the European conference on software maintenance and reengineering. IEEE, pp 107–116
Nadi S, Holt R (2013) The Linux kernel: a case study of build system variability. J Softw: Evol Process
Neill CJ, Laplante PA (2005) Antipatterns: identification, refactoring, and management. CRC Press
Neves L, Teixeira L, Sena D, Alves V, Kulezsa U, Borba P (2011) Investigating the safe evolution of software product lines. In: Proceedings of the international conference on generative programming and component engineering. ACM, pp 33–42
Passos L, Czarnecki K (2014) A dataset of feature additions and feature removals from the Linux kernel. In: Proceedings of the working conference on mining software repositories. ACM, pp 376– 379
Passos L, Czarnecki K, Apel S, Wąsowski A, Kästner C, Guo J (2013) Feature-oriented software evolution. In: Proceedings of the international workshop on variability modelling of software-intensive systems. ACM, pp 17:1–17:8
Passos L, Czarnecki K, Wąsowski A (2012) Towards a catalog of variability evolution patterns: the Linux kernel case. In: Proceedings of the international workshop on feature-oriented software development. ACM, pp 62–69
Passos L, Guo J, Teixeira L, Czarnecki K, Wąsowski A, Borba P (2013) Coevolution of variability models and related artifacts: a case study from the Linux kernel. In: Proceedings of the international software product line conference. ACM, pp 91–100
Pleuss A, Botterweck G, Dhungana D, Polzer A, Kowalewski S (2012) Model-driven support for product line evolution on feature level. J Syst Softw 85(10):2261–2274
Rosenmüller M, Apel S, Leich T, Saake G (2009) Tailor-made data management for embedded systems: a case study on Berkeley DB. Data Knowl Eng 68(12):1493–1512
Rosenmüller M, Siegmund N, Schirmeier H, Sincero J, Apel S, Leich T, Spinczyk O, Saake G (2008) FAME-DBMS: tailor-made data management solutions for embedded systems. In: Proceedings of the EDBT workshop on software engineering for tailor-made data management. ACM, pp 1–6
Runeson P, Host M, Rainer A, Regnell B (2012) Case study research in software engineering: guidelines and examples, 1st edn. Wiley
Seidl C, Heidenreich F, Aßmann U (2012) Coevolution of models and feature mapping in software product lines. In: Proceedings of the international software product line conference . ACM, pp 76–85
She S, Lotufo R, Berger T, Wȧsowski A, Czarnecki K (2010) The variability model of the Linux kernel. In: Proceedings of the international workshop on variability modelling of software-intensive systems. Universität Duisburg-Essen, pp 45–51
She S, Lotufo R, Berger T, Wąsowski A, Czarnecki K (2011) Reverse engineering feature models. In: Proceedings of the international conference on software engineering. ACM, pp 461–470
Simmons S, Edwards D, Wilde N, Homan J, Groble M (2006) Industrial tools for the feature location problem: an exploratory study. J Softw Maintenance Evol 18(6):457–474
Spencer H, Collyer G (1992) #ifdef Considered harmful, or portability experience with C news. In: Proceedings of the USENIX security symposium. USENIX Association
Sun J, Zhang H, Wang H (2005) Formal semantics and verification for feature modeling. In: Proceedings of the international conference on engineering of complex computer systems. IEEE , pp 303–312
Tartler R, Sincero J, Dietrich C, Schröder-Preikschat W, Lohmann D (2012) Revealing and repairing configuration inconsistencies in large scale system software. Int J Softw Tools Technol Transfer 14(5):531–551
Thüm T, Batory D, Kästner C (2009) Reasoning about edits to feature models. In: Proceedings of the international conference on software engineering. IEEE, pp 254–264
Thüm T, Kästner C, Erdweg S, Siegmund N (2011) Abstract features in feature modeling. In: Proceedings of the international software product line conference. IEEE, pp 191–200
Valente MT, Borges V, Passos L (2012) A semi-automatic approach for extracting software product lines. IEEE Trans Softw Eng 38(4):737–754
Venkateswaran S (2008) Essential Linux device drivers, 1st edn. Prentice Hall
Wilde N, Scully MC (1995) Software reconnaissance: mapping program features to code. J Softw Maint 7(1):49–62
Wright C, Cowan C, Smalley S, Morris J, Kroah-Hartman G (2002) Linux security modules: general security support for the Linux kernel. In: Proceedings of the USENIX security symposium. USENIX Association, pp 17–31
Author information
Authors and Affiliations
Corresponding author
Additional information
Communicated by: Ebrahim Bagheri, David Benavides, Per Runeson and Klaus Schmid
This work was partially funded by CAPES (BEX 0459-10-0), NECSIS, CNPq (141909/2010-2 and 245311/2012-2), FACEPE (APQ-0570-1.03/14), the German Research Foundation (AP 206/4, AP 206/5, and AP 206/6), ARTEMIS JU (295397 VARIES), and the Danish Agency for Science, Technology and Innovation.
Rights and permissions
About this article
Cite this article
Passos, L., Teixeira, L., Dintzner, N. et al. Coevolution of variability models and related software artifacts. Empir Software Eng 21, 1744–1793 (2016). https://doi.org/10.1007/s10664-015-9364-x
Published:
Issue Date:
DOI: https://doi.org/10.1007/s10664-015-9364-x