The Experts below are selected from a list of 306 Experts worldwide ranked by ideXlab platform
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
2015Co-Authors: Flavio Medeiros, Christian Kastner, Marcio Ribeiro, Sarah Nadi, Rohit GheyiAbstract: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, 2015Co-Authors: Flavio Medeiros, Christian Kastner, Marcio Ribeiro, Sarah Nadi, Rohit GheyiAbstract: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, 2013Co-Authors: Janet Feigenspan, Jörg Liebig, Thomas Leich, Michael Schulze, Maria Papendieck, Christian Kastner, Sven Apel, Raimund Dachselt, Gunter SaakeAbstract: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.
-
Virtual Separation of Concerns { A Second Chance for Preprocessors
The Journal of Object Technology, 2009Co-Authors: Sven Apel, Christian KastnerAbstract: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, 2009Co-Authors: Sven Apel, Christian KastnerAbstract: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.
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, 2016Co-Authors: Jens Meinicke, Gunter Saake, Thomas Thüm, Reimar Schröter, Sebastian Krieter, Fabian Benduhn, Thomas LeichAbstract: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, 2013Co-Authors: Janet Feigenspan, Jörg Liebig, Thomas Leich, Michael Schulze, Maria Papendieck, Christian Kastner, Sven Apel, Raimund Dachselt, Gunter SaakeAbstract: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, 2012Co-Authors: Janet Siegmund, Jana Fruth, Sven Kuhlmann, Jana Dittmann, Norbert Siegmund, Gunter SaakeAbstract: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.
Philippe Tercier - One of the best experts on this subject based on the ideXlab platform.
-
Chapter 20 Review and intercomparison of operational methods for the determination of the mixing height
Developments in environmental science, 2007Co-Authors: Petra Seibert, Frank Beyrich, Sylvain Joffre, Sven-erik Gryning, Alix Rasmussen, Philippe TercierAbstract:Abstract The height of the atmospheric boundary layer (ABL) or the mixing height (MH) is a fundamental parameter characterising the structure of the lower troposphere. Two basic possibilities for the practical determination of the MH are its derivation from profile data (measurements or numerical model output) and its parameterisation using simple equations or models (which only need a few measured input values). Different methods suggested in the literature are reviewed in this paper. The most important methods have been tested on data sets from three different sites in Europe (Cabauw—NL, Payerne—CH, Melpitz—D). Parcel and Richardson number methods applied to radiosonde profiles and the analysis of sodar and wind profiler data have been investigated. Modules for MH determination implemented in five currently used meteorological Preprocessors for dispersion models have been tested, too. Parcel methods using a revised coefficient for the excess temperature and Richardson number methods using a surface excess temperature worked well under convective conditions. Under stable conditions, the inherent difficulties call for a combination of several methods (e.g., mast and sodar). All the tested parameterisation schemes showed deficiencies under certain conditions, thus requiring more flexible algorithms able to take into account changing and non-classical conditions. Recommendations are formulated regarding both the analysis of profile measurements and the use of parameterisations and simple models, and suggestions for the preprocessor development and for future research activities are presented.
-
review and intercomparison of operational methods for the determination of the mixing height
Atmospheric Environment, 2000Co-Authors: Petra Seibert, Frank Beyrich, Sylvain Joffre, Sven-erik Gryning, Alix Rasmussen, Philippe TercierAbstract:Abstract The height of the atmospheric boundary layer (ABL) or the mixing height (MH) is a fundamental parameter characterising the structure of the lower troposphere. Two basic possibilities for the practical determination of the MH are its derivation from profile data (measurements or numerical model output) and its parameterisation using simple equations or models (which only need a few measured input values). Different methods suggested in the literature are reviewed in this paper. The most important methods have been tested on data sets from three different sites in Europe (Cabauw – NL, Payerne – CH, Melpitz – D). Parcel and Richardson number methods applied to radiosonde profiles and the analysis of sodar and wind profiler data have been investigated. Modules for MH determination implemented in five currently used meteorological Preprocessors for dispersion models have been tested, too. Parcel methods using a revised coefficient for the excess temperature and Richardson number methods using a surface excess temperature worked well under convective conditions. Under stable conditions, the inherent difficulties call for a combination of several methods (e.g., mast and sodar). All the tested parameterisation schemes showed deficiencies under certain conditions, thus requiring more flexible algorithms able to take into account changing and non-classical conditions. Recommendations are formulated regarding both the analysis of profile measurements and the use of parameterisations and simple models, and suggestions for the preprocessor development and for future research activities are presented.
Nikolaos Tsantalis - One of the best experts on this subject based on the ideXlab platform.
-
migrating cascading style sheets to Preprocessors by introducing mixins
Automated Software Engineering, 2016Co-Authors: Davood Mazinanian, Nikolaos TsantalisAbstract:Cascading Style Sheets (CSS) is the standard language for styling web documents and is extensively used in the industry. However, CSS lacks constructs that would allow code reuse (e.g., functions). Consequently, maintaining CSS code is often a cumbersome and error-prone task. Preprocessors (e.g., Less and Sass) have been introduced to fill this gap, by extending CSS with the missing constructs. Despite the clear maintainability benefits coming from the use of Preprocessors, there is currently no support for migrating legacy CSS code to Preprocessors. In this paper, we propose a technique for automatically detecting duplicated style declarations in CSS code that can be migrated to preprocessor functions (i.e., mixins). Our technique can parameterize differences in the style values of duplicated declarations, and ensure that the migration will not change the presentation semantics of the web documents. The evaluation has shown that our technique is able to detect 98% of the mix-ins that professional developers introduced in websites and Style Sheet libraries, and can safely migrate real CSS code.
-
SANER - An Empirical Study on the Use of CSS Preprocessors
2016 IEEE 23rd International Conference on Software Analysis Evolution and Reengineering (SANER), 2016Co-Authors: Davood Mazinanian, Nikolaos TsantalisAbstract:Cascading Style Sheets (CSS) is the standard language for styling structured documents, such as HTML. However, CSS lacks most of the traditional programming constructs, including variables and functions, which enable code reuse and structured programming. Alternatively, CSS Preprocessors (e.g., LESS, SASS) have been introduced as superset languages to extend CSS by supporting those missing constructs. While these languages are being widely used by developers, we do not have sufficient knowledge about how developers take advantage of the features they provide. Gaining this knowledge is crucial for providing better tool support to the developer community by devising techniques for the automatic migration of existing CSS code to take advantage of CSS Preprocessor language features, designing refactoring recommendation systems for existing Preprocessor code, and giving insights to the Preprocessor language designers for improving language usability. In this paper, we have empirically investigated the CSS Preprocessor codebase of 150 websites regarding four preprocessor features, namely variables, nested selectors, mixins and extend constructs, and report the discovered usage patterns for each feature. We also discuss how the gained knowledge can be put into practice towards improving the development and maintenance of CSS preprocessor code.
-
an empirical study on the use of css Preprocessors
IEEE International Conference on Software Analysis Evolution and Reengineering, 2016Co-Authors: Davood Mazinanian, Nikolaos TsantalisAbstract:Cascading Style Sheets (CSS) is the standard language for styling structured documents, such as HTML. However, CSS lacks most of the traditional programming constructs, including variables and functions, which enable code reuse and structured programming. Alternatively, CSS Preprocessors (e.g., LESS, SASS) have been introduced as superset languages to extend CSS by supporting those missing constructs. While these languages are being widely used by developers, we do not have sufficient knowledge about how developers take advantage of the features they provide. Gaining this knowledge is crucial for providing better tool support to the developer community by devising techniques for the automatic migration of existing CSS code to take advantage of CSS Preprocessor language features, designing refactoring recommendation systems for existing Preprocessor code, and giving insights to the Preprocessor language designers for improving language usability. In this paper, we have empirically investigated the CSS Preprocessor codebase of 150 websites regarding four preprocessor features, namely variables, nested selectors, mixins and extend constructs, and report the discovered usage patterns for each feature. We also discuss how the gained knowledge can be put into practice towards improving the development and maintenance of CSS preprocessor code.
Lyndon N. Smith - One of the best experts on this subject based on the ideXlab platform.
-
Understanding unconventional Preprocessors in deep convolutional neural networks for face identification
SN Applied Sciences, 2019Co-Authors: Chollette C. Olisah, Lyndon N. SmithAbstract:Deep convolutional neural networks have achieved huge successes in application domains like object and face recognition. The performance gain is attributed to different facets of the network architecture such as: depth of the convolutional layers, activation function, pooling, batch normalization, forward and back propagation and many more. However, very little emphasis is made on the preprocessor’s module of the network. Therefore, in this paper, the network’s preprocessing module is varied across different preprocessing approaches while keeping constant other facets of the deep network architecture, to investigate the contribution preprocessing makes to the network. Commonly used Preprocessors are the data augmentation and normalization and are termed conventional Preprocessors. Others are termed the unconventional Preprocessors, they are: color space converters; grey-level resolution Preprocessors; full-based and plane-based image quantization, Gaussian blur, illumination normalization and insensitive feature Preprocessors. To achieve fixed network parameters, CNNs with transfer learning is employed. The aim is to transfer knowledge from the high-level feature vectors of the Inception-V3 network to offline preprocessed LFW target data; and features is trained using the SoftMax classifier for face identification. The experiments show that the discriminative capability of the deep networks can be improved by preprocessing RGB data with some of the unconventional Preprocessors before feeding it to the CNNs. However, for best performance, the right setup of preprocessed data with augmentation and/or normalization is required. Summarily, preprocessing data before it is fed to the deep network is found to increase the homogeneity of neighborhood pixels even at reduced bit depth which serves for better storage efficiency.
-
understanding unconventional Preprocessors in deep convolutional neural networks for face identification
arXiv: Computer Vision and Pattern Recognition, 2019Co-Authors: Chollette C. Olisah, Lyndon N. SmithAbstract:Deep networks have achieved huge successes in application domains like object and face recognition. The performance gain is attributed to different facets of the network architecture such as: depth of the convolutional layers, activation function, pooling, batch normalization, forward and back propagation and many more. However, very little emphasis is made on the Preprocessors. Therefore, in this paper, the network's preprocessing module is varied across different preprocessing approaches while keeping constant other facets of the network architecture, to investigate the contribution preprocessing makes to the network. Commonly used Preprocessors are the data augmentation and normalization and are termed conventional Preprocessors. Others are termed the unconventional Preprocessors, they are: color space converters; HSV, CIE L*a*b* and YCBCR, grey-level resolution Preprocessors; full-based and plane-based image quantization, illumination normalization and insensitive feature preprocessing using: histogram equalization (HE), local contrast normalization (LN) and complete face structural pattern (CFSP). To achieve fixed network parameters, CNNs with transfer learning is employed. Knowledge from the high-level feature vectors of the Inception-V3 network is transferred to offline preprocessed LFW target data; and features trained using the SoftMax classifier for face identification. The experiments show that the discriminative capability of the deep networks can be improved by preprocessing RGB data with HE, full-based and plane-based quantization, rgbGELog, and YCBCR, Preprocessors before feeding it to CNNs. However, for best performance, the right setup of preprocessed data with augmentation and/or normalization is required. The plane-based image quantization is found to increase the homogeneity of neighborhood pixels and utilizes reduced bit depth for better storage efficiency.