Software Configuration Engineering in Practice Interviews, Survey, and Systematic Literature Review

Modern software applications are adapted to different situations (e.g., memory limits, enabling/disabling features, database credentials) by changing the values of configuration options, without any source code modifications. According to several studies, this flexibility is expensive as configuration failures represent one of the most common types of software failures. They are also hard to debug and resolve as they require a lot of effort to detect which options are misconfigured among a large number of configuration options and values, while comprehension of the code also is hampered by sprinkling conditional checks of the values of configuration options. Although researchers have proposed various approaches to help debug or prevent configuration failures, especially from the end users’ perspective, this paper takes a step back to understand the process required by practitioners to engineer the run-time configuration options in their source code, the challenges they experience as well as best practices that they have or could adopt. By interviewing 14 software engineering experts, followed by a large survey on 229 Java software engineers, we identified 9 major activities related to configuration engineering, 22 challenges faced by developers, and 24 expert recommendations to improve software configuration quality. We complemented this study by a systematic literature review to enrich the experts’ recommendations, and to identify possible solutions discussed and evaluated by the research community for the developers’ problems and challenges. We find that developers face a variety of challenges for all nine configuration engineering activities, starting from the creation of options, which generally is not planned beforehand and increases the complexity of a software system, to the non-trivial comprehension and debugging of configurations, and ending with the risky maintenance of configuration options, since developers avoid touching and changing configuration options in a mature system. We also find that researchers thus far focus primarily on testing and debugging configuration failures, leaving a large range of opportunities for future work.

[1]  Axel Legay,et al.  A Complexity Tale: Web Configurators , 2016, 2016 IEEE/ACM 1st International Workshop on Variability and Complexity in Software Design (VACE).

[2]  Mona Attariyan,et al.  Using Causality to Diagnose Configuration Bugs , 2008, USENIX Annual Technical Conference.

[3]  Mithun Acharya,et al.  Configuration selection using code change impact analysis for regression testing , 2012, 2012 28th IEEE International Conference on Software Maintenance (ICSM).

[4]  Michael D. Ernst,et al.  Proactive detection of inadequate diagnostic messages for software configuration errors , 2015, ISSTA.

[5]  Sai Zhang ConfDiagnoser: An automated configuration error diagnosis tool for Java software , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[6]  Tingting Yu,et al.  An Empirical Study on Performance Bugs for Highly Configurable Software Systems , 2016, ESEM.

[7]  Mona Attariyan,et al.  Automating Configuration Troubleshooting with Dynamic Information Flow Analysis , 2010, OSDI.

[8]  Mona Attariyan,et al.  Automating Configuration Troubleshooting with ConfAid , 2011, login Usenix Mag..

[9]  Helen J. Wang,et al.  Strider: a black-box, state-based approach to change and configuration management and support , 2003, Sci. Comput. Program..

[10]  Lois A. Ritter,et al.  The survey questionnaire , 2007 .

[11]  Bram Adams,et al.  On Cross-Stack Configuration Errors , 2017, 2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE).

[12]  Gordon Rugg,et al.  The sorting techniques: a tutorial paper on card sorts, picture sorts and item sorts , 1997, Expert Syst. J. Knowl. Eng..

[13]  Mukund Raghavachari,et al.  The deployer's problem: configuring application servers for performance and reliability , 2003, 25th International Conference on Software Engineering, 2003. Proceedings..

[14]  Krzysztof Czarnecki,et al.  Generating range fixes for software configuration , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[15]  Jez Humble,et al.  Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation , 2010 .

[16]  Michael D. Ernst,et al.  Automated diagnosis of software configuration errors , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[17]  Long Jin,et al.  Hey, you have given me too many knobs!: understanding and dealing with over-designed configuration in system software , 2015, ESEC/SIGSOFT FSE.

[18]  Eric Bodden,et al.  Tracking Load-Time Configuration Options , 2014, IEEE Transactions on Software Engineering.

[19]  Hui Song,et al.  An Approach for Generation of J2EE Access Control Configurations from Requirements Specification , 2008, 2008 The Eighth International Conference on Quality Software.

[20]  Sven Apel,et al.  Performance-influence models for highly configurable systems , 2015, ESEC/SIGSOFT FSE.

[21]  Wei Chen,et al.  Detecting Inter-Component Configuration Errors in Proactive: A Relation-Aware Method , 2014, 2014 14th International Conference on Quality Software.

