{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,11,12]],"date-time":"2025-11-12T03:19:41Z","timestamp":1762917581723,"version":"3.41.0"},"reference-count":55,"publisher":"Springer Science and Business Media LLC","issue":"2","license":[{"start":{"date-parts":[[2015,4,14]],"date-time":"2015-04-14T00:00:00Z","timestamp":1428969600000},"content-version":"tdm","delay-in-days":0,"URL":"http:\/\/www.springer.com\/tdm"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":["Empir Software Eng"],"published-print":{"date-parts":[[2016,4]]},"DOI":"10.1007\/s10664-015-9360-1","type":"journal-article","created":{"date-parts":[[2015,4,13]],"date-time":"2015-04-13T02:25:18Z","timestamp":1428891918000},"page":"449-482","update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":64,"title":["Preprocessor-based variability in open-source and industrial software systems: An empirical study"],"prefix":"10.1007","volume":"21","author":[{"given":"Claus","family":"Hunsen","sequence":"first","affiliation":[]},{"given":"Bo","family":"Zhang","sequence":"additional","affiliation":[]},{"given":"Janet","family":"Siegmund","sequence":"additional","affiliation":[]},{"given":"Christian","family":"K\u00e4stner","sequence":"additional","affiliation":[]},{"given":"Olaf","family":"Le\u00dfenich","sequence":"additional","affiliation":[]},{"given":"Martin","family":"Becker","sequence":"additional","affiliation":[]},{"given":"Sven","family":"Apel","sequence":"additional","affiliation":[]}],"member":"297","published-online":{"date-parts":[[2015,4,14]]},"reference":[{"key":"9360_CR1","doi-asserted-by":"crossref","unstructured":"Adams B, De Meuter W, Tromp H, Hassan AE (2009) Can we refactor conditional compilation into aspects? In: Proc. int. conf. aspect-oriented software development (AOSD), ACM, pp 243\u2013254","DOI":"10.1145\/1509239.1509274"},{"key":"9360_CR2","doi-asserted-by":"crossref","unstructured":"Anderson TW, Finn JD (1996) The new statistical analysis of data. Springer","DOI":"10.1007\/978-1-4612-4000-6"},{"key":"9360_CR3","doi-asserted-by":"crossref","unstructured":"Apel S, Batory D, K\u00e4stner C, Saake G (2013) Feature-oriented software product lines: concepts and implementation. Springer","DOI":"10.1007\/978-3-642-37521-7"},{"key":"9360_CR4","unstructured":"Basili V, Caldiera G, Rombach H (1994) Goal question metrics paradigm. Encyclopedia of software engineering"},{"key":"9360_CR5","doi-asserted-by":"crossref","unstructured":"Baxter I, Mehlich M (2001) Preprocessor conditional removal by simple partial evaluation. In: Proc. working conference on reverse engineering (WCRE), IEEE, pp 281\u2013290","DOI":"10.1109\/WCRE.2001.957833"},{"issue":"1","key":"9360_CR6","doi-asserted-by":"crossref","first-page":"289","DOI":"10.1111\/j.2517-6161.1995.tb02031.x","volume":"57","author":"Y Benjamini","year":"1995","unstructured":"Benjamini Y, Hochberg Y (1995) Controlling the false discovery rate: a practical and powerful approach to multiple testing. J R Stat Soc Ser B (Methodological) 57(1):289\u2013300","journal-title":"J R Stat Soc Ser B (Methodological)"},{"key":"9360_CR7","doi-asserted-by":"crossref","unstructured":"Berger T, She S, Lotufo R, Wa\u0327sowski A, Czarnecki K (2010) Variability modeling in the real: a perspective from the operating systems domain. In: Proc. int. conf. automated software engineering (ASE), ACM, pp 73\u201382","DOI":"10.1145\/1858996.1859010"},{"key":"9360_CR8","unstructured":"Clements PC, Northrop L (2001) Software product lines: practices and patterns. SEI Series in Software Engineering, Addison-Wesley"},{"key":"9360_CR9","unstructured":"Cliff N (1996) Ordinal methods for behavioral data analysis. Erlbaum"},{"issue":"5","key":"9360_CR10","first-page":"28","volume":"14","author":"ME Conway","year":"1968","unstructured":"Conway M E (1968) How do committees invent? Datamation 14(5):28\u201331","journal-title":"Datamation"},{"key":"9360_CR11","doi-asserted-by":"crossref","first-page":"553","DOI":"10.1037\/0003-066X.37.5.553","volume":"37","author":"M Cowles","year":"1982","unstructured":"Cowles M, Davis C (1982) On the origins of the .05 level of statistical significance. Am Psychol 37:553\u2013558","journal-title":"Am Psychol"},{"key":"9360_CR12","unstructured":"Czarnecki K, Eisenecker UW (2000) Generative programming \u2013 methods, tools and applications. Addison-Wesley"},{"key":"9360_CR13","doi-asserted-by":"crossref","first-page":"1146","DOI":"10.1109\/TSE.2002.1158288","volume":"12","author":"MD Ernst","year":"2002","unstructured":"Ernst MD, Badros GJ, Notkin D (2002) An empirical analysis of C preprocessor use. IEEE Trans Softw Eng (TSE) 12:1146\u20131170","journal-title":"IEEE Trans Softw Eng (TSE)"},{"issue":"1","key":"9360_CR14","doi-asserted-by":"crossref","first-page":"6:1","DOI":"10.1145\/2063239.2063245","volume":"21","author":"M Erwig","year":"2011","unstructured":"Erwig M, Walkingshaw E (2011) The choice calculus: a representation for software variation. ACM Trans Softw Eng Methodol (TOSEM) 21(1):6:1\u20136:27","journal-title":"ACM Trans Softw Eng Methodol (TOSEM)"},{"key":"9360_CR15","doi-asserted-by":"crossref","unstructured":"Favre JM (1996) Preprocessors from an abstract point of view. In: Proc. int. conf. software maintenance (ICSM), IEEE, pp 329\u2013339","DOI":"10.1109\/ICSM.1996.565036"},{"key":"9360_CR16","doi-asserted-by":"crossref","unstructured":"Favre JM (1997) Understanding-in-the-large. In: Proc. int. workshop on program comprehension (WPC), IEEE, pp 29\u201338","DOI":"10.1109\/WPC.1997.601260"},{"issue":"4","key":"9360_CR17","doi-asserted-by":"crossref","first-page":"699","DOI":"10.1007\/s10664-012-9208-x","volume":"18","author":"J Feigenspan","year":"2013","unstructured":"Feigenspan J, K\u00e4stner C, Apel S, Liebig J, Schulze M, Dachselt R, Papendieck M, Leich T, Saake G (2013) Do background colors improve program comprehension in the #ifdef hell? Empir Softw Eng 18(4):699\u2013745","journal-title":"Empir Softw Eng"},{"issue":"3","key":"9360_CR18","doi-asserted-by":"crossref","first-page":"587","DOI":"10.2307\/25148740","volume":"30","author":"B Fitzgerald","year":"2006","unstructured":"Fitzgerald B (2006) The transformation of open source software. MIS Quarterly 30(3):587\u2013598","journal-title":"MIS Quarterly"},{"key":"9360_CR19","unstructured":"Ganesan D, Lindvall M, Ackermann C, McComas D, Bartholomew M (2009) Verifying architectural design rules of the flight software product line. In: Proc. int. software product line conference (SPLC), ACM, pp 161\u2013170"},{"issue":"7","key":"9360_CR20","doi-asserted-by":"crossref","first-page":"613","DOI":"10.1002\/smr.1636","volume":"26","author":"MW Godfrey","year":"2014","unstructured":"Godfrey MW, Germ\u00e1n DM (2014) On the evolution of Lehman\u2019s laws. J Softw Evol Process 26(7):613\u2013619","journal-title":"J Softw Evol Process"},{"key":"9360_CR21","unstructured":"Jepsen HP, Beuche D (2009) Running a software product line \u2013 standing still is going backwards. In: Proc. int. software product line conference (SPLC), ACM, pp 101\u2013110"},{"key":"9360_CR22","doi-asserted-by":"crossref","unstructured":"Kang K, Cohen SG, Hess JA, Novak WE, Peterson AS (1990) Feature-oriented domain analysis (FODA) feasibility study. Tech. Rep. CMU\/SEI-90-TR-21, Carnegie-Mellon University, Software Engineering Institute","DOI":"10.21236\/ADA235785"},{"key":"9360_CR23","unstructured":"K\u00e4stner C (2010) Virtual separation of concerns: toward preprocessors 2.0. Logos Verlag Berlin"},{"key":"9360_CR24","doi-asserted-by":"crossref","unstructured":"K\u00e4stner C, Apel S, Kuhlemann M (2008a) Granularity in software product lines. In: Proc. int. conf. software engineering (ICSE), ACM, pp 311\u2013320","DOI":"10.1145\/1368088.1368131"},{"key":"9360_CR25","unstructured":"K\u00e4stner C, Trujillo S, Apel S (2008b) Visualizing software product line variabilities in source code. In: Proc. int. SPLC workshop visualisation in software product line engineering (ViSPLE), Lero Int. Science Centre, University of Limerick, Ireland, pp 303\u2013312"},{"key":"9360_CR26","doi-asserted-by":"crossref","unstructured":"K\u00e4stner 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: Proc. int. conf. object-oriented programming, systems, languages, and applications (OOPSLA). ACM, pp 805\u2013824","DOI":"10.1145\/2048066.2048128"},{"key":"9360_CR27","doi-asserted-by":"crossref","unstructured":"K\u00e4stner C, Ostermann K, Erdweg S (2012) A variability-aware module system. In: Proc. int. conf. object-oriented programming, systems, languages, and applications (OOPSLA). ACM, pp 773\u2013792","DOI":"10.1145\/2384616.2384673"},{"key":"9360_CR28","unstructured":"Kernighan BW, Ritchie D (1988) The C programming language. Prentice-Hall"},{"key":"9360_CR29","doi-asserted-by":"crossref","unstructured":"Krone M, Snelting G (1994) On the inference of configuration structures from source code. In: Proc. int. conf. software engineering (ICSE). IEEE, pp 49\u201357","DOI":"10.1109\/ICSE.1994.296765"},{"key":"9360_CR30","doi-asserted-by":"crossref","unstructured":"Kullbach B, Riediger V (2001) Folding: an approach to enable program understanding of preprocessed languages. In: Proc. working conference on reverse engineering (WCRE), IEEE, pp 3\u201312","DOI":"10.1109\/WCRE.2001.957805"},{"key":"9360_CR31","doi-asserted-by":"crossref","unstructured":"Kumar A, Sutton A, Stroustrup B (2012) Rejuvenating C++ programs through demacrofication. In: Proc. int. conf. software maintenance (ICSM). IEEE, pp 98\u2013107","DOI":"10.1109\/ICSM.2012.6405259"},{"key":"9360_CR32","doi-asserted-by":"crossref","unstructured":"Liebig J, Apel S, Lengauer C, K\u00e4stner C, Schulze M (2010) An analysis of the variability in forty preprocessor-based software product lines. In: Proc. int. conf. software engineering (ICSE). ACM, pp 105\u2013114","DOI":"10.1145\/1806799.1806819"},{"key":"9360_CR33","doi-asserted-by":"crossref","unstructured":"Liebig J, K\u00e4stner C, Apel S (2011) Analyzing the discipline of preprocessor annotations in 30 million lines of C code. In: Proc. int. conf. aspect-oriented software development (AOSD). ACM, pp 191\u2013202","DOI":"10.1145\/1960275.1960299"},{"key":"9360_CR34","doi-asserted-by":"crossref","unstructured":"Liebig J, von Rhein A, K\u00e4stner C, Apel S, D\u00f6rre J, Lengauer C (2013) Scalable analysis of variable software. In: Proc. Europ. software engineering conference and the int. symposium on the foundations of software engineering (ESEC\/FSE). ACM, pp 81\u201391","DOI":"10.1145\/2491411.2491437"},{"key":"9360_CR35","doi-asserted-by":"crossref","unstructured":"Lohmann D, Scheler F, Tartler R, Spinczyk O, Schr\u00f6der-Preikschat W (2006) A quantitative analysis of aspects in the eCos Kernel. In: Proc. int. EuroSys conference (EuroSys). ACM, 191\u2013204","DOI":"10.1145\/1217935.1217954"},{"key":"9360_CR36","doi-asserted-by":"crossref","unstructured":"Lotufo R, She S, Berger T, Czarnecki K, Wasowski A (2010) Evolution of the Linux kernel variability model. In: Proc. int. software product line conference (SPLC). Springer, pp 136\u2013150","DOI":"10.1007\/978-3-642-15579-6_10"},{"issue":"5","key":"9360_CR37","first-page":"196","volume":"55","author":"W Mauerer","year":"2013","unstructured":"Mauerer W, Jaeger MC (2013) Open source engineering processes. Inform Technol 55(5):196\u2013 203","journal-title":"Inform Technol"},{"key":"9360_CR38","doi-asserted-by":"crossref","unstructured":"McCloskey B, Brewer E (2005) ASTEC: A New Approach to Refactoring C. In: Proc. Europ. software engineering conference and the int. symposium on the foundations of software engineering (ESEC\/FSE), ACM, pp 21\u201330","DOI":"10.1145\/1095430.1081712"},{"key":"9360_CR39","doi-asserted-by":"crossref","unstructured":"Passos L, Teixeira L, Dintzner N, Apel S, Wasowski A, Czarnecki K, Borba P, Guom J (2015) Coevolution of variability models and related software artifacts: a fresh look at evolution patterns in the Linux kernel. Empirical Software Engineering. To appear.","DOI":"10.1007\/s10664-015-9364-x"},{"key":"9360_CR40","doi-asserted-by":"crossref","unstructured":"Pearse TT, Oman PW (1997) Experiences developing and maintaining software in a multi-platform environment. In: Proc. int. conf. software maintenance (ICSM). IEEE, pp 270\u2013277","DOI":"10.1109\/ICSM.1997.624254"},{"key":"9360_CR41","unstructured":"Pech D, Knodel J, Carbon R, Schitter C, Hein D (2009) Variability management in small development organizations \u2013 experiences and lessons learned from a case study. In: Proc. int. software product line conference (SPLC), ACM, pp 285\u2013294"},{"key":"9360_CR42","doi-asserted-by":"crossref","unstructured":"Pohl K, B\u00f6ckle G, van der Linden F (2005) Software product line engineering \u2013 foundations, principles, and techniques. Springer","DOI":"10.1007\/3-540-28901-1"},{"key":"9360_CR43","doi-asserted-by":"crossref","unstructured":"Queiroz R, Passos LT, Valente MT, Apel S, Czarnecki K (2014) Does feature scattering follow power-law distributions? An investigation of five pre-processor-based software families. In: Proc. int. workshop on feature-oriented software development (FOSD). ACM, pp 23\u201329","DOI":"10.1145\/2660190.2662114"},{"key":"9360_CR44","doi-asserted-by":"crossref","unstructured":"Ribeiro M, Queiroz F, Borba P, Tol\u00eado T, Brabrand C, Soares S (2011) On the impact of feature dependencies when maintaining preprocessor-based software product lines. In: Proc. int. conf. generative programming and component engineering (GPCE). ACM, pp 23\u201332","DOI":"10.1145\/2047862.2047868"},{"key":"9360_CR45","unstructured":"Schulze S, Liebig J, Siegmund J, Apel S (2013) Does the discipline of preprocessor annotations matter? A controlled experiment. In: Proc. int. conf. generative programming and component engineering (GPCE). ACM, pp 65\u201374"},{"key":"9360_CR46","doi-asserted-by":"crossref","unstructured":"Singh N, Gibbs C, Coady Y (2007) C-CLR: a tool for navigating highly configurable system software. In: Proc. AOSD workshop on aspects, components, and patterns for infrastructure software (ACP4IS). ACM, p 6","DOI":"10.1145\/1233901.1233910"},{"key":"9360_CR47","unstructured":"Spencer H, Collyer G (1992) #ifdef considered harmful, or portability experience with C News. In: USENIX summer technical conference. USENIX Association, pp 185\u2013197"},{"key":"9360_CR48","doi-asserted-by":"crossref","unstructured":"Spinellis D (2008) A tale of four kernels. In: Proc. int. conf. software engineering (ICSE). ACM, pp 381\u2013390","DOI":"10.1145\/1368088.1368140"},{"key":"9360_CR49","doi-asserted-by":"crossref","unstructured":"Sutton A, Maletic JI (2007) How we manage portability and configuration with the C preprocessor. In: Proc. int. conf. software maintenance (ICSM). IEEE, pp 275\u2013284","DOI":"10.1109\/ICSM.2007.4362640"},{"key":"9360_CR50","unstructured":"Tartler R (2013) Mastering variability challenges in Linux and related highly-configurable system software. PhD thesis, Friedrich-Alexander-Universit\u00e4t Erlangen-N\u00fcrnberg"},{"key":"9360_CR51","doi-asserted-by":"crossref","unstructured":"Tartler R, Lohmann D, Sincero J, Schr\u00f6der-Preikschat W (2011) Feature consistency in compile-time-configurable system software: facing the Linux 10,000 feature problem. In: Proc. int. EuroSys conference (EuroSys). ACM, pp 47\u201360","DOI":"10.1145\/1966445.1966451"},{"key":"9360_CR52","unstructured":"Tomassetti F, Ratiu D (2013) Extracting variability from C and lifting it to mbeddr. In: Proc. int. workshop on reverse variability engineering (REVE), pp 9\u201316"},{"key":"9360_CR53","unstructured":"Vo K, Chen Y (1992) Incl: a tool to analyze include files. In: Proc. USENIX conference. USENIX Association, pp 199\u2013208"},{"key":"9360_CR54","doi-asserted-by":"crossref","unstructured":"Weise D, Crew R (1993) Programmable syntax macros. In: Proc. int. conf. programming languages design and implementation (PLDI). ACM, pp 156\u2013165","DOI":"10.1145\/173262.155105"},{"key":"9360_CR55","doi-asserted-by":"crossref","unstructured":"Zhang B, Becker M, Patzke T, Sierszecki K, Savolainen JE (2013) Variability evolution and erosion in industrial product lines: a case study. In: Proc. int. software product line conference (SPLC). ACM, pp 168\u2013177","DOI":"10.1145\/2491627.2491645"}],"container-title":["Empirical Software Engineering"],"original-title":[],"language":"en","link":[{"URL":"http:\/\/link.springer.com\/content\/pdf\/10.1007\/s10664-015-9360-1.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"text-mining"},{"URL":"http:\/\/link.springer.com\/article\/10.1007\/s10664-015-9360-1\/fulltext.html","content-type":"text\/html","content-version":"vor","intended-application":"text-mining"},{"URL":"http:\/\/link.springer.com\/content\/pdf\/10.1007\/s10664-015-9360-1","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,5,22]],"date-time":"2025-05-22T11:40:57Z","timestamp":1747914057000},"score":1,"resource":{"primary":{"URL":"http:\/\/link.springer.com\/10.1007\/s10664-015-9360-1"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2015,4,14]]},"references-count":55,"journal-issue":{"issue":"2","published-print":{"date-parts":[[2016,4]]}},"alternative-id":["9360"],"URL":"https:\/\/doi.org\/10.1007\/s10664-015-9360-1","relation":{},"ISSN":["1382-3256","1573-7616"],"issn-type":[{"type":"print","value":"1382-3256"},{"type":"electronic","value":"1573-7616"}],"subject":[],"published":{"date-parts":[[2015,4,14]]}}}