The C programming language
On the inference of configuration structures from source code
ICSE '94 Proceedings of the 16th international conference on Software engineering
A framework for preprocessor-aware C source code analyses
Software—Practice & Experience
An Empirical Analysis of C Preprocessor Use
IEEE Transactions on Software Engineering
Preprocessors from an abstract point of view
WCRE '96 Proceedings of the 3rd Working Conference on Reverse Engineering (WCRE '96)
Preprocessor Conditional Removal by Simple Partial Evaluation
WCRE '01 Proceedings of the Eighth Working Conference on Reverse Engineering (WCRE'01)
Folding: An Approach to Enable Program Understanding of Preprocessed Languages
WCRE '01 Proceedings of the Eighth Working Conference on Reverse Engineering (WCRE'01)
WPC '97 Proceedings of the 5th International Workshop on Program Comprehension (WPC '97)
Instantiating and Detecting Design Patterns: Putting Bits and Pieces Together
Proceedings of the 16th IEEE international conference on Automated software engineering
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
Proceedings of the 3rd international conference on Aspect-oriented software development
Large-scale AOSD for middleware
Proceedings of the 3rd international conference on Aspect-oriented software development
Rewrite Systems for Symbolic Evaluation of C-like Preprocessing
CSMR '04 Proceedings of the Eighth Euromicro Working Conference on Software Maintenance and Reengineering (CSMR'04)
Columbus Schema for C/C++ Preprocessing
CSMR '04 Proceedings of the Eighth Euromicro Working Conference on Software Maintenance and Reengineering (CSMR'04)
IWPC '04 Proceedings of the 12th IEEE International Workshop on Program Comprehension
Isolating Idiomatic Crosscutting Concerns
ICSM '05 Proceedings of the 21st IEEE International Conference on Software Maintenance
Program refactoring in the presence of preprocessor directives
Program refactoring in the presence of preprocessor directives
A quantitative analysis of aspects in the eCos kernel
Proceedings of the 1st ACM SIGOPS/EuroSys European Conference on Computer Systems 2006
Proceedings of the 6th international conference on Aspect-oriented software development
C-CLR: a tool for navigating highly configurable system software
Proceedings of the 6th workshop on Aspects, components, and patterns for infrastructure software
Evolving software product lines with aspects: an empirical study on design stability
Proceedings of the 30th international conference 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
A model of refactoring physically and virtually separated features
GPCE '09 Proceedings of the eighth international conference on Generative programming and component engineering
An analysis of the variability in forty preprocessor-based software product lines
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1
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
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
Intraprocedural dataflow analysis for software product lines
Proceedings of the 11th annual international conference on Aspect-oriented Software Development
LARA: an aspect-oriented programming language for embedded systems
Proceedings of the 11th annual international conference on Aspect-oriented Software Development
SuperC: parsing all of C by taming the preprocessor
Proceedings of the 33rd ACM SIGPLAN conference on Programming Language Design and Implementation
Partitioning applications for hybrid and federated clouds
CASCON '12 Proceedings of the 2012 Conference of the Center for Advanced Studies on Collaborative Research
A quantitative assessment of aspectual feature modules for evolving software product lines
SBLP'12 Proceedings of the 16th Brazilian conference on Programming Languages
Do background colors improve program comprehension in the #ifdef hell?
Empirical Software Engineering
Intraprocedural dataflow analysis for software product lines
Transactions on Aspect-Oriented Software Development X
Hi-index | 0.00 |
Systems software uses conditional compilation to manage crosscutting concerns in a very fine-grained and efficient way, but at the expense of tangled and scattered conditional code. Refactoring of conditional compilation into aspects gets rid of these issues, but it is not clear yet for which patterns of conditional compilation aspects make sense and whether or not current aspect technology is able to express these patterns. To investigate these two problems, this paper presents a graphical ``preprocessor blueprint'' model which offers a queryable representation of the syntactical interaction of conditional compilation and the source code. A case study on the Parrot VM shows that preprocessor blueprints are able to express and query for the four commonly known patterns of conditional compilation usage, and that they allow to discover seven additional important patterns. By correlating each pattern's potential for refactoring into advice and each pattern's evolution of the number of occurrences, we show that refactoring into advice in the Parrot VM is a good alternative for three of the eleven patterns, whereas for the other patterns trade-offs have to be considered between robustness and fine-grainedness of the advice.