[22]  Mona Attariyan,et al.  X-ray: Automating Root-Cause Diagnosis of Performance Anomalies in Production Software , 2012, OSDI.

[23]  Yi-Min Wang,et al.  Discovering correctness constraints for self-management of system configuration , 2004, International Conference on Autonomic Computing, 2004. Proceedings..

[24]  Arnaud Gotlieb,et al.  TITAN: Test Suite Optimization for Highly Configurable Software , 2017, 2017 IEEE International Conference on Software Testing, Verification and Validation (ICST).

[25]  Shivnath Babu,et al.  Tuning Database Configuration Parameters with iTuned , 2009, Proc. VLDB Endow..

[26]  Gunter Saake,et al.  On essential configuration complexity: Measuring interactions in highly-configurable systems , 2016, 2016 31st IEEE/ACM International Conference on Automated Software Engineering (ASE).

[27]  Steven D. Gribble,et al.  Configuration Debugging as Search: Finding the Needle in the Haystack , 2004, OSDI.

[28]  David Lo,et al.  EFSPredictor: Predicting Configuration Bugs with Ensemble Feature Selection , 2015, 2015 Asia-Pacific Software Engineering Conference (APSEC).

[29]  Soudip Roy Chowdhury,et al.  Determining configuration parameter dependencies via analysis of configuration data from multi-tiered enterprise applications , 2009, ICAC '09.

[30]  Pearl Brereton,et al.  Performing systematic literature reviews in software engineering , 2006, ICSE.

[31]  Bo Wang,et al.  SmartFixer: fixing software configurations based on dynamic priorities , 2013, SPLC '13.

[32]  Yuanyuan Zhou,et al.  Do not blame users for misconfigurations , 2013, SOSP.

[33]  Adam A. Porter,et al.  iTree: Efficiently Discovering High-Coverage Configurations Using Interaction Trees , 2014, IEEE Transactions on Software Engineering.

[34]  Bowei Xi,et al.  A smart hill-climbing algorithm for application server configuration , 2004, WWW '04.

[35]  Rui Wang,et al.  Towards automatic reverse engineering of software security configurations , 2008, CCS.

[36]  Xiao Qu Configuration aware prioritization techniques in regression testing , 2009, 2009 31st International Conference on Software Engineering - Companion Volume.

[37]  Saurabh Bagchi,et al.  Characterizing configuration problems in Java EE application servers: An empirical study with GlassFish and JBoss , 2013, 2013 IEEE 24th International Symposium on Software Reliability Engineering (ISSRE).

[38]  Artur Andrzejak,et al.  Practical and accurate pinpointing of configuration errors using static analysis , 2015, 2015 IEEE International Conference on Software Maintenance and Evolution (ICSME).

[39]  Myra B. Cohen,et al.  Configuration-aware regression testing: an empirical study of sampling and prioritization , 2008, ISSTA '08.

[40]  Lorenzo Keller,et al.  ConfErr: A tool for assessing resilience to human configuration errors , 2008, 2008 IEEE International Conference on Dependable Systems and Networks With FTCS and DCC (DSN).

[41]  Tianyin Xu,et al.  Systems Approaches to Tackling Configuration Errors , 2015, ACM Comput. Surv..

[42]  Haifeng Chen,et al.  Boosting the performance of computing systems through adaptive configuration tuning , 2009, SAC '09.

[43]  Dan Grossman,et al.  Staccato: A Bug Finder for Dynamic Configuration Updates , 2016, ECOOP.

[44]  Xiao Ma,et al.  An empirical study on configuration errors in commercial and open source systems , 2011, SOSP.

[45]  Mona Attariyan,et al.  AutoBash: improving configuration management with operating system causality analysis , 2007, SOSP.

[46]  Bruce McMillin,et al.  Software engineering: What is it? , 2018, 2018 IEEE Aerospace Conference.

[47]  David Chenho Kung,et al.  Testing Configurable Component-Based Software - Configuration Test Modeling and Complexity Analysis , 2011, SEKE.

[48]  Wei Zheng,et al.  MassConf: automatic configuration tuning by leveraging user community information , 2011, ICPE '11.

[49]  Bram Adams,et al.  Multi-layer software configuration: Empirical study on wordpress , 2015, 2015 IEEE 15th International Working Conference on Source Code Analysis and Manipulation (SCAM).

[50]  Martin Szummer,et al.  Snitch: interactive decision trees for troubleshooting misconfigurations , 2007 .

