@article {Sayagh2020646, title = {Software Configuration Engineering in Practice Interviews, Survey, and Systematic Literature Review}, journal = {IEEE Transactions on Software Engineering}, volume = {46}, number = {6}, year = {2020}, note = {cited By 12}, pages = {646-673}, abstract = {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{\textquoteright} 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{\textquoteright} recommendations, and to identify possible solutions discussed and evaluated by the research community for the developers{\textquoteright} 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. {\textcopyright} 1976-2012 IEEE.}, keywords = {Application programs, Bibliographies, Codes (symbols), Errors, Facebook, Interviews, Program debugging, Software algorithms, Software systems, Surveys, Systematics}, doi = {10.1109/TSE.2018.2867847}, url = {https://www.scopus.com/inward/record.uri?eid=2-s2.0-85052624554\&doi=10.1109\%2fTSE.2018.2867847\&partnerID=40\&md5=f1b2d51b59522e24e5c52f064a62d00b}, author = {Sayagh, M. and Kerzazi, N. and Adams, B. and Petrillo, F.} } @article {Sayagh2018, title = {Software Configuration Engineering in Practice: Interviews, Survey, and Systematic Literature Review}, journal = {IEEE Transactions on Software Engineering}, year = {2018}, doi = {10.1109/TSE.2018.2867847}, url = {https://www.scopus.com/inward/record.uri?eid=2-s2.0-85052624554\&doi=10.1109\%2fTSE.2018.2867847\&partnerID=40\&md5=f1b2d51b59522e24e5c52f064a62d00b}, author = {Sayagh, M. and Kerzazi, N. and Adams, B. and Petrillo, F.} }