Preprocessor

14,000,000 Leading Edge Experts on the ideXlab platform

Scan Science and Technology

Contact Leading Edge Experts & Companies

Scan Science and Technology

Contact Leading Edge Experts & Companies

The Experts below are selected from a list of 15087 Experts worldwide ranked by ideXlab platform

Gunter Saake - One of the best experts on this subject based on the ideXlab platform.

  • ICSE (Companion Volume) - FeatureIDE: taming the Preprocessor wilderness
    Proceedings of the 38th International Conference on Software Engineering Companion - ICSE '16, 2016
    Co-Authors: Jens Meinicke, Gunter Saake, Thomas Thüm, Reimar Schröter, Sebastian Krieter, Fabian Benduhn, Thomas Leich
    Abstract:

    Preprocessors are a common way to implement variability in software. They are used in numerous software systems, such as operating systems and databases. Due to the ability of Preprocessors to enable and disable code fragments, not all parts of the program are active at the same time. Thus, programmers and tools need to handle the interactions resulting from annotations in the program. With our Eclipse-based tool F eature IDE, we provide tool support to tackle multiple challenges with Preprocessors, such as code comprehension, feature traceability, separation of concerns, and program analysis. With F eature IDE, instead of focusing on one particular Preprocessor, we provide tool support, which can easily be adopted for further Preprocessors. Currently, we support development with CPP, A ntenna , and M unge . https://youtu.be/jVe7f32mLCQ

  • featureide taming the Preprocessor wilderness
    International Conference on Software Engineering, 2016
    Co-Authors: Jens Meinicke, Gunter Saake, Thomas Thüm, Reimar Schröter, Sebastian Krieter, Fabian Benduhn, Thomas Leich
    Abstract:

    Preprocessors are a common way to implement variability in software. They are used in numerous software systems, such as operating systems and databases. Due to the ability of Preprocessors to enable and disable code fragments, not all parts of the program are active at the same time. Thus, programmers and tools need to handle the interactions resulting from annotations in the program. With our Eclipse-based tool F eature IDE, we provide tool support to tackle multiple challenges with Preprocessors, such as code comprehension, feature traceability, separation of concerns, and program analysis. With F eature IDE, instead of focusing on one particular Preprocessor, we provide tool support, which can easily be adopted for further Preprocessors. Currently, we support development with CPP, A ntenna , and M unge . https://youtu.be/jVe7f32mLCQ

  • Do background colors improve program comprehension in the #ifdef hell?
    Empirical Software Engineering, 2013
    Co-Authors: Janet Feigenspan, Jörg Liebig, Thomas Leich, Michael Schulze, Maria Papendieck, Christian Kastner, Sven Apel, Raimund Dachselt, Gunter Saake
    Abstract:

    Software-product-line engineering aims at the development of variable and reusable software systems. In practice, software product lines are often implemented with Preprocessors. Preprocessor directives are easy to use, and many mature tools are available for practitioners. However, Preprocessor directives have been heavily criticized in academia and even referred to as “#ifdef hell”, because they introduce threats to program comprehension and correctness. There are many voices that suggest to use other implementation techniques instead, but these voices ignore the fact that a transition from Preprocessors to other languages and tools is tedious, erroneous, and expensive in practice. Instead, we and others propose to increase the readability of Preprocessor directives by using background colors to highlight source code annotated with ifdef directives . In three controlled experiments with over 70 subjects in total, we evaluate whether and how background colors improve program comprehension in Preprocessor-based implementations. Our results demonstrate that background colors have the potential to improve program comprehension, independently of size and programming language of the underlying product. Additionally, we found that subjects generally favor background colors. We integrate these and other findings in a tool called FeatureCommander, which facilitates program comprehension in practice and which can serve as a basis for further research.

  • SAFECOMP Workshops - Program comprehension in Preprocessor-based software
    Lecture Notes in Computer Science, 2012
    Co-Authors: Janet Siegmund, Jana Fruth, Sven Kuhlmann, Jana Dittmann, Norbert Siegmund, Gunter Saake
    Abstract:

    To adapt to heterogeneous hardware, software of embedded systems provides customization capacities. Typically, this customization is achieved using conditional compilation with Preprocessors. However, Preprocessor usage can lead to obfuscated source code that can be difficult to comprehend, which in turn cause increased maintenance costs, bugs, and security vulnerabilities. To profit from the benefit of Preprocessors usage, we need to improve their comprehensibility. In this paper, we describe how program comprehension can be improved and, to that end, measured. We show that reliably measuring program comprehension requires considerably effort. However, the benefit is that we can apply concepts that have proven to improve program comprehension, and thus can e.g. improve maintainability, reliability, and security of source code.

