Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
skip to main content
10.1145/1806799.1806819acmconferencesArticle/Chapter ViewAbstractPublication PagesicseConference Proceedingsconference-collections
research-article

An analysis of the variability in forty preprocessor-based software product lines

Published: 01 May 2010 Publication History

Abstract

Over 30 years ago, the preprocessor cpp was developed to extend the programming language C by lightweight metaprogramming capabilities. Despite its error-proneness and low abstraction level, the preprocessor is still widely used in present-day software projects to implement variable software. However, not much is known about how cpp is employed to implement variability. To address this issue, we have analyzed forty open-source software projects written in C. Specifically, we answer the following questions: How does program size influence variability? How complex are extensions made via cpp's variability mechanisms? At which level of granularity are extensions applied? Which types of extension occur? These questions revive earlier discussions on program comprehension and refactoring in the context of the preprocessor. To provide answers, we introduce several metrics measuring the variability, complexity, granularity, and types of extension applied by preprocessor directives. Based on the collected data, we suggest alternative implementation techniques. Our data set is a rich source for rethinking language design and tool support.

References

[1]
B. Adams, W. De Meuter, H. Tromp, and A. Hassan. Can we Refactor Conditional Compilation into Aspects? In Proceedings of the International Conference on Aspect-Oriented Software Development (AOSD), pages 243--254. ACM Press, 2009.
[2]
B. Adams, B. Van Rompaey, C. Gibbs, and Y. Coady. Aspect Mining in the Presence of the C Preprocessor. In Proceedings of the AOSD Workshop on Linking Aspect Technology and Evolution (LATE), pages 1--6. ACM Press, 2008.
[3]
S. Apel. The Role of Features and Aspects in Software Development. PhD thesis, School of Computer Science, University of Magdeburg, 2007.
[4]
S. Apel. How AspectJ is Used: An Analysis of Eleven AspectJ Programs. Journal of Object Technology (JOT), 9(1):117--142, 2010.
[5]
S. Apel, T. Leich, and G. Saake. Aspectual Feature Modules. IEEE Transactions on Software Engineering (TSE), 34(2):162--180, 2008.
[6]
D. Batory, J. Sarvela, and A. Rauschmayer. Scaling Step-Wise Refinement. IEEE Transactions on Software Engineering (TSE), 30(6):355--371, 2004.
[7]
S. Bellon, R. Koschke, G. Antoniol, J. Krinke, and E. Merlo. Comparison and Evaluation of Clone Detection Tools. IEEE Transactions on Software Engineering (TSE), 33(9):577--591, 2007.
[8]
P. Clements and L. Northrop. Software Product Lines: Practices and Patterns. Addison-Wesley, 2002.
[9]
A. Colyer and A. Clement. Large-Scale AOSD for Middleware. In Proceedings of the International Conference on Aspect-Oriented Software Development (AOSD), pages 56--65. ACM Press, 2004.
[10]
A. Colyer, A. Clement, and G. Blair. On the Separation of Concerns in Program Families. Technical Report COMP-001-2004, Lancaster University, January 2004.
[11]
K. Czarnecki and U. Eisenecker. Generative Programming: Methods, Tools, and Applications. Addison-Wesley, 2000.
[12]
M. Ernst, G. Badros, and D. Notkin. An Empirical Analysis of C Preprocessor Use. IEEE Transactions on Software Engineering (TSE), 28(12):1146--1170, 2002.
[13]
J. Favre. Preprocessors from an Abstract Point of View. In Proceedings of the International Conference on Software Maintenance (ICSM), pages 329--339. IEEE CS, 1996.
[14]
M. Fowler. Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999.
[15]
A. Garrido and R. Johnson. Challenges of Refactoring C Programs. In Proceedings of the International Workshop on Principles of Software Evolution (IWPSE), pages 6--14. ACM Press, 2002.
[16]
K. Kang, S. Cohen, J. Hess, W. Novak, and A. Peterson. Feature-Oriented Domain Analysis (FODA) Feasibility Study. Technical Report CMU/SEI-90-TR-21, SEI, November 1990.
[17]
C. Kästner, S. Apel, and D. Batory. A Case Study Implementing Feature Using AspectJ. In Proceedings of the International Software Product Line Conference (SPLC), pages 223--232. IEEE CS, 2007.
[18]
C. Kästner, S. Apel, and M. Kuhlemann. Granularity in Software Product Lines. In Proceedings of the International Conference on Software Engineering (ICSE), pages 311--320. ACM Press, 2008.
[19]
C. Kästner, S. Apel, and M. Kuhlemann. A Model of Refactoring Physically and Virtually Separated Features. In Proceedings of the International Conference on Generative Programming and Component Engineering (GPCE), pages 157--166. ACM Press, 2009.
[20]
M. Kendall and B. Babington Smith. The Problem of m Rankings. The Annals of Mathematical Statistics, 10(3):275--287, 1939.
[21]
B. Kernighan and D. Ritchie. The C Programming Language. Prentice-Hall, 1988.
[22]
G. Kiczales, J. Lamping, A. Mendhekar, C. Maeda, C. Lopes, J. Loingtier, and J. Irwin. Aspect-Oriented Programming. In Proceedings of the European Conference on Object-Oriented Programming (ECOOP), pages 220--242. Springer-Verlag, 1997.
[23]
M. Krone and G. Snelting. On the Inference of Configuration Structures from Source Code. In Proceedings of the International Conference on Software Engineering (ICSE), pages 49--57. IEEE CS, 1994.
[24]
K. Lee, K. Kang, M. Kim, and S. Park. Combining Feature-Oriented Analysis and Aspect-Oriented Programming for Product Line Asset Development. In Proceedings of the International Software Product Line Conference (SPLC), pages 103--112. IEEE CS, 2006.
[25]
J. Maletic, M. Collard, and H. Kagdi. Leveraging XML Technologies in Developing Program Analysis Tools. In Proceedings of the ICSE Workshop on Adoption-Centric Software Engineering (ACSE), pages 80--85, 2004. http://www.acse2004.cs.uvic.ca/.
[26]
G. Murphy, A. Lai, R. Walker, and M. Robillard. Separating Features in Source Code: An Exploratory Study. In Proceedings of the International Conference on Software Engineering (ICSE), pages 275--284. IEEE CS, 2001.
[27]
K. Pohl, G. Böckle, and F. van der Linden. Software Product Line Engineering: Foundations, Principles and Techniques. Springer-Verlag, 2005.
[28]
A. Reynolds, M. Fiuczynski, and R. Grimm. On the Feasibility of an AOSD Approach to Linux Kernel Extensions. In Proceedings of the AOSD Workshop on Aspects, Components, and Patterns for Infrastructure Software (ACP4IS), pages 1--7. ACM Press, 2008.
[29]
M. Rosenmüller, S. Apel, T. Leich, and G. Saake. Tailor-Made Data Management for Embedded Systems: A Case Study on Berkeley DB. Data and Knowledge Engineering (DKE), 68(12):1493--1512, 2009.
[30]
M. Rosenmüller, M. Kuhlemann, N. Siegmund, and H. Schirmeier. Avoiding Variability of Method Signatures in Software Product Lines: A Case Study. In Proceedings of the GPCE Workshop on Aspect-Oriented Product Line Engineering (AOPLE), pages 20--25, 2007. http://www.softeng.ox.ac.uk/aople/.
[31]
Y. Smaragdakis and D. Batory. Implementing Layered Designs with Mixin Layers. In Proceedings of the European Conference on Object-Oriented Programming (ECOOP), pages 550--570. Springer-Verlag, 1998.
[32]
H. Spencer and G. Collyer. #ifdef Considered Harmful, or Portability Experience with C News. In Proceedings of the USENIX Technical Conference, pages 185--197. USENIX Association Berkeley, 1992.
[33]
D. Spinellis. Global Analysis and Transformations in Preprocessed Languages. IEEE Transactions on Software Engineering (TSE), 29(11):1019--1030, 2003.
[34]
K. Sullivan, W. Griswold, Y. Song, Y. Cai, M. Shonle, N. Tewari, and H. Rajan. Information Hiding Interfaces for Aspect-Oriented Design. In Proceedings of the European Software Engineering Conference and of the International Symposium on Foundations of Software Engineering (ESEC/FSE), pages 166--175. ACM Press, 2005.
[35]
M. Vittek. Refactoring Browser with Preprocessor. In Proceedings of the European Conference on Software Maintenance and Reengineering (CSMR), pages 101--110. IEEE CS, 2003.