[51]  Mathieu Acher,et al.  Reverse engineering web configurators , 2014, 2014 Software Evolution Week - IEEE Conference on Software Maintenance, Reengineering, and Reverse Engineering (CSMR-WCRE).

[52]  Georgios Gousios,et al.  The GHTorent dataset and tool suite , 2013, 2013 10th Working Conference on Mining Software Repositories (MSR).

[53]  Sarfraz Khurshid,et al.  SPLat: lightweight dynamic analysis for reducing combinatorics in testing configurable systems , 2013, ESEC/FSE 2013.

[54]  Mohamed F. Mokbel,et al.  SARD: A statistical approach for ranking database tuning parameters , 2008, 2008 IEEE 24th International Conference on Data Engineering Workshop.

[55]  Wei Chen,et al.  Determine Configuration Entry Correlations for Web Application Systems , 2016, 2016 IEEE 40th Annual Computer Software and Applications Conference (COMPSAC).

[56]  Victor S. Denisov Overview of Java application configuration frameworks , 2013 .

[57]  Adam A. Porter,et al.  iGen: dynamic interaction inference for configurable software , 2016, SIGSOFT FSE.

[58]  Randy H. Katz,et al.  Precomputing possible configuration error diagnoses , 2011, 2011 26th IEEE/ACM International Conference on Automated Software Engineering (ASE 2011).

[59]  Artur Andrzejak,et al.  Does the Choice of Configuration Framework Matter for Developers? Empirical Study on 11 Java Configuration Frameworks , 2017, 2017 IEEE 17th International Working Conference on Source Code Analysis and Manipulation (SCAM).

[60]  Adam A. Porter,et al.  Using symbolic evaluation to understand behavior in configurable software systems , 2010, 2010 ACM/IEEE 32nd International Conference on Software Engineering.

[61]  Mohammad Zulkernine,et al.  Confeagle: Automated Analysis of Configuration Vulnerabilities in Web Applications , 2013, 2013 IEEE 7th International Conference on Software Security and Reliability.

[62]  Sven Apel,et al.  Variability-aware performance prediction: A statistical learning approach , 2013, 2013 28th IEEE/ACM International Conference on Automated Software Engineering (ASE).

[63]  Krzysztof Czarnecki,et al.  Range Fixes: Interactive Error Resolution for Software Configuration , 2015, IEEE Transactions on Software Engineering.

[64]  Myra B. Cohen,et al.  Constructing Interaction Test Suites for Highly-Configurable Systems in the Presence of Constraints: A Greedy Approach , 2008, IEEE Transactions on Software Engineering.

[65]  Hiroshi Otsuka,et al.  Learning from Before and After Recovery to Detect Latent Misconfiguration , 2015, 2015 IEEE 39th Annual Computer Software and Applications Conference.

[66]  Marcelo d'Amorim,et al.  Balancing Soundness and Efficiency for Practical Testing of Configurable Systems , 2017, 2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE).

[67]  Junfeng Yang,et al.  Context-based Online Configuration-Error Detection , 2011, USENIX Annual Technical Conference.

[68]  Artur Andrzejak,et al.  Automated diagnosis of software misconfigurations based on static analysis , 2013, 2013 IEEE International Symposium on Software Reliability Engineering Workshops (ISSREW).

[69]  Periklis Andritsos,et al.  Constructing adaptive configuration dialogs using crowd data , 2014, ASE.

[70]  Gunter Saake,et al.  Predicting performance via automated feature-interaction detection , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[71]  Marcelo d'Amorim,et al.  Time-space efficient regression testing for configurable systems , 2017, J. Syst. Softw..

[72]  Woo Jin Lee,et al.  Developer Mistakes in Writing Android Manifests: An Empirical Study of Configuration Errors , 2017, 2017 IEEE/ACM 14th International Conference on Mining Software Repositories (MSR).

[73]  Shivnath Babu,et al.  Finding Good Configurations in High-Dimensional Spaces: Doing More with Less , 2008, 2008 IEEE International Symposium on Modeling, Analysis and Simulation of Computers and Telecommunication Systems.

[74]  Michael D. Ernst,et al.  Which configuration option should I change? , 2014, ICSE.

[75]  Myra B. Cohen,et al.  Configurations everywhere: implications for testing and debugging in practice , 2014, ICSE Companion.

[76]  Bestoun S. Ahmed,et al.  Achievement of minimized combinatorial test suite for configuration-aware software functional testing using the Cuckoo Search algorithm , 2015, Inf. Softw. Technol..