Norbert Manthey - One of the best experts on this subject based on the ideXlab platform.

  • INAP/WLP - Coprocessor – a Standalone SAT Preprocessor
    Lecture Notes in Computer Science, 2013
    Co-Authors: Norbert Manthey
    Abstract:

    In this work a stand-alone Preprocessor for SAT is presented that is able to perform most of the known preprocessing techniques. Preprocessing a formula in SAT is important for performance since redundancy can be removed. The Preprocessor is part of the SAT solver riss [9] and is called Coprocessor. Not only riss, but also MiniSat 2.2 [11] benefit from it, because the SatELite Preprocessor of MiniSat does not implement recent techniques. By using more advanced techniques, Coprocessor is able to reduce the redundancy in a formula further and improves the overall solving performance.

  • Coprocessor - a Standalone SAT Preprocessor
    arXiv: Artificial Intelligence, 2011
    Co-Authors: Norbert Manthey
    Abstract:

    In this work a stand-alone Preprocessor for SAT is presented that is able to perform most of the known preprocessing techniques. Preprocessing a formula in SAT is important for performance since redundancy can be removed. The Preprocessor is part of the SAT solver riss and is called Coprocessor. Not only riss, but also MiniSat 2.2 benefit from it, because the SatELite Preprocessor of MiniSat does not implement recent techniques. By using more advanced techniques, Coprocessor is able to reduce the redundancy in a formula further and improves the overall solving performance.