Cited By

View all
  • (2024)Software Product Line Engineering via Software TransplantationACM Transactions on Software Engineering and Methodology10.1145/369598734:2(1-27)Online publication date: 20-Sep-2024
  • (2024)On the Expressive Power of Languages for Static VariabilityProceedings of the ACM on Programming Languages10.1145/36897478:OOPSLA2(1018-1050)Online publication date: 8-Oct-2024
  • (2024)Variability-Aware Differencing with DiffDetectiveCompanion Proceedings of the 32nd ACM International Conference on the Foundations of Software Engineering10.1145/3663529.3663813(632-636)Online publication date: 10-Jul-2024
  • Show More Cited By

Recommendations

Comments

Information & Contributors

Information

Published In

cover image ACM Conferences
ICSE '10: Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1
May 2010
627 pages
ISBN:9781605587196
DOI:10.1145/1806799
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

Sponsors

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 01 May 2010

Permissions

Request permissions for this article.

Check for updates

Author Tags

  1. C preprocessor
  2. empirical study
  3. software product lines

Qualifiers

  • Research-article

Funding Sources

Conference

ICSE '10
Sponsor:

Acceptance Rates

Overall Acceptance Rate 276 of 1,856 submissions, 15%

Upcoming Conference

ICSE 2025

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)37
  • Downloads (Last 6 weeks)5