[77]  Xiaodong Liu,et al.  ConfMapper: Automated Variable Finding for Configuration Items in Source Code , 2016, 2016 IEEE International Conference on Software Quality, Reliability and Security Companion (QRS-C).

[78]  Tingting Yu,et al.  CoLUA: Automatically Predicting Configuration Bug Reports and Extracting Configuration Options , 2016, 2016 IEEE 27th International Symposium on Software Reliability Engineering (ISSRE).

[79]  Georgios Gousios,et al.  Tuning Java's memory manager for high performance server applications , 2006 .

[80]  Tianyin Xu,et al.  EnCore: exploiting system environment and correlation information for misconfiguration detection , 2014, ASPLOS.

[81]  Randy H. Katz,et al.  Static extraction of program configuration options , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[82]  David Lo,et al.  ORPLocator: Identifying Read Points of Configuration Options via Static Analysis , 2016, 2016 IEEE 27th International Symposium on Software Reliability Engineering (ISSRE).

[83]  Hanspeter Mössenböck,et al.  The taming of the shrew: increasing performance by automatic parameter tuning for java garbage collectors , 2014, ICPE.

[84]  Sheng Huang,et al.  Mining application repository to recommend XML configuration snippets , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[85]  Andrew M. Kuhn,et al.  Code Complete , 2005, Technometrics.

[86]  Takayuki Osogami,et al.  Finding probably better system configurations quickly , 2006, SIGMETRICS '06/Performance '06.

[87]  Yixin Diao,et al.  Managing Web server performance with AutoTune agents , 2003, IBM Syst. J..

[88]  Takayuki Osogami,et al.  Optimizing system configurations quickly by guessing at the performance , 2007, SIGMETRICS '07.

[89]  Krzysztof Czarnecki,et al.  Variability modeling in the real: a perspective from the operating systems domain , 2010, ASE '10.

[90]  Mithun Acharya,et al.  Impact Analysis of Configuration Changes for Test Case Selection , 2011, 2011 IEEE 22nd International Symposium on Software Reliability Engineering.

[91]  David Lo,et al.  Automated Configuration Bug Report Prediction Using Text Mining , 2014, 2014 IEEE 38th Annual Computer Software and Applications Conference.

[92]  Myra B. Cohen,et al.  Beyond the rainbow: self-adaptive failure avoidance in configurable systems , 2014, FSE 2014.

[93]  Myra B. Cohen,et al.  Using feature locality: can we leverage history to avoid failures during reconfiguration? , 2011, ASAS '11.

[94]  Sven Apel,et al.  Cost-Efficient Sampling for Performance Prediction of Configurable Systems (T) , 2015, 2015 30th IEEE/ACM International Conference on Automated Software Engineering (ASE).

[95]  Gail E. Kaiser,et al.  CONFU: Configuration Fuzzing Testing Framework for Software Vulnerability Detection , 2010, Int. J. Secur. Softw. Eng..

[96]  Myra B. Cohen,et al.  PrefFinder: getting the right preference in configurable software systems , 2014, ASE.

[97]  Sheng Huang,et al.  XMLSnippet: A Coding Assistant for XML Configuration Snippet Recommendation , 2012, 2012 IEEE 36th Annual Computer Software and Applications Conference.

[98]  Cor-Paul Bezemer,et al.  Optimizing the Performance-Related Configurations of Object-Relational Mapping Frameworks Using a Multi-Objective Genetic Algorithm , 2016, ICPE.

[99]  Nobuo Funabiki,et al.  Automatic Generation of Configuration Manuals for Open-Source Software , 2011, 2011 International Conference on Complex, Intelligent, and Software Intensive Systems.

[100]  Helen J. Wang,et al.  Automatic Misconfiguration Troubleshooting with PeerPressure , 2004, OSDI.

[101]  Myra B. Cohen,et al.  Users beware: preference inconsistencies ahead , 2015, ESEC/SIGSOFT FSE.

[102]  Myra B. Cohen,et al.  Incremental covering array failure characterization in large configuration spaces , 2009, ISSTA.

[103]  Mathieu Acher,et al.  Towards more reliable configurators: A re-engineering perspective , 2012, 2012 Third International Workshop on Product LinE Approaches in Software Engineering (PLEASE).

[104]  Lee J. White,et al.  Testing of User-Configurable Software Systems Using Firewalls , 2012, 2008 19th International Symposium on Software Reliability Engineering (ISSRE).

[105]  Li Wang,et al.  Automatic Type Inference for Proactive Misconfiguration Prevention , 2017, SEKE.