Christian Kastner - One of the best experts on this subject based on the ideXlab platform.

  • ECOOP - The Love/Hate Relationship with the C Preprocessor: An Interview Study
    2015
    Co-Authors: Flavio Medeiros, Christian Kastner, Marcio Ribeiro, Sarah Nadi, Rohit Gheyi
    Abstract:

    The C Preprocessor has received strong criticism in academia, among others regarding separation of concerns, error proneness, and code obfuscation, but is widely used in practice. Many (mostly academic) alternatives to the Preprocessor exist, but have not been adopted in practice. Since developers continue to use the Preprocessor despite all criticism and research, we ask how practitioners perceive the C Preprocessor. We performed interviews with 40 developers, used grounded theory to analyze the data, and cross-validated the results with data from a survey among 202 developers, repository mining, and results from previous studies. In particular, we investigated four research questions related to why the Preprocessor is still widely used in practice, common problems, alternatives, and the impact of undisciplined annotations. Our study shows that developers are aware of the criticism the C Preprocessor receives, but use it nonetheless, mainly for portability and variability. Many developers indicate that they regularly face Preprocessor-related problems and Preprocessor-related bugs. The majority of our interviewees do not see any current C-native technologies that can entirely replace the C Preprocessor. However, developers tend to mitigate problems with guidelines, even though those guidelines are not enforced consistently. We report the key insights gained from our study and discuss implications for practitioners and researchers on how to better use the C Preprocessor to minimize its negative impact.

  • the love hate relationship with the c Preprocessor an interview study
    DROPS-IDN 5235, 2015
    Co-Authors: Flavio Medeiros, Christian Kastner, Marcio Ribeiro, Sarah Nadi, Rohit Gheyi
    Abstract:

    The C Preprocessor has received strong criticism in academia, among others regarding separation of concerns, error proneness, and code obfuscation, but is widely used in practice. Many (mostly academic) alternatives to the Preprocessor exist, but have not been adopted in practice. Since developers continue to use the Preprocessor despite all criticism and research, we ask how practitioners perceive the C Preprocessor. We performed interviews with 40 developers, used grounded theory to analyze the data, and cross-validated the results with data from a survey among 202 developers, repository mining, and results from previous studies. In particular, we investigated four research questions related to why the Preprocessor is still widely used in practice, common problems, alternatives, and the impact of undisciplined annotations. Our study shows that developers are aware of the criticism the C Preprocessor receives, but use it nonetheless, mainly for portability and variability. Many developers indicate that they regularly face Preprocessor-related problems and Preprocessor-related bugs. The majority of our interviewees do not see any current C-native technologies that can entirely replace the C Preprocessor. However, developers tend to mitigate problems with guidelines, even though those guidelines are not enforced consistently. We report the key insights gained from our study and discuss implications for practitioners and researchers on how to better use the C Preprocessor to minimize its negative impact.

  • Do background colors improve program comprehension in the #ifdef hell?
    Empirical Software Engineering, 2013
    Co-Authors: Janet Feigenspan, Jörg Liebig, Thomas Leich, Michael Schulze, Maria Papendieck, Christian Kastner, Sven Apel, Raimund Dachselt, Gunter Saake
    Abstract:

    Software-product-line engineering aims at the development of variable and reusable software systems. In practice, software product lines are often implemented with Preprocessors. Preprocessor directives are easy to use, and many mature tools are available for practitioners. However, Preprocessor directives have been heavily criticized in academia and even referred to as “#ifdef hell”, because they introduce threats to program comprehension and correctness. There are many voices that suggest to use other implementation techniques instead, but these voices ignore the fact that a transition from Preprocessors to other languages and tools is tedious, erroneous, and expensive in practice. Instead, we and others propose to increase the readability of Preprocessor directives by using background colors to highlight source code annotated with ifdef directives . In three controlled experiments with over 70 subjects in total, we evaluate whether and how background colors improve program comprehension in Preprocessor-based implementations. Our results demonstrate that background colors have the potential to improve program comprehension, independently of size and programming language of the underlying product. Additionally, we found that subjects generally favor background colors. We integrate these and other findings in a tool called FeatureCommander, which facilitates program comprehension in practice and which can serve as a basis for further research.

  • an analysis of the variability in forty Preprocessor based software product lines
    International Conference on Software Engineering, 2010
    Co-Authors: Jörg Liebig, Christian Kastner, Sven Apel, Christian Lengauer, Michael Schulze
    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.

  • Virtual Separation of Concerns { A Second Chance for Preprocessors
    The Journal of Object Technology, 2009
    Co-Authors: Sven Apel, Christian Kastner
    Abstract:

    Conditional compilation with Preprocessors like cpp is a simple but eective means to implement variability. By annotating code fragments with #ifdef and #endif directives, dierent program variants with or without these fragments can be created, which can be used (among others) to implement software product lines. Although, Preprocessors are frequently used in practice, they are often criticized for their negative eect on code quality and maintainability. In contrast to modularized implementations, for example using components or aspects, Preprocessors neglect separation of concerns, are prone to introduce subtle errors, can entirely obfuscate the source code, and limit reuse. Our aim is to rehabilitate the Preprocessor by showing how simple tool support can address these problems and emulate some benets of modularized implementations. At the same time we emphasize unique benets of Preprocessors, like simplicity and language independence. Although we do not have a denitive answer on how to implement variability, we want highlight opportunities to improve Preprocessors and encourage research toward novel Preprocessor-based approaches.

Thomas Leich - One of the best experts on this subject based on the ideXlab platform.

  • featureide taming the Preprocessor wilderness
    International Conference on Software Engineering, 2016
    Co-Authors: Jens Meinicke, Gunter Saake, Thomas Thüm, Reimar Schröter, Sebastian Krieter, Fabian Benduhn, Thomas Leich
    Abstract:

    Preprocessors are a common way to implement variability in software. They are used in numerous software systems, such as operating systems and databases. Due to the ability of Preprocessors to enable and disable code fragments, not all parts of the program are active at the same time. Thus, programmers and tools need to handle the interactions resulting from annotations in the program. With our Eclipse-based tool F eature IDE, we provide tool support to tackle multiple challenges with Preprocessors, such as code comprehension, feature traceability, separation of concerns, and program analysis. With F eature IDE, instead of focusing on one particular Preprocessor, we provide tool support, which can easily be adopted for further Preprocessors. Currently, we support development with CPP, A ntenna , and M unge . https://youtu.be/jVe7f32mLCQ

  • ICSE (Companion Volume) - FeatureIDE: taming the Preprocessor wilderness
    Proceedings of the 38th International Conference on Software Engineering Companion - ICSE '16, 2016
    Co-Authors: Jens Meinicke, Gunter Saake, Thomas Thüm, Reimar Schröter, Sebastian Krieter, Fabian Benduhn, Thomas Leich
    Abstract:

    Preprocessors are a common way to implement variability in software. They are used in numerous software systems, such as operating systems and databases. Due to the ability of Preprocessors to enable and disable code fragments, not all parts of the program are active at the same time. Thus, programmers and tools need to handle the interactions resulting from annotations in the program. With our Eclipse-based tool F eature IDE, we provide tool support to tackle multiple challenges with Preprocessors, such as code comprehension, feature traceability, separation of concerns, and program analysis. With F eature IDE, instead of focusing on one particular Preprocessor, we provide tool support, which can easily be adopted for further Preprocessors. Currently, we support development with CPP, A ntenna , and M unge . https://youtu.be/jVe7f32mLCQ

  • Do background colors improve program comprehension in the #ifdef hell?
    Empirical Software Engineering, 2013
    Co-Authors: Janet Feigenspan, Jörg Liebig, Thomas Leich, Michael Schulze, Maria Papendieck, Christian Kastner, Sven Apel, Raimund Dachselt, Gunter Saake
    Abstract:

    Software-product-line engineering aims at the development of variable and reusable software systems. In practice, software product lines are often implemented with Preprocessors. Preprocessor directives are easy to use, and many mature tools are available for practitioners. However, Preprocessor directives have been heavily criticized in academia and even referred to as “#ifdef hell”, because they introduce threats to program comprehension and correctness. There are many voices that suggest to use other implementation techniques instead, but these voices ignore the fact that a transition from Preprocessors to other languages and tools is tedious, erroneous, and expensive in practice. Instead, we and others propose to increase the readability of Preprocessor directives by using background colors to highlight source code annotated with ifdef directives . In three controlled experiments with over 70 subjects in total, we evaluate whether and how background colors improve program comprehension in Preprocessor-based implementations. Our results demonstrate that background colors have the potential to improve program comprehension, independently of size and programming language of the underlying product. Additionally, we found that subjects generally favor background colors. We integrate these and other findings in a tool called FeatureCommander, which facilitates program comprehension in practice and which can serve as a basis for further research.

Sven Apel - One of the best experts on this subject based on the ideXlab platform.

  • Do background colors improve program comprehension in the #ifdef hell?
    Empirical Software Engineering, 2013
    Co-Authors: Janet Feigenspan, Jörg Liebig, Thomas Leich, Michael Schulze, Maria Papendieck, Christian Kastner, Sven Apel, Raimund Dachselt, Gunter Saake
    Abstract:

    Software-product-line engineering aims at the development of variable and reusable software systems. In practice, software product lines are often implemented with Preprocessors. Preprocessor directives are easy to use, and many mature tools are available for practitioners. However, Preprocessor directives have been heavily criticized in academia and even referred to as “#ifdef hell”, because they introduce threats to program comprehension and correctness. There are many voices that suggest to use other implementation techniques instead, but these voices ignore the fact that a transition from Preprocessors to other languages and tools is tedious, erroneous, and expensive in practice. Instead, we and others propose to increase the readability of Preprocessor directives by using background colors to highlight source code annotated with ifdef directives . In three controlled experiments with over 70 subjects in total, we evaluate whether and how background colors improve program comprehension in Preprocessor-based implementations. Our results demonstrate that background colors have the potential to improve program comprehension, independently of size and programming language of the underlying product. Additionally, we found that subjects generally favor background colors. We integrate these and other findings in a tool called FeatureCommander, which facilitates program comprehension in practice and which can serve as a basis for further research.

  • an analysis of the variability in forty Preprocessor based software product lines
    International Conference on Software Engineering, 2010
    Co-Authors: Jörg Liebig, Christian Kastner, Sven Apel, Christian Lengauer, Michael Schulze
    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.

  • Virtual Separation of Concerns { A Second Chance for Preprocessors
    The Journal of Object Technology, 2009
    Co-Authors: Sven Apel, Christian Kastner
    Abstract:

    Conditional compilation with Preprocessors like cpp is a simple but eective means to implement variability. By annotating code fragments with #ifdef and #endif directives, dierent program variants with or without these fragments can be created, which can be used (among others) to implement software product lines. Although, Preprocessors are frequently used in practice, they are often criticized for their negative eect on code quality and maintainability. In contrast to modularized implementations, for example using components or aspects, Preprocessors neglect separation of concerns, are prone to introduce subtle errors, can entirely obfuscate the source code, and limit reuse. Our aim is to rehabilitate the Preprocessor by showing how simple tool support can address these problems and emulate some benets of modularized implementations. At the same time we emphasize unique benets of Preprocessors, like simplicity and language independence. Although we do not have a denitive answer on how to implement variability, we want highlight opportunities to improve Preprocessors and encourage research toward novel Preprocessor-based approaches.

  • virtual separation of concerns a second chance for Preprocessors
    The Journal of Object Technology, 2009
    Co-Authors: Sven Apel, Christian Kastner
    Abstract:

    Conditional compilation with Preprocessors like cpp is a simple but eective means to implement variability. By annotating code fragments with #ifdef and #endif directives, dierent program variants with or without these fragments can be created, which can be used (among others) to implement software product lines. Although, Preprocessors are frequently used in practice, they are often criticized for their negative eect on code quality and maintainability. In contrast to modularized implementations, for example using components or aspects, Preprocessors neglect separation of concerns, are prone to introduce subtle errors, can entirely obfuscate the source code, and limit reuse. Our aim is to rehabilitate the Preprocessor by showing how simple tool support can address these problems and emulate some benets of modularized implementations. At the same time we emphasize unique benets of Preprocessors, like simplicity and language independence. Although we do not have a denitive answer on how to implement variability, we want highlight opportunities to improve Preprocessors and encourage research toward novel Preprocessor-based approaches.