Reflects downloads up to 07 Mar 2025

Other Metrics

Citations

Cited By

View all
  • (2024)Software Product Line Engineering via Software TransplantationACM Transactions on Software Engineering and Methodology10.1145/369598734:2(1-27)Online publication date: 20-Sep-2024
  • (2024)On the Expressive Power of Languages for Static VariabilityProceedings of the ACM on Programming Languages10.1145/36897478:OOPSLA2(1018-1050)Online publication date: 8-Oct-2024
  • (2024)Variability-Aware Differencing with DiffDetectiveCompanion Proceedings of the 32nd ACM International Conference on the Foundations of Software Engineering10.1145/3663529.3663813(632-636)Online publication date: 10-Jul-2024
  • (2024)Mapping Cardinality-based Feature Models to Weighted Automata over Featured Multiset SemiringsProceedings of the 28th ACM International Systems and Software Product Line Conference10.1145/3646548.3676539(1-11)Online publication date: 2-Sep-2024
  • (2024)Give an Inch and Take a Mile? Effects of Adding Reliable Knowledge to Heuristic Feature TracingProceedings of the 28th ACM International Systems and Software Product Line Conference10.1145/3646548.3672593(84-95)Online publication date: 2-Sep-2024
  • (2024)Explaining Edits to Variability Annotations in Evolving Software Product LinesProceedings of the 18th International Working Conference on Variability Modelling of Software-Intensive Systems10.1145/3634713.3634725(93-102)Online publication date: 7-Feb-2024
  • (2024)Navigating Expertise in Configurable Software Systems through the Maze of Variability2024 IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER)10.1109/SANER60148.2024.00053(450-454)Online publication date: 12-Mar-2024
  • (2023)An Experiment on How Feature Dependent Variables Affect Configurable System ComprehensibilityProceedings of the 17th Brazilian Symposium on Software Components, Architectures, and Reuse10.1145/3622748.3622755(61-70)Online publication date: 25-Sep-2023
  • (2023)Views on Edits to Variational SoftwareProceedings of the 27th ACM International Systems and Software Product Line Conference - Volume A10.1145/3579027.3608985(141-152)Online publication date: 28-Aug-2023
  • (2023)VariantIncProceedings of the 27th ACM International Systems and Software Product Line Conference - Volume A10.1145/3579027.3608984(129-140)Online publication date: 28-Aug-2023
  • Show More Cited By

View Options

Login options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Figures

Tables

Media

Share

Share

Share this Publication link

Share on social media