The C programming language
On the inference of configuration structures from source code
ICSE '94 Proceedings of the 16th international conference on Software engineering
Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
Generative programming: methods, tools, and applications
Generative programming: methods, tools, and applications
Separating features in source code: an exploratory study
ICSE '01 Proceedings of the 23rd International Conference on Software Engineering
Challenges of refactoring C programs
Proceedings of the International Workshop on Principles of Software Evolution
An Empirical Analysis of C Preprocessor Use
IEEE Transactions on Software Engineering
Preprocessors from an Abstract Point of View
ICSM '96 Proceedings of the 1996 International Conference on Software Maintenance
Implementing Layered Designs with Mixin Layers
ECCOP '98 Proceedings of the 12th European Conference on Object-Oriented Programming
Refactoring Browser with Preprocessor
CSMR '03 Proceedings of the Seventh European Conference on Software Maintenance and Reengineering
Global Analysis and Transformations in Preprocessed Languages
IEEE Transactions on Software Engineering
Large-scale AOSD for middleware
Proceedings of the 3rd international conference on Aspect-oriented software development
IEEE Transactions on Software Engineering
Information hiding interfaces for aspect-oriented design
Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering
Software Product Line Engineering: Foundations, Principles and Techniques
Software Product Line Engineering: Foundations, Principles and Techniques
SPLC '06 Proceedings of the 10th International on Software Product Line Conference
A Case Study Implementing Features Using AspectJ
SPLC '07 Proceedings of the 11th International Software Product Line Conference
Comparison and Evaluation of Clone Detection Tools
IEEE Transactions on Software Engineering
Granularity in software product lines
Proceedings of the 30th international conference on Software engineering
IEEE Transactions on Software Engineering
On the feasibility of an AOSD approach to Linux kernel extensions
Proceedings of the 2008 AOSD workshop on Aspects, components, and patterns for infrastructure software
Aspect mining in the presence of the C preprocessor
Proceedings of the 2008 AOSD workshop on Linking aspect technology and evolution
Can we refactor conditional compilation into aspects?
Proceedings of the 8th ACM international conference on Aspect-oriented software development
A model of refactoring physically and virtually separated features
GPCE '09 Proceedings of the eighth international conference on Generative programming and component engineering
Tailor-made data management for embedded systems: A case study on Berkeley DB
Data & Knowledge Engineering
Efficient extraction and analysis of preprocessor-based variability
GPCE '10 Proceedings of the ninth international conference on Generative programming and component engineering
Toolchain-independent variant management with the Leviathan filesystem
FOSD '10 Proceedings of the 2nd International Workshop on Feature-Oriented Software Development
TypeChef: toward type checking #ifdef variability in C
FOSD '10 Proceedings of the 2nd International Workshop on Feature-Oriented Software Development
Partial preprocessing C code for variability analysis
Proceedings of the 5th Workshop on Variability Modeling of Software-Intensive Systems
Analyzing the discipline of preprocessor annotations in 30 million lines of C code
Proceedings of the tenth international conference on Aspect-oriented software development
Proceedings of the sixth conference on Computer systems
Feature cohesion in software product lines: an exploratory study
Proceedings of the 33rd International Conference on Software Engineering
The road to feature modularity?
Proceedings of the 15th International Software Product Line Conference, Volume 2
Configuration coverage in the analysis of large-scale system software
PLOS '11 Proceedings of the 6th Workshop on Programming Languages and Operating Systems
On the impact of feature dependencies when maintaining preprocessor-based software product lines
Proceedings of the 10th ACM international conference on Generative programming and component engineering
Variability-aware parsing in the presence of lexical macros and conditional compilation
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
Configuration coverage in the analysis of large-scale system software
ACM SIGOPS Operating Systems Review
Understanding linux feature distribution
Proceedings of the 2012 workshop on Modularity in Systems Software
Intraprocedural dataflow analysis for software product lines
Proceedings of the 11th annual international conference on Aspect-oriented Software Development
Predicting performance via automated feature-interaction detection
Proceedings of the 34th International Conference on Software Engineering
A robust approach for variability extraction from the Linux build system
Proceedings of the 16th International Software Product Line Conference - Volume 1
Identifying improvement potential in evolving product line infrastructures: 3 case studies
Proceedings of the 16th International Software Product Line Conference - Volume 1
Code-based variability model extraction for software product line improvement
Proceedings of the 16th International Software Product Line Conference - Volume 2
A variability-aware module system
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Program comprehension in preprocessor-based software
SAFECOMP'12 Proceedings of the 2012 international conference on Computer Safety, Reliability, and Security
Delta-Oriented monitor specification
ISoLA'12 Proceedings of the 5th international conference on Leveraging Applications of Formal Methods, Verification and Validation: technologies for mastering change - Volume Part I
Quality of merge-refactorings for product lines
FASE'13 Proceedings of the 16th international conference on Fundamental Approaches to Software Engineering
An empirical study of PHP feature usage: a static analysis perspective
Proceedings of the 2013 International Symposium on Software Testing and Analysis
A study of variability spaces in open source software
Proceedings of the 2013 International Conference on Software Engineering
Linux variability anomalies: what causes them and how do they get fixed?
Proceedings of the 10th Working Conference on Mining Software Repositories
Scalable analysis of variable software
Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering
Coevolution of variability models and related artifacts: a case study from the Linux kernel
Proceedings of the 17th International Software Product Line Conference
Variability evolution and erosion in industrial product lines: a case study
Proceedings of the 17th International Software Product Line Conference
Do background colors improve program comprehension in the #ifdef hell?
Empirical Software Engineering
Family-based performance measurement
Proceedings of the 12th international conference on Generative programming: concepts & experiences
Does the discipline of preprocessor annotations matter?: a controlled experiment
Proceedings of the 12th international conference on Generative programming: concepts & experiences
Investigating preprocessor-based syntax errors
Proceedings of the 12th international conference on Generative programming: concepts & experiences
Exploring feature interactions in the wild: the new feature-interaction challenge
Proceedings of the 5th International Workshop on Feature-Oriented Software Development
Intraprocedural dataflow analysis for software product lines
Transactions on Aspect-Oriented Software Development X
A survey on teaching of software product lines
Proceedings of the Eighth International Workshop on Variability Modelling of Software-Intensive Systems
Towards system analysis with variability model metrics
Proceedings of the Eighth International Workshop on Variability Modelling of Software-Intensive Systems
Hi-index | 0.00 |
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.