<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Software Configuration Diagnosis - A Survey of Existing Methods and Open Challenges</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Artur Andrzejak</string-name>
          <email>artur.andrzejak@informatik.uni-</email>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Gerhard Friedrich</string-name>
          <email>Gerhard.Friedrich@aau.at</email>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Franz Wotawa</string-name>
          <email>wotawa@ist.tugraz.at</email>
        </contrib>
      </contrib-group>
      <abstract>
        <p>As software systems become more complex and featurerich, configuration mechanisms are needed to adapt them to different execution environments and usage profiles. As a consequence, failures due to erroneous configuration settings are becoming more common, calling for effective mechanisms for diagnosis, repair, and prevention of such issues. In this paper, we survey approaches for diagnosing software configuration errors, methods for debugging these errors, and techniques for testing against such issues. In addition, we outline current challenges of isolating and fixing faults in configuration settings, including improving fault localization, handling the case of multi-stack systems, and configuration verification at runtime.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Tackling software configuration errors is recognized as an important
research problem which has been investigated by many groups from
academia and industry, e.g., see [
        <xref ref-type="bibr" rid="ref51">51</xref>
        ]. In a recent study [
        <xref ref-type="bibr" rid="ref52">52</xref>
        ], the
authors report empirical findings on the impact of configuration errors
in practice. In particular, a study of over 500 real-world
configuration issues revealed that this type of problems constituted the largest
percentage (31%) of high-severity support requests. Moreover, a
significant portion of these issues (16% to 47%) rendered systems fully
unavailable or caused severe performance degradation. Also other
studies [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ] and incident reports [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] confirm that detecting and
correcting configuration errors in software is of a great importance for
practical applications.
      </p>
      <p>
        In this paper, we focus on providing an overview of current
research in the area of software configuration diagnosis comprising
fault detection, fault localization, and correction. Besides discussing
research articles dealing with software configure errors, we further
discuss open issues and challenges that are worth being tackled in
future research activities. While the excellent survey [
        <xref ref-type="bibr" rid="ref51">51</xref>
        ] has a broader
scope and also includes aspects such as
configuration-free/easy-toconfigure systems, hardening against configuration errors,
automating deployment and monitoring etc., we consider in this paper
primarily diagnosis aspects. We also cover the most recent
state-ofthe-art work like diagnosing cross-stack configuration errors [
        <xref ref-type="bibr" rid="ref32">32</xref>
        ]. In
summary, this survey attempts to offer a compact and focused
introduction to this research area, thus serving as a good starting point for
further contributions.
      </p>
      <p>Although, there has been work also dealing with configurations
and configuration errors for systems comprising hardware and
software, we focus on methods and tools that have been developed within
the area of software configuration. Dealing with software
configuration only allows for extracting and straightforwardly using
information from programs, which would be hardly obtained when
considering hardware. As a consequence, there are many approaches that
work exclusively in the software configuration domain.
Nevertheless, there are also approaches that can be generalized to serve
diagnosis of system configuration as well. Especially, when it comes
to large software comprising million lines of source code and also to
cases where source code is not available, approaches have to follow
a more black-box oriented approach. This approach also enables
diagnosis in case of hardware or systems in general where hard- and
software is investigated.</p>
      <p>In more detail, given a program, its configuration parameters (or
settings), and an execution environment, a software configuration
error comes forward when the parameters assume incorrect values. The
configuration parameters might specify multiple aspects of system
behavior, including adaptation to execution environment (paths,
network settings, ..), functionality (enabled/disabled components,
logging, ...), performance and resource policies (cache sizes, number
of threads, ..), security settings, and others. Consequently, erroneous
configuration settings can cause failures of multiple types: complete
crashes, partially disabled functionality, performance issues,
inappropriate resource usage, or security threads. A frequent scenario of
a configuration error are parameter values which do not fit to the
specific execution environment. For example, we specified a path to a
working directory of the application but the user executing the
program do not have write access to this directory, causing the program
to crash (or at least to terminate with an exception).</p>
      <p>In the context of this survey, we consider the configuration error
diagnosis problem in its most general form: detecting the root causes,
i.e. isolating the configuration parameters with inappropriate values,
and providing means for repair in terms of identifying correct
values or value ranges for these parameters (or adapting the execution
environment). This definition implies that we do not target
diagnosis of ”traditional” software bugs, since we assume that a repair is
possible without code changes. Note that it might be difficult to
decide whether a failure should be attributed to a configuration problem
or a software bug, and this challenge remains one of the open issues
(see Section 3). For example, if a failure-triggering sequence of
statements in a faulty program is executed only because of a certain
parameter setting, the subsequent failure might appear to be caused by
a configuration error.</p>
      <p>We organize this paper as follows: We first discuss in Section 2
previous research works dealing with software configuration
diagnosis. In the following Section 3 we present open research challenges
that have not been tackled so far. We discuss threats to validity in
2
Sec. 4. Finally, we summarize the content and the findings of this
paper (Section 5).
2</p>
    </sec>
    <sec id="sec-2">
      <title>Previous Work on Software Configuration</title>
    </sec>
    <sec id="sec-3">
      <title>Diagnosis</title>
      <p>
        In this section, we discuss research work that has been published in
the area of software configuration diagnosis. We obtained the papers
searching relevant digital libraries from IEEE and ACM. We further
focussed on the most recent work in this area not older than 10 years.
Hence, we do not claim the survey to comprise all papers in the
context of software configuration errors (for a more comprehensive
collection see [
        <xref ref-type="bibr" rid="ref51">51</xref>
        ]). However, the presented papers are intended to give
an overview of the current research directions in software
configuration diagnosis and methods and techniques used for this purpose.
      </p>
      <p>In order to present the discussed papers in an accessible way, we
classify the paper accordingly to the following categories: (i)
diagnosing single-layer configuration errors, (ii) diagnosing cross-stack
configuration errors, (iii) diagnosing using configuration knowledge,
and (iv) other aspects of software configuration diagnosis.
Singlelayer configuration errors are errors found in one-component
applications like MySQL, Hive, or Spark. Typically, such
applications have one common configuration file/database and are
developed as an integral project. Cross-stack configuration errors occur in
multi-component applications or software stacks like LAMP (Linux,
Apache Web Server, MySQL, PHP, Wordpress/Drupal), J2EE, or
MEAN.</p>
      <p>
        The rational behind these categories is the following. Most
previous work is available for diagnosing single-layer configuration errors
and this case offers an opportunity for an overview of existing
diagnosis approaches. Diagnosis of cross-stack configuration errors pose
additional challenges. In some cases, the source code of stack
components might not be available, precluding usage of general program
analysis techniques. More frequently, cross-stack configuration
errors are frequently caused by a mismatch between the configuration
settings within separate components [
        <xref ref-type="bibr" rid="ref32 ref33">32, 33</xref>
        ]. To diagnose such
issues, knowledge about the interactions between the components is
needed.
      </p>
      <p>In case of the availability of formal knowledge about
configurations, i.e., configuration rules or constraints, diagnosis can be
performed using this knowledge. Such formal knowledge bases may be
applicable for single-layer or cross-stack applications.</p>
      <p>Finally, there are other aspects that cannot be assigned to one of
the former categories, for example testing configurable systems or
optimization of software based on configuration parameters.
2.1</p>
    </sec>
    <sec id="sec-4">
      <title>Diagnosing Single-Layer Configuration Errors</title>
      <p>Single-layer programs are typically written in a single programming
language and often the source code is available. Hence, static and
dynamic program analysis techniques can be applied to obtain a
mapping from configuration options to code regions. This information
can be exploited for localizing the root cause behind configuration
errors. Consequently, a lot of approaches for diagnosis configuration
errors in such programs have been proposed.</p>
      <p>
        Linking configuration options and code regions. Approaches in
this group attempt to find a correspondence between a configuration
option and code regions impacted by this option. Frequently, such
techniques exploit static [
        <xref ref-type="bibr" rid="ref43">43</xref>
        ] or dynamic program slicing [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. In
program slicing, one attempts to find the set of all code locations
which might influence a target statement (so-called seed), or all code
locations which might be influenced by a seed statement. Hence,
there approaches are mainly applicable in the software configuration
setting and may not be generalizable to deal with hardware
configuration diagnosis.
      </p>
      <p>
        ConfAnalyzer [
        <xref ref-type="bibr" rid="ref29">29</xref>
        ] builds a map from each program point to the
options that might cause an error at that point by static data-flow
analysis. For diagnosis, it treats a configuration option as the root
cause if its value flows into the crashing point. The approach does
not require from users to install or use additional tools, but it can use
logs and stack traces to reduce the rate of false positives.
      </p>
      <p>
        ConfDiagnoser [
        <xref ref-type="bibr" rid="ref56 ref57">57, 56</xref>
        ] uses static analysis, dynamic profiling,
and statistical analysis to link the undesired behavior that are
represented by predicates to configuration options. When these predicates
indicate behavior deviating from the one known for correct profiles,
ConfDiagnoser lists the relevant configuration options as suspects.
      </p>
      <p>
        Work [
        <xref ref-type="bibr" rid="ref58">58</xref>
        ] presents a technique and a tool to troubleshoot
configuration errors caused by software evolution. The approach uses
dynamic profiling, execution trace comparison, and static analysis to
link the undesired behavior to its root cause - a configuration option
which needs to be changed in the new software version.
      </p>
      <p>
        ConfDoctor [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] is an approach based on static analysis to
diagnose configuration defects. It does not require users to execute an
instrumented program or to reproduce errors, which is an essential
advantage compared to previous approaches. The only run-time
information required is the stack trace of a failure. An evaluation on
JChord, Randoop, Hadoop, and Hbase shows that the approach could
successfully diagnose 27 out of 29 errors, with 20 of them ranked
first.
      </p>
      <p>
        Authors of [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ] propose a lightweight dynamic analysis technique
that automatically discovers a program’s interactions, i.e., logical
formulae that give developers information about how a system’s
configuration option settings map to particular code coverage. It is
evaluated on 29 programs spanning five languages and could find precise
interactions based on a very small fraction of the number of possible
configurations.
      </p>
      <p>
        Data flow analysis. ConfAid [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] applies dynamic information flow
analysis techniques to track tokens from specified “configuration
sources” and analyze dependencies between the tokens and the
error symptoms, pinpointing which tokens are root causes.
      </p>
      <p>
        Sherlog [
        <xref ref-type="bibr" rid="ref53">53</xref>
        ] uses static analysis to infer control and data
information in case of a failure. It analyses source code by exploiting
information from run-time logs and computes what must or may have
happened during the failed run. One deficiency of this tool is that it
may require guidance from developers about which function should
be symbolically executed.
      </p>
      <p>
        Paper [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] introduces Lotrack, an extended static taint analysis
approach and tool to automatically track configuration options. It
derives a configuration map that explains for each code fragment under
which configurations it may be executed.
      </p>
      <p>Supervised learning approaches. Relatively few authors propose
to use machine learning approaches based on supervised learning
(i.e. mainly classification). This can be explained by the fact that it is
difficult to obtain or generate training data with appropriate structure
and in sufficient amount. Similarly to the challenges of mutation
testing, if training samples are generated, faults injected in the
configuration files might not trigger a failure or have unrealistic properties.
Also, since a configuration file might contain hundreds of options,
a training set is likely to containt only few faulty cases per option,
giving rise to the unbalanced class problem.</p>
      <p>
        Authors of [
        <xref ref-type="bibr" rid="ref41">41</xref>
        ] use machine learning to predict whether a
configuration error is responsible for a failure and if yes, what is the category
of the error. To obtain training data, faults are injected into
configuration files and the resulting error category is manually labeled.
      </p>
      <p>
        Work [
        <xref ref-type="bibr" rid="ref38">38</xref>
        ] exploits statistical decision tree analysis to determine
possible misconfigurations in data center environments. The authors
further improve the accuracy of this approach via a pattern
modification method.
      </p>
      <p>
        Replay-based techniques. One category of well-known tools [
        <xref ref-type="bibr" rid="ref20 ref37 ref44">44,
37, 20</xref>
        ] are the replay-based diagnosis techniques. They treat the
system as a black box to automatically run the system with possible
configurations values without damaging the rest of the system until
fixing the misconfiguration. This class of techniques relies on having
a working configuration. Otherwise, it can not be applied. Besides,
they require users with more domain knowledge.
      </p>
      <p>Signature-based approaches. Another family of tools mine a large
amount of configuration data from different instances to infer rules
about options and use these rules to identify software
misconfigurations.</p>
      <p>
        EnCore [
        <xref ref-type="bibr" rid="ref55">55</xref>
        ] and CODE [
        <xref ref-type="bibr" rid="ref54">54</xref>
        ] belong to this category of work.
EnCore takes into account the interaction between the configuration
settings and the executing environment, as well as the correlations
between configuration entries. It learns configuration rules from a given
set of sample configurations and pinpoints configuration anomalies
based on these rules.
      </p>
      <p>
        Analogously, some tools such as Strider [
        <xref ref-type="bibr" rid="ref42">42</xref>
        ] or PeerPressure [
        <xref ref-type="bibr" rid="ref40">40</xref>
        ]
adopt statistical techniques to compare values of configuration
options in a problematic system with those in other systems to infer the
root cause of a failure. All these techniques require substantial effort
to collect the baseline data.
2.2
      </p>
    </sec>
    <sec id="sec-5">
      <title>Diagnosing cross-stack configuration errors</title>
      <p>
        Configuration options in multi-layer architectures (e.g., LAMP,
J2EE, or MEAN “software stacks”) might easily contradict each
other or be hard to trace to each other. Therefore, configuration error
diagnosis in such architectures is particularly challenging [
        <xref ref-type="bibr" rid="ref51">51</xref>
        ]. On
the other hand, so far there are very few research approaches or tools
targeting this scenario [
        <xref ref-type="bibr" rid="ref33">33</xref>
        ].
      </p>
      <p>
        Sayagh and Adams [
        <xref ref-type="bibr" rid="ref32">32</xref>
        ] conducted an empirical study on
multilayer configuration options across Wordpress (WP) plugins, WP, and
the PHP engine. They discover a large and increasing number of
configuration options used by WP and its plugins. In addition, over 85%
of these options are used by at least two plugins at the same time.
3
      </p>
      <p>
        Sayagh et al. [
        <xref ref-type="bibr" rid="ref33">33</xref>
        ] perform a qualitative analysis of over 1,000
configuration errors to understand their impact and complexity. Based
on this data they develop a slicing-based approach to identify
errorinducing configuration options in heterogeneous software stacks. So
far it is the only approach which attempts to provide a complete,
endto-end process for diagnosing cross-stack configuration errors.
      </p>
      <p>
        Work [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] focuses on finding configuration inconsistencies between
layers in complex, multi-component software. The proposed
technique (based on static analysis) can handle software that is written
in multiple programming languages and has a complex preference
structure.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref31">31</xref>
        ] the authors target the identification of configuration
dependencies in multi-tiered enterprise applications. It provides a method
for analyzing existing deployments to infer the configuration
dependencies in a probabilistic sense. This yields rank-ordered list of
dependencies so that administrators can consult it and systematically
identify the true dependencies.
      </p>
      <p>
        Authors of [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] attempt to quantify the challenges that
configurability of complex, multi-component systems creates for software
testing and debugging. It analyzes a highly-configurable industrial
application and two open source applications. They notice that all
three applications consist of multiple programming languages,
limiting the applicability of static analysis. Furthermore, they find out
that there many access points and methods to modify configurations,
and that the configuration state of an application on failure cannot be
determined only from persistent data.
2.3
      </p>
    </sec>
    <sec id="sec-6">
      <title>Rules, Constraints and Fixing their Violations</title>
      <p>Once configuration knowledge can be described using constraints or
rules they can be used for diagnosis as well. The use of such
knowledge is neither restricted to single-layer nor cross-stack applications
in general. Hence, methods and techniques based on rules and
constraints, which can also be seen as models of the applications, would
provide a more general account to solve the software configuration
error problem. In this section, we distinguish methods for learning
knowledge, fixing violations, and inconsistency detection between
different software artifacts.</p>
      <p>
        Learning constraints and rules. Several existing approaches
extract configuration models [
        <xref ref-type="bibr" rid="ref40 ref42 ref50 ref54 ref55">42, 40, 54, 50, 55</xref>
        ] and leverage them for
configuration debugging, mainly via detecting value anomalies and
rule violations.
      </p>
      <p>
        The categories of extracted data constituting the models typically
include the primitive and semantic data types of configuration
options (e.g., integer, file path, port number, URL), the value ranges of
options (minimum and maximum integer values or a list of
acceptable values), the control dependencies (i.e., usage of parameter Q
relies on the setting of another parameter P ), and value relationships
(e.g., value of parameter S should be greater than that of parameter
T ). EnCore [
        <xref ref-type="bibr" rid="ref55">55</xref>
        ] additionally considers the properties of the
execution environment as a part of their models.
      </p>
      <p>
        CODE [
        <xref ref-type="bibr" rid="ref54">54</xref>
        ] takes a unique approach and uses dynamic execution
information as the model content, namely sequences of (Windows)
registry accesses and derived rules. Using these rules for efficient
filtering of even large lists of events, CODE can detect not only
configuration errors but also deviant program executions. It requires no
4
source code, application-specific semantics, or heavyweight program
analysis.
      </p>
      <p>
        SPEX [
        <xref ref-type="bibr" rid="ref50">50</xref>
        ] analyzes source code to infer configuration option
constraints and use these constraints to diagnose software
misconfigurations, to expose misconfiguration vulnerabilities, and to detect
errorprone configuration design and handling.
      </p>
      <p>Build-time configuration settings. Another category of work
addresses configurations and their constraints used at compilation and
build time. Such configurations determine whether certain product
features (e.g. logging, debugging) are activated, or even which
software components are included in the shipped product. The later
aspect is relevant e.g., for software product lines.</p>
      <p>
        Works [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ], [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] propose a static analysis approach to extract
(build-time) configuration constraints from C code. Despite of its
simplicity, it has high precision (77% - 93% in the studied systems)
and can recover 28% of existing constraints. A further study of the
authors reveals that configuration constraints enforce correct runtime
behavior, improve users’ configuration experience, and prevent
corner cases.
      </p>
      <p>
        Fixing violations of configuration constraints. The problem of
fixing a configuration that violates one or more constraints is
addressed in [
        <xref ref-type="bibr" rid="ref47 ref48">47, 48</xref>
        ]. The authors introduce to this purpose the concept
of a range fix, which specifies the options to change the ranges of
values for these options. They also design and evaluate an algorithm that
automatically generates range fixes for a violated constraint.
Empirical studies shows that the range fix approach provides mostly simple
yet complete sets of fixes and has a moderate running time in the
order of seconds.
      </p>
      <p>Configurable software (e.g., Linux OS, eCos) can have very high
number of options (variables) and constraints. E.g., Linux has over
6,000 variables and 10,000 constraints; eCos has over 1,000 variables
and 1,000 constraints. Such systems typically use variability
modeling languages and configuration tools (called configurators).
Examples of variability languages include Linux Kconfig, eCos CDL, and
feature models. With variability modeling languages and
configurators, errors can be detected early, but users still have to resolve the
errors, which is also not an easy task: the constraints in variability
models can be very complex and highly interconnected. Therefore,
researchers have proposed automated approaches that suggest a list
of fixes for an error. A fix is a set of changes that, when performed
on the configuration, resolve the current error. However, the
recommended fixes in these approaches are sometimes large in number and
size. For example, fix lists for eCos configurations contain up to nine
fixes, and some fixes change up to nine variables.</p>
      <p>
        In this context, work [
        <xref ref-type="bibr" rid="ref39">39</xref>
        ] proposes a method to reduce the size
and complexity of error fixes by introducing a concept of dynamic
priorities. The basic idea is to first generate one fix and then to
gradually reach the desirable state based on user feedback. To this end,
the approach (1) automatically translates user feedback into a set of
implicit priority levels on variables, using five priority assignment
and adjustment strategies and (2) efficiently identifies potentially
desirable fixes that change only the variables with low priorities.
Detecting inconsistencies between code, documentation, and
configuration files. Configuration options are widely used for
customizing the behavior and initial settings of software applications,
server processes, and operating systems. Their distinctive property
is that each option is processed, defined, and described in different
parts of a software project - namely in code, in configuration file, and
in documentation. This creates a challenge for maintaining project
consistency as it evolves. It also promotes inconsistencies leading to
misconfiguration issues in production scenarios.
      </p>
      <p>
        Confalyzer [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ] uses static analysis to extract a list of
configuration option from source code and from associated options
documentation. Confalyzer first marks configuration APIs in the
configuration classes. Then it identifies calls to these APIs in the program by
building a call graph and obtains option names by reading values of
parameters of these calls.
      </p>
      <p>
        PrefFinder [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] proposed by Jin et al., uses static analysis and
dynamic analysis techniques to extract configuration options and stores
them in a database for query and use.
      </p>
      <p>
        The SCIC approach [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] exploits Confalyzer to implement the
functionality of extracting configuration options in the key-value model
and the tree-structured model.
      </p>
      <p>
        Work [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] proposes an approach for detection of inconsistencies
between source code and documentation based on static analysis.
It identifies source code locations where options are read and for
each such location retrieves the name of the option. Inconsistencies
are then detected by comparing the results against the option names
listed in documentation.
2.4
      </p>
    </sec>
    <sec id="sec-7">
      <title>Other Aspects</title>
      <p>There are other papers dealing with diagnosis of software
configuration errors not falling into the previous categories like testing,
enduser support and performance optimization, which we discuss in this
subsection.</p>
      <p>
        Testing of highly configurable systems. Paper [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] presents an
initial study on the potential of using statistical testing techniques for
improving the efficiency of test selection for configurable software.
The study aims to answer whether statistical testing can reduce the
effort of localizing the most critical software faults, seen from user
perspective.
      </p>
      <p>
        Authors of [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] analyze program traces to characterize and
identify where interactions occur on control flow and data. They find that
the essential configuration complexity of these programs is indeed
much lower than the combinatorial explosion of the configuration
space indicates.
      </p>
      <p>
        Work [
        <xref ref-type="bibr" rid="ref36">36</xref>
        ] proposes S-SPLat, a technique that combines heuristic
sampling with symbolic search to explore enormous space of
configurations for testing of software product lines.
      </p>
      <p>
        A more general approach for testing configurable systems
including software is combinatorial testing [
        <xref ref-type="bibr" rid="ref15 ref16">15, 16</xref>
        ]. There the underlying
assumption is that it is not necessarily one configuration parameter
that reveals a fault but a certain combination of parameters.
Combinatorial testing assures to compute all combinations for any arbitrary
subset of configuration parameters of arity k. In the context of
combinatorial testing, the resulting test suite is said being of strength k.
There are many algorithms and tools for combinatorial testing [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
For a survey on combinatorial testing we refer the interested user
to [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ].
      </p>
      <p>
        Configuration and debugging support for end-users. A
technique to detect inadequate (i.e., missing or ambiguous) diagnostic
messages for configuration errors issued by a configurable software
system is proposed in [
        <xref ref-type="bibr" rid="ref59">59</xref>
        ]. It injects configuration errors and uses
natural language processing to analyze the resulting diagnostic
messages. It then identifies messages which might be unhelpful in
diagnosis or even negatively impact this process.
      </p>
      <p>
        Authors of [
        <xref ref-type="bibr" rid="ref49">49</xref>
        ] study configuration settings of real-world users
from multiple projects and reveal patterns of unnecessary
complexity in configuration design. The authors also provide a few guidelines
to reduce the configuration space. Finally, the existing configuration
navigation methods are studied in terms of their effectiveness in
dealing with the over-designed configuration.
      </p>
      <p>
        Work [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ] introduces ConfSeer, a system which recommends to
users suitable knowledge base articles which are likely to describe
user’s current configuration problem and its fix. To this end,
ConfSeer takes the snapshots of configuration files from a user machine
as input, then extracts the configuration parameter names and value
settings from the snapshots and matches them against a large set of
KB articles. If a match is found, ConfSeer pinpoints the configuration
error with its matching KB article. The described system powers the
recommendation engine behind Microsoft Operations Management
Suite.
      </p>
      <p>
        Optimizing performance via configuration settings. In [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ], a
rank-based approach to efficient creation of performance models is
introduced. Such models can be exploited for finding an optimally
performing configuration of a software system.
      </p>
      <p>
        Authors of [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] conducted an empirical study on four popular
software systems by varying software configurations and environmental
conditions, to identify the key knowledge pieces that can be exploited
for transfer learning for constructing performance models of
configurable software systems.
      </p>
      <p>
        Paper [
        <xref ref-type="bibr" rid="ref35">35</xref>
        ] proposes a multi-objective evolutionary algorithm to
find the optimal solutions and addresses the configuration
optimization problem for software product lines.
      </p>
      <p>
        Finally, the work described in [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ] employs random sampling and
recursive search in a configuration space to find optimally performing
configurations for an anticipated workload in software product lines.
2.5
      </p>
    </sec>
    <sec id="sec-8">
      <title>Survey Summary</title>
      <p>
        There are lots of papers dealing with configuration diagnosis of
single layer applications often employing program analysis techniques
but also making use of machine learning or replay methods. In case
of more complicated applications comprising interacting and
configurable software components there have been less papers dealing
with concrete solutions. One approach that can be used in both cases
of software is to make use of formalized knowledge about
configurations, i.e., the configuration parameters, their domains, and rules
specifying limitations and relationships among parameters. It would
be interesting to investigate whether classical approaches to
diagnosis of knowledge-bases like [
        <xref ref-type="bibr" rid="ref34 ref45 ref8 ref9">8, 45, 9, 34</xref>
        ] can also be successfully
applied for configuration diagnosis. Other aspects, discussed in this
section include testing configurations, end-user support, and
performance optimization.
      </p>
    </sec>
    <sec id="sec-9">
      <title>Challenges in Configuration Diagnosis</title>
      <p>Based on the survey of papers presented in the previous section, we
are able to identify several still open challenges. A general challenge
that immediately arises is to distinguish whether an application
failure is due to a fault in the configuration setup or code defect in the
program. This is a common problem when applying configuration
debugging tools, which usually assumes a certain cause. If we want
to come up with a general approach for software configuration
diagnosis, we have to adapt diagnosis to identify the underlying root
cause.</p>
      <p>A method that is able to separate these causes would take the
current configuration, the program, the description of the execution
environment, and the passing/failing tests as input. Based on these
inputs the possible causes of a failure are provided as output. In order to
come up with such an approach, it is necessary to have a close look at
various configuration diagnosis problems, given consequently raise
to the another challenge, i.e., providing an open repository of various
configuration diagnosis problems that can be accessed by researchers
in this field.</p>
      <p>Such a general repository for software configuration diagnosis
should include a larger set of different programs from single-layer
to cross-stack applications together with configuration errors
coming from different sources, test suites, and ideally also configuration
knowledge bases. The repository should cover programs of different
sizes and from different domains capturing currently available
software to allow comparing different configuration diagnosis methods
and techniques.</p>
      <p>Besides these two general challenges, there are other challenges
that are more specific to the applications (single-layer versus
crossstack) or the tasks to be tackled (i.e., fault localization and repair
versus fault detection). In the following, we illustrate some of these
more specific challenges in detail.</p>
      <sec id="sec-9-1">
        <title>Diagnosis of single-layer applications Despite the fact that there</title>
        <p>have been various methods already published in this domain, there
are still some open issues.</p>
        <p>
          Transfer techniques from functional fault localization: In case of
software debugging, there are various methods available going
beyond program analysis including spectrum-based fault
localization [
          <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
          ] among others. In this approach, code regions are ranked
(essentially) according to the number of times there are executed
by passing or by failing tests (intuition: if a code line is executed
primarily by failing tests, it is more likely to contribute to a
failure). For a detailed look at current debugging techniques we
refer the interested reader to Wong et al.’s survey [
          <xref ref-type="bibr" rid="ref46">46</xref>
          ]. In
particular spectrum-based fault localization offers superior performance
compared to static and dynamic program analysis applied to
debugging. The open research question that is, whether
spectrumbased fault localization can be efficiently used for software
configuration diagnosis as well.
        </p>
        <p>Study and exploit the trade-off between the type of data from users
required for diagnosis (as well as the effort of obtaining this data,
e.g., via instrumentation) and the achieved accuracy. The research
goals that would go into this direction include:
– For each type of diagnosis data (from static analysis to
diagnosis data dynamically created from instrumentation and also
for combinations) understand and quantify the degree of likely
penalties (e.g., in terms of accuracy) of using only this data for
diagnosis. Specifically, characterize error types which can be
or cannot be diagnosed for each type of diagnosis data (when
using state-of-the art debugging approaches).
– For each “class” of diagnosis data, attempt to improve the
corresponding state-of-the art diagnosis methods in terms of types
of errors they are able to debug. This can be done e.g., by an
in-depth analysis why they fail for some error types and by
providing substrates/replacements for the missing diagnosis data.</p>
      </sec>
      <sec id="sec-9-2">
        <title>Diagnosing of cross-stack configuration errors In the case of</title>
        <p>cross-stack applications, there is not so much work available.
Important open research challenges include:</p>
        <p>Exploit work on consistency checking to detect potential
inconsistencies between different stack layers.</p>
        <p>Leverage existing work on extraction of rules and constraints to
model dependencies between layers. Then use the techniques for
discovery and fixing of constraint violations to diagnose (and
possibly repair) cross-stack configuration errors.</p>
        <p>As a further application of extracted rules, configurator-like tools
(as used for configuring operating systems) could be used for safe
configuration of cross-stack systems.</p>
        <p>Create models of expected behavior (given a current global
configuration) of each layer from the perspective of each layer.
Divergences in the behavior might indicate potential configuration
inconsistencies or errors. For example, given the current
configuration of a database-layer (specifying n1 database connections),
also the PHP-layer should allow n1 database connections.
However, if the expected behavior of PHP-layer, based on its own
configuration, allows only n2 &lt; n1 database-connections, then an
inconsistency between these two behavioral models is indicated.</p>
        <p>
          It is worth noting that it is quite important which dependencies
or interaction between layers can be observed or recorded.
Moreover, in the context of these challenges the application of
modelbased approaches for diagnosing (configuration) knowledge-base,
e.g., [
          <xref ref-type="bibr" rid="ref34 ref45 ref8 ref9">8, 45, 9, 34</xref>
          ], might be worth being considered.
        </p>
        <p>Testing-related challenges and goals In case of testing, we are
interested in detecting faults caused by configuration settings. There
the motivation is to improve testing approaches specifically for
detecting faults in system configurations ideally during software
development. To clarify the meaning of “software testing” in context of
configuration (errors) we should consider that an application failure
in this context does not necessarily imply that there is a defect in
code (as in traditional testing). Such a failure rather indicates that:
There is a mismatch between the state of the application
environment (operating system, file system, hardware, location of input
data, libraries, network properties, remote components, etc.) and
the configuration settings. This implies that a test for this type of
error must take into consideration the environment.</p>
        <p>There is an inconsistency between configuration values, either
within a single layer or between layers in a multi-layer
application. The corresponding tests might be independent of the
application environment, but are probably more comprehensive if this
is also taken into account.</p>
        <p>Consequently, this discussion gives rise to the following goals:
Attempt automated test generation that considers the state of the
application environment and the configuration settings (maybe
implicitly). Such tests would adapt to environment changes and
target only the above-mentioned mismatch between environment
and configuration. In order to avoid confusion with the meaning of
traditional testing, we might call this “configuration verification”
step instead of testing.</p>
        <p>Generate tests that verify only the consistency of configurations
between layers of a multi-stack system. In this case a test failure
should indicate only an inconsistency, not a lack of adaptation to
the production environment. For example, a test could only verify
the consistency of configurations across layers, not execute the
whole application.</p>
        <p>Generate tests which verify the correctness of application’s
behavior independently of the configuration settings. For example,
an application should produce the same behavior independently
of the exact path to input/output/libraries, number of used threads
(in some range), used compiler (or its flags) etc.</p>
        <p>
          Generate tests that improve the outcome of fault localization.
There it would be necessary to identify those tests that can
distinguish different computed root causes (see e.g., [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]).
4
        </p>
      </sec>
    </sec>
    <sec id="sec-10">
      <title>Threats to Validity</title>
      <p>
        Several threats to validity of this paper exist. The main one is the risk
of omitting important contributions to this field. To mitigate this risk,
we have created lists of relevant works using several processes
described below. We then merged and pruned the results according to
the rank of the publishing venue and originality (i.e. works proposing
a novel or distinctive approach were included even if published in a
workshop). In the first literature collection process, we searched for
publications containing the word ”configuration” that were published
in selected high-quality venues (ICSE, ASE, ISSTA, FSE, ISSRE,
ICSME, ICPC, IEEE Trans. Software Eng., and some others) in the
last five years; for each found publication, we verified via abstract
whether a publication indeed targets configuration error (diagnosis).
In the second process, we read the related work sections of the
previously identified works, and created a list of papers discussed there,
which are of relevance (here, also less prestigious venues were
considered). Finally, we screened the survey [
        <xref ref-type="bibr" rid="ref51">51</xref>
        ] for checking that no
important contribution was omitted.
      </p>
      <p>Another threat to validity is the possibility to misinterpret any of
the discussed papers (e.g. due to different understanding of terms),
and state here inaccurate claims. To reduce this risk, we have studied
each described contribution in a depth sufficient to avoid a
misinterpretation. Besides of this, information from related work section to
verify our interpretation was used where available.
5</p>
    </sec>
    <sec id="sec-11">
      <title>Conclusion</title>
      <p>In this paper, we presented a survey on methods and techniques used
for detecting, localizing, and correcting faults in the context of
software configurations. We distinguished the different cases of software
configuration diagnosis for single-layer and cross-stack applications
as well as methods used in case of available configuration knowledge
and further aspects. From the survey we were able to identify some
still open challenges and research questions including
distinguishing different variants of potential root causes, the lack of repositories
of application-cases for validating and comparing research results as
well as the need for new fault localization and testing methods.</p>
      <p>The motivation for this paper is to provide a solid basis for
future research in this area and to identify some important challenges
in software configuration diagnosis worth being tackled. We also
indicated some relationships with work on diagnosis of configuration
knowledge bases and other approaches of software debugging that
might stimulate this field. Because of the growing interest in
providing programs comprising a stack of other programs that themselves
can be configured, we see a growing need for research in this area.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Rui</given-names>
            <surname>Abreu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Peter</given-names>
            <surname>Zoeteweij</surname>
          </string-name>
          , Rob Golsteijn, and
          <string-name>
            <surname>Arjan J. C. van Gemund</surname>
          </string-name>
          ,
          <article-title>'A practical evaluation of spectrum-based fault localization'</article-title>
          ,
          <source>Journal of Systems and Software</source>
          ,
          <volume>82</volume>
          (
          <issue>11</issue>
          ),
          <fpage>1780</fpage>
          -
          <lpage>1792</lpage>
          , (
          <year>2009</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>Rui</given-names>
            <surname>Abreu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Peter</given-names>
            <surname>Zoeteweij</surname>
          </string-name>
          , and
          <string-name>
            <surname>Arjan J. C. van Gemund</surname>
          </string-name>
          , '
          <article-title>Spectrumbased multiple fault localization'</article-title>
          ,
          <source>in ASE</source>
          <year>2009</year>
          , 24th IEEE/ACM International Conference on Automated Software Engineering, Auckland, New Zealand,
          <source>November 16-20</source>
          ,
          <year>2009</year>
          , pp.
          <fpage>88</fpage>
          -
          <lpage>99</lpage>
          . IEEE Computer Society, (
          <year>2009</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>Mona</given-names>
            <surname>Attariyan</surname>
          </string-name>
          and Jason Flinn, '
          <article-title>Automating Configuration Troubleshooting with Dynamic Information Flow Analysis'</article-title>
          ,
          <source>in 9th USENIX Conference on Operating Systems Design and Implementation</source>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>11</lpage>
          , Vancouver, BC, Canada, (
          <year>2010</year>
          ). USENIX Association.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>Farnaz</given-names>
            <surname>Behrang</surname>
          </string-name>
          ,
          <string-name>
            <surname>Myra</surname>
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Cohen</surname>
          </string-name>
          , and Alessandro Orso, 'Users Beware:
          <article-title>Preference Inconsistencies Ahead'</article-title>
          ,
          <source>in 2015 10th Joint Meeting on Foundations of Software Engineering</source>
          , ESEC/FSE 2015, pp.
          <fpage>295</fpage>
          -
          <lpage>306</lpage>
          , New York, NY, USA, (
          <year>2015</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Jon</given-names>
            <surname>Brodkin</surname>
          </string-name>
          .
          <article-title>Why Gmail Went Down: Google Misconfigured Load Balancing Servers</article-title>
          . https://goo.gl/Hdga7H. Accessed: 5 June 2018.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Dong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Andrzejak</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Lo</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Costa</surname>
          </string-name>
          , '
          <article-title>ORPLocator: Identifying Read Points of Configuration Options via Static Analysis'</article-title>
          ,
          <source>in 2016 IEEE 27th International Symposium on Software Reliability Engineering (ISSRE)</source>
          , pp.
          <fpage>185</fpage>
          -
          <lpage>195</lpage>
          , (
          <year>October 2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Dong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Andrzejak</surname>
          </string-name>
          , and
          <string-name>
            <given-names>K.</given-names>
            <surname>Shao</surname>
          </string-name>
          , '
          <article-title>Practical and accurate pinpointing of configuration errors using static analysis'</article-title>
          ,
          <source>in 2015 IEEE International Conference on Software Maintenance and Evolution (ICSME)</source>
          , pp.
          <fpage>171</fpage>
          -
          <lpage>180</lpage>
          , (
          <year>September 2015</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>A</given-names>
            <surname>Felfernig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G</given-names>
            <surname>Friedrich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D</given-names>
            <surname>Jannach</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M</given-names>
            <surname>Stumptner</surname>
          </string-name>
          , '
          <article-title>Consistencybased diagnosis of configuration knowledge bases'</article-title>
          ,
          <source>Artificial Intelligence</source>
          ,
          <volume>152</volume>
          (
          <issue>2</issue>
          ),
          <fpage>213</fpage>
          -
          <lpage>234</lpage>
          , (
          <year>2004</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A.</given-names>
            <surname>Felfernig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Schubert</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Zehentner</surname>
          </string-name>
          , '
          <article-title>An efficient diagnosis algorithm for inconsistent constraint sets'</article-title>
          ,
          <source>Artificial Intelligence for Engineering Design, Analysis and Manufacturing</source>
          ,
          <volume>26</volume>
          (
          <issue>1</issue>
          ),
          <fpage>53</fpage>
          -
          <lpage>62</lpage>
          , (2
          <year>2012</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Pooyan</surname>
            <given-names>Jamshidi</given-names>
          </string-name>
          , Norbert Siegmund, Miguel Velez, Christian Ka¨stner, Akshay Patel, and Yuvraj Agarwal, '
          <article-title>Transfer Learning for Performance Modeling of Configurable Systems: An Exploratory Analysis'</article-title>
          ,
          <source>in 32Nd IEEE/ACM International Conference on Automated Software Engineering, ASE</source>
          <year>2017</year>
          , pp.
          <fpage>497</fpage>
          -
          <lpage>508</lpage>
          , Piscataway, NJ, USA, (
          <year>2017</year>
          ). IEEE Press.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Dongpu</surname>
            <given-names>Jin</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Myra</surname>
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Cohen</surname>
          </string-name>
          , Xiao Qu, and Brian Robinson, '
          <article-title>PrefFinder: Getting the Right Preference in Configurable Software Systems'</article-title>
          ,
          <source>in 29th ACM/IEEE International Conference on Automated Software Engineering, ASE '14</source>
          , pp.
          <fpage>151</fpage>
          -
          <lpage>162</lpage>
          , New York, NY, USA, (
          <year>2014</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Dongpu</surname>
            <given-names>Jin</given-names>
          </string-name>
          , Xiao Qu,
          <string-name>
            <surname>Myra</surname>
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Cohen</surname>
          </string-name>
          , and Brian Robinson, 'Configurations Everywhere:
          <article-title>Implications for Testing and Debugging in Practice'</article-title>
          ,
          <source>in Companion Proceedings of the 36th International Conference on Software Engineering, ICSE Companion</source>
          <year>2014</year>
          , pp.
          <fpage>215</fpage>
          -
          <lpage>224</lpage>
          , New York, NY, USA, (
          <year>2014</year>
          ).
          <source>ACM. 7</source>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <article-title>Sunint Kaur Khalsa and Yvan Labiche, 'An orchestrated survey of available algorithms and tools for combinatorial testing'</article-title>
          ,
          <source>in 25th International Symposium on Software Reliability Engineering</source>
          , pp.
          <fpage>323</fpage>
          -
          <lpage>334</lpage>
          , (
          <year>2015</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>Bogdan</given-names>
            <surname>Korel</surname>
          </string-name>
          and Janusz Laski, 'Dynamic Program Slicing',
          <source>Information Processing Letters</source>
          ,
          <volume>29</volume>
          ,
          <fpage>155</fpage>
          -
          <lpage>163</lpage>
          , (
          <year>1988</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>D. R.</given-names>
            <surname>Kuhn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R. N.</given-names>
            <surname>Kacker</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Y.</given-names>
            <surname>Lei</surname>
          </string-name>
          , '
          <article-title>Combinatorial testing'</article-title>
          , in Encyclopedia of Software Engineering, ed.,
          <string-name>
            <surname>Phillip</surname>
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Laplante</surname>
          </string-name>
          , Taylor &amp; Francis, (
          <year>2012</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>D.</given-names>
            <surname>Richard</surname>
          </string-name>
          <string-name>
            <surname>Kuhn</surname>
          </string-name>
          , Renee Bryce, Feng Duan,
          <string-name>
            <given-names>Laleh</given-names>
            <surname>Sh</surname>
          </string-name>
          .
          <string-name>
            <surname>Ghandehari</surname>
            ,
            <given-names>Yu</given-names>
          </string-name>
          <string-name>
            <surname>Lei</surname>
          </string-name>
          , and
          <string-name>
            <surname>Raghu</surname>
            <given-names>N.</given-names>
          </string-name>
          <string-name>
            <surname>Kacker</surname>
          </string-name>
          , '
          <article-title>Combinatorial testing: Theory and practice'</article-title>
          ,
          <source>in Advances in Computers</source>
          , volume
          <volume>99</volume>
          ,
          <fpage>1</fpage>
          -
          <lpage>66</lpage>
          , Elsevier, (
          <year>2015</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Max</surname>
            <given-names>Lillack</given-names>
          </string-name>
          , Christian Ka¨stner, and Eric Bodden, '
          <article-title>Tracking Load-time Configuration Options'</article-title>
          ,
          <source>in 29th ACM/IEEE International Conference on Automated Software Engineering, ASE '14</source>
          , pp.
          <fpage>445</fpage>
          -
          <lpage>456</lpage>
          , New York, NY, USA, (
          <year>2014</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Dusica</surname>
            <given-names>Marijan</given-names>
          </string-name>
          , '
          <article-title>Improving Configurable Software Testing with Statistical Test Selection'</article-title>
          ,
          <source>in International Workshop on Formal Methods for Analysis of Business Systems, ForMABS</source>
          <year>2016</year>
          , pp.
          <fpage>5</fpage>
          -
          <lpage>8</lpage>
          , New York, NY, USA, (
          <year>2016</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>J.</given-names>
            <surname>Meinicke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. P.</given-names>
            <surname>Wong</surname>
          </string-name>
          , C. Ka¨stner, T. Thu¨m, and G. Saake, '
          <article-title>On essential configuration complexity: Measuring interactions in highlyconfigurable systems'</article-title>
          ,
          <source>in 2016 31st IEEE/ACM International Conference on Automated Software Engineering (ASE)</source>
          , pp.
          <fpage>483</fpage>
          -
          <lpage>494</lpage>
          , (
          <year>September 2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <surname>James</surname>
            <given-names>Mickens</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Martin</given-names>
            <surname>Szummer</surname>
          </string-name>
          , and Dushyanth Narayanan, '
          <article-title>Snitch: Interactive Decision Trees for Troubleshooting Misconfigurations'</article-title>
          ,
          <source>in 2Nd USENIX Workshop on Tackling Computer Systems Problems with Machine Learning Techniques</source>
          , pp.
          <volume>8</volume>
          :
          <fpage>1</fpage>
          -
          <issue>8</issue>
          :
          <fpage>6</fpage>
          , Cambridge, MA, (
          <year>2007</year>
          ). USENIX Association.
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <surname>Nica</surname>
            <given-names>Mihai</given-names>
          </string-name>
          , Nica Simona, and Wotawa Franz, '
          <article-title>On the use of mutations and testing for debugging'</article-title>
          ,
          <source>Software: Practice and Experience</source>
          ,
          <volume>43</volume>
          (
          <issue>9</issue>
          ),
          <fpage>1121</fpage>
          -
          <lpage>1142</lpage>
          , (
          <year>2013</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>S.</given-names>
            <surname>Nadi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Berger</surname>
          </string-name>
          ,
          <string-name>
            <surname>C.</surname>
          </string-name>
          <article-title>Ka¨stner, and</article-title>
          K. Czarnecki, '
          <article-title>Where Do Configuration Constraints Stem From? An Extraction Approach and an Empirical Study'</article-title>
          ,
          <source>IEEE Transactions on Software Engineering</source>
          ,
          <volume>41</volume>
          (
          <issue>8</issue>
          ),
          <fpage>820</fpage>
          -
          <lpage>841</lpage>
          , (
          <year>August 2015</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <surname>Sarah</surname>
            <given-names>Nadi</given-names>
          </string-name>
          , Thorsten Berger, Christian Ka¨stner, and Krzysztof Czarnecki, '
          <article-title>Mining Configuration Constraints: Static Analyses and Empirical Results'</article-title>
          ,
          <source>in 36th International Conference on Software Engineering, ICSE</source>
          <year>2014</year>
          , pp.
          <fpage>140</fpage>
          -
          <lpage>151</lpage>
          , New York, NY, USA, (
          <year>2014</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <surname>Vivek</surname>
            <given-names>Nair</given-names>
          </string-name>
          , Tim Menzies, Norbert Siegmund, and Sven Apel, '
          <article-title>Using Bad Learners to Find Good Configurations'</article-title>
          ,
          <source>in 2017 11th Joint Meeting on Foundations of Software Engineering</source>
          , ESEC/FSE 2017, pp.
          <fpage>257</fpage>
          -
          <lpage>267</lpage>
          , New York, NY, USA, (
          <year>2017</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>ThanhVu</given-names>
            <surname>Nguyen</surname>
          </string-name>
          , Ugur Koc, Javran Cheng, Jeffrey S. Foster, and
          <string-name>
            <surname>Adam</surname>
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Porter</surname>
          </string-name>
          , 'iGen:
          <article-title>Dynamic Interaction Inference for Configurable Software'</article-title>
          ,
          <source>in 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering, FSE</source>
          <year>2016</year>
          , pp.
          <fpage>655</fpage>
          -
          <lpage>665</lpage>
          , New York, NY, USA, (
          <year>2016</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>Changhai</given-names>
            <surname>Nie</surname>
          </string-name>
          and Hareton Leung, '
          <article-title>A survey of combinatorial testing'</article-title>
          ,
          <source>ACM Computing Surveys</source>
          ,
          <volume>43</volume>
          (
          <issue>2</issue>
          ), (
          <year>January 2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <surname>Jeho</surname>
            <given-names>Oh</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Don</given-names>
            <surname>Batory</surname>
          </string-name>
          , Margaret Myers, and Norbert Siegmund, '
          <article-title>Finding Near-optimal Configurations in Product Lines by Random Sampling'</article-title>
          ,
          <source>in 2017 11th Joint Meeting on Foundations of Software Engineering</source>
          , ESEC/FSE 2017, pp.
          <fpage>61</fpage>
          -
          <lpage>71</lpage>
          , New York, NY, USA, (
          <year>2017</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <surname>Rahul</surname>
            <given-names>Potharaju</given-names>
          </string-name>
          , Joseph Chan, Luhui Hu, Cristina Nita-Rotaru,
          <string-name>
            <given-names>Mingshi</given-names>
            <surname>Wang</surname>
          </string-name>
          , Liyuan Zhang, and Navendu Jain, '
          <article-title>ConfSeer: Leveraging Customer Support Knowledge Bases for Automated Misconfiguration Detection'</article-title>
          ,
          <source>Proc. VLDB Endow</source>
          .,
          <volume>8</volume>
          (
          <issue>12</issue>
          ),
          <fpage>1828</fpage>
          -
          <lpage>1839</lpage>
          , (
          <year>August 2015</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <given-names>Ariel</given-names>
            <surname>Rabkin</surname>
          </string-name>
          and Randy Katz, '
          <article-title>Precomputing Possible Configuration Error Diagnoses'</article-title>
          ,
          <source>in 2011 26th IEEE/ACM International Conference on Automated Software Engineering</source>
          , pp.
          <fpage>193</fpage>
          -
          <lpage>202</lpage>
          , Washington, DC, USA, (
          <year>2011</year>
          ). IEEE Computer Society.
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>Ariel</given-names>
            <surname>Rabkin</surname>
          </string-name>
          and Randy Katz, '
          <article-title>Static Extraction of Program Configuration Options'</article-title>
          ,
          <source>in 33rd International Conference on Software Engineering, ICSE '11</source>
          , pp.
          <fpage>131</fpage>
          -
          <lpage>140</lpage>
          , New York, NY, USA, (
          <year>2011</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          [31]
          <string-name>
            <surname>Vinod</surname>
            <given-names>Ramachandran</given-names>
          </string-name>
          , Manish Gupta, Manish Sethi, and
          <article-title>Soudip Roy Chowdhury, Determining Configuration Parameter Dependencies via Analysis of Configuration Data from Multi-tiered Enterprise Applications'</article-title>
          ,
          <source>in 6th International Conference on Autonomic Computing, ICAC '09</source>
          , pp.
          <fpage>169</fpage>
          -
          <lpage>178</lpage>
          , New York, NY, USA, (
          <year>2009</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          [32]
          <string-name>
            <given-names>M.</given-names>
            <surname>Sayagh</surname>
          </string-name>
          and
          <string-name>
            <given-names>B.</given-names>
            <surname>Adams</surname>
          </string-name>
          ,
          <article-title>'Multi-layer software configuration: Empirical study on wordpress'</article-title>
          ,
          <source>in 2015 IEEE 15th International Working Conference on Source Code Analysis and Manipulation (SCAM)</source>
          , pp.
          <fpage>31</fpage>
          -
          <lpage>40</lpage>
          , (
          <year>September 2015</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          [33]
          <string-name>
            <surname>Mohammed</surname>
            <given-names>Sayagh</given-names>
          </string-name>
          , Noureddine Kerzazi, and Bram Adams, '
          <article-title>On Cross-stack Configuration Errors'</article-title>
          ,
          <source>in 39th International Conference on Software Engineering, ICSE '17</source>
          , pp.
          <fpage>255</fpage>
          -
          <lpage>265</lpage>
          , Piscataway, NJ, USA, (
          <year>2017</year>
          ). IEEE Press.
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          [34]
          <string-name>
            <surname>Kostyantyn</surname>
            <given-names>Shchekotykhin</given-names>
          </string-name>
          , Gerhard Friedrich, Patrick Rodler, and Philipp Fleiss, '
          <article-title>Sequential diagnosis of high cardinality faults in knowledge-bases by direct diagnosis generation'</article-title>
          ,
          <source>in ECAI '14</source>
          , pp.
          <fpage>813</fpage>
          -
          <lpage>818</lpage>
          , (
          <year>2014</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          [35]
          <string-name>
            <given-names>K.</given-names>
            <surname>Shi</surname>
          </string-name>
          , '
          <article-title>Combining Evolutionary Algorithms with Constraint Solving for Configuration Optimization'</article-title>
          ,
          <source>in 2017 IEEE International Conference on Software Maintenance and Evolution (ICSME)</source>
          , pp.
          <fpage>665</fpage>
          -
          <lpage>669</lpage>
          , (
          <year>September 2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          [36]
          <string-name>
            <given-names>S.</given-names>
            <surname>Souto</surname>
          </string-name>
          ,
          <string-name>
            <surname>M. D'Amorim</surname>
            , and
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Gheyi</surname>
          </string-name>
          , '
          <article-title>Balancing Soundness and Efficiency for Practical Testing of Configurable Systems'</article-title>
          ,
          <source>in 2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE)</source>
          , pp.
          <fpage>632</fpage>
          -
          <lpage>642</lpage>
          , (May
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref37">
        <mixed-citation>
          [37]
          <string-name>
            <surname>Ya-Yunn</surname>
            <given-names>Su</given-names>
          </string-name>
          , Mona Attariyan, and Jason Flinn, '
          <article-title>AutoBash: Improving Configuration Management with Operating System Causality Analysis'</article-title>
          ,
          <source>in Proceedings of Twenty-first ACM SIGOPS Symposium on Operating Systems Principles</source>
          , pp.
          <fpage>237</fpage>
          -
          <lpage>250</lpage>
          , Stevenson, Washington, USA, (
          <year>2007</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref38">
        <mixed-citation>
          [38]
          <string-name>
            <given-names>T.</given-names>
            <surname>Uchiumi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Kikuchi</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Y.</given-names>
            <surname>Matsumoto</surname>
          </string-name>
          , '
          <article-title>Misconfiguration detection for cloud datacenters using decision tree analysis'</article-title>
          ,
          <source>in Network Operations and Management Symposium (APNOMS)</source>
          ,
          <year>2012</year>
          14th Asia-Pacific, pp.
          <fpage>1</fpage>
          -
          <lpage>4</lpage>
          , (
          <year>September 2012</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref39">
        <mixed-citation>
          [39]
          <string-name>
            <surname>Bo</surname>
            <given-names>Wang</given-names>
          </string-name>
          , Leonardo Passos, Yingfei Xiong, Krzysztof Czarnecki,
          <string-name>
            <given-names>Haiyan</given-names>
            <surname>Zhao</surname>
          </string-name>
          , and Wei Zhang, '
          <source>SmartFixer: Fixing Software Configurations Based on Dynamic Priorities', in 17th International Software Product Line Conference, SPLC '13</source>
          , pp.
          <fpage>82</fpage>
          -
          <lpage>90</lpage>
          , New York, NY, USA, (
          <year>2013</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref40">
        <mixed-citation>
          [40]
          <string-name>
            <surname>Helen</surname>
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Wang</surname>
          </string-name>
          , John C. Platt, Yu Chen, Ruyun Zhang, and
          <string-name>
            <surname>Yi-min</surname>
            <given-names>Wang</given-names>
          </string-name>
          , '
          <article-title>Automatic Misconfiguration Troubleshooting with PeerPressure'</article-title>
          , in In OSDI, pp.
          <fpage>245</fpage>
          -
          <lpage>258</lpage>
          , (
          <year>2004</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref41">
        <mixed-citation>
          [41]
          <string-name>
            <surname>Mengliao</surname>
            <given-names>Wang</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Xiaoyu Shi</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          K. Wong, '
          <article-title>Capturing Expert Knowledge for Automated Configuration Fault Diagnosis'</article-title>
          ,
          <source>in 2011 IEEE 19th International Conference on Program Comprehension (ICPC)</source>
          , pp.
          <fpage>205</fpage>
          -
          <lpage>208</lpage>
          , (
          <year>June 2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref42">
        <mixed-citation>
          [42]
          <string-name>
            <surname>Yi-min</surname>
            <given-names>Wang</given-names>
          </string-name>
          , Chad Verbowski, John Dunagan, Yu Chen,
          <string-name>
            <given-names>Helen J</given-names>
            .
            <surname>Wang</surname>
          </string-name>
          , and Chun Yuan, '
          <article-title>STRIDER: A Black-box, State-based Approach to Change and Configuration Management and Support'</article-title>
          , in In Usenix LISA, pp.
          <fpage>159</fpage>
          -
          <lpage>172</lpage>
          , (
          <year>2003</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref43">
        <mixed-citation>
          [43]
          <string-name>
            <given-names>Mark</given-names>
            <surname>Weiser</surname>
          </string-name>
          , '
          <article-title>Program slicing'</article-title>
          ,
          <source>IEEE Transactions on Software Engineering</source>
          ,
          <volume>10</volume>
          (
          <issue>4</issue>
          ),
          <fpage>352</fpage>
          -
          <lpage>357</lpage>
          , (
          <year>July 1984</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref44">
        <mixed-citation>
          [44]
          <string-name>
            <surname>Andrew</surname>
            <given-names>Whitaker</given-names>
          </string-name>
          , Richard S. Cox, and
          <string-name>
            <given-names>Steven D.</given-names>
            <surname>Gribble</surname>
          </string-name>
          , '
          <article-title>Configuration Debugging As Search: Finding the Needle in the Haystack'</article-title>
          ,
          <source>in 6th Conference on Symposium on Opearting Systems Design &amp; Implementation</source>
          - Volume
          <volume>6</volume>
          , pp.
          <fpage>6</fpage>
          -
          <lpage>6</lpage>
          , San Francisco, CA, (
          <year>2004</year>
          ). USENIX Association.
        </mixed-citation>
      </ref>
      <ref id="ref45">
        <mixed-citation>
          [45]
          <string-name>
            <surname>Jules</surname>
            <given-names>White</given-names>
          </string-name>
          , David Benavides, Douglas C. Schmidt, Pablo Trinidad, Brian Dougherty, and Antonio Ruiz Corte´s, '
          <article-title>Automated diagnosis of feature model configurations'</article-title>
          ,
          <source>Journal of Systems and Software</source>
          ,
          <volume>83</volume>
          (
          <issue>7</issue>
          ),
          <fpage>1094</fpage>
          -
          <lpage>1107</lpage>
          , (
          <year>2010</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref46">
        <mixed-citation>
          [46]
          <string-name>
            <given-names>W.</given-names>
            <surname>Eric</surname>
          </string-name>
          <string-name>
            <surname>Wong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Ruizhi</given-names>
            <surname>Gao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Yihao</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Rui</given-names>
            <surname>Abreu</surname>
          </string-name>
          , and Franz Wotawa, '
          <article-title>A survey on software fault localization'</article-title>
          ,
          <source>IEEE Trans. Software Eng.</source>
          ,
          <volume>42</volume>
          (
          <issue>8</issue>
          ),
          <fpage>707</fpage>
          -
          <lpage>740</lpage>
          , (
          <year>2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref47">
        <mixed-citation>
          [47]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Xiong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Zhang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hubaux</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>She</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Wang</surname>
          </string-name>
          , and
          <string-name>
            <given-names>K.</given-names>
            <surname>Czarnecki</surname>
          </string-name>
          , 'Range Fixes:
          <article-title>Interactive Error Resolution for Software Configuration'</article-title>
          ,
          <source>IEEE Transactions on Software Engineering</source>
          ,
          <volume>41</volume>
          (
          <issue>6</issue>
          ),
          <fpage>603</fpage>
          -
          <lpage>619</lpage>
          , (
          <year>June 2015</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref48">
        <mixed-citation>
          [48]
          <string-name>
            <surname>Yingfei</surname>
            <given-names>Xiong</given-names>
          </string-name>
          , Arnaud Hubaux, Steven She, and Krzysztof Czarnecki, '
          <article-title>Generating Range Fixes for Software Configuration'</article-title>
          ,
          <source>in 34th International Conference on Software Engineering, ICSE '12</source>
          , pp.
          <fpage>58</fpage>
          -
          <lpage>68</lpage>
          , Piscataway, NJ, USA, (
          <year>2012</year>
          ). IEEE Press.
        </mixed-citation>
      </ref>
      <ref id="ref49">
        <mixed-citation>
          [49]
          <string-name>
            <surname>Tianyin</surname>
            <given-names>Xu</given-names>
          </string-name>
          , Long Jin, Xuepeng Fan, Yuanyuan Zhou, Shankar Pasupathy, and Rukma Talwadker, 'Hey,
          <article-title>You Have Given Me Too Many Knobs!: Understanding and Dealing with Over-designed Configuration in System Software'</article-title>
          ,
          <source>in 2015 10th Joint Meeting on Foundations of Software Engineering</source>
          , ESEC/FSE 2015, pp.
          <fpage>307</fpage>
          -
          <lpage>319</lpage>
          , New York, NY, USA, (
          <year>2015</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref50">
        <mixed-citation>
          [50]
          <string-name>
            <surname>Tianyin</surname>
            <given-names>Xu</given-names>
          </string-name>
          , Jiaqi Zhang, Peng Huang, Jing Zheng, Tianwei Sheng, Ding Yuan,
          <string-name>
            <surname>Yuanyuan Zhou</surname>
          </string-name>
          , and Shankar Pasupathy, '
          <article-title>Do Not Blame Users for Misconfigurations'</article-title>
          ,
          <source>in Twenty-Fourth ACM Symposium on Operating Systems Principles</source>
          , pp.
          <fpage>244</fpage>
          -
          <lpage>259</lpage>
          , Farminton, Pennsylvania, (
          <year>2013</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref51">
        <mixed-citation>
          [51]
          <string-name>
            <given-names>Tianyin</given-names>
            <surname>Xu and Yuanyuan Zhou</surname>
          </string-name>
          , '
          <article-title>Systems Approaches to Tackling Configuration Errors: A Survey'</article-title>
          ,
          <source>ACM Comput. Surv.</source>
          ,
          <volume>47</volume>
          (
          <issue>4</issue>
          ),
          <volume>70</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>70</lpage>
          :
          <fpage>41</fpage>
          , (
          <year>July 2015</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref52">
        <mixed-citation>
          [52]
          <string-name>
            <surname>Zuoning</surname>
            <given-names>Yin</given-names>
          </string-name>
          , Xiao Ma, Jing Zheng, Yuanyuan Zhou,
          <string-name>
            <given-names>Lakshmi N.</given-names>
            <surname>Bairavasundaram</surname>
          </string-name>
          , and Shankar Pasupathy, '
          <article-title>An Empirical Study on Configuration Errors in Commercial and Open Source Systems'</article-title>
          ,
          <source>in Twenty-Third ACM Symposium on Operating Systems Principles, SOSP '11</source>
          , pp.
          <fpage>159</fpage>
          -
          <lpage>172</lpage>
          , New York, NY, USA, (
          <year>2011</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref53">
        <mixed-citation>
          [53]
          <string-name>
            <surname>Ding</surname>
            <given-names>Yuan</given-names>
          </string-name>
          , Haohui Mai, Weiwei Xiong,
          <string-name>
            <surname>Lin</surname>
            <given-names>Tan</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yuanyuan Zhou</surname>
          </string-name>
          , and Shankar Pasupathy, '
          <article-title>SherLog: Error Diagnosis by Connecting Clues from Run-time Logs', in Fifteenth Edition of ASPLOS on Architectural Support for Programming Languages and Operating Systems</article-title>
          , ASPLOS XV, pp.
          <fpage>143</fpage>
          -
          <lpage>154</lpage>
          , New York, NY, USA, (
          <year>2010</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref54">
        <mixed-citation>
          [54]
          <string-name>
            <surname>Ding</surname>
            <given-names>Yuan</given-names>
          </string-name>
          , Yinglian Xie, Rina Panigrahy, Junfeng Yang,
          <string-name>
            <given-names>Chad</given-names>
            <surname>Verbowski</surname>
          </string-name>
          , and Arunvijay Kumar, '
          <article-title>Context-based Online Configurationerror Detection'</article-title>
          ,
          <source>in 2011 USENIX Conference on USENIX Annual Technical Conference</source>
          , pp.
          <fpage>28</fpage>
          -
          <lpage>28</lpage>
          , Portland,
          <string-name>
            <surname>OR</surname>
          </string-name>
          , (
          <year>2011</year>
          ). USENIX Association.
        </mixed-citation>
      </ref>
      <ref id="ref55">
        <mixed-citation>
          [55]
          <string-name>
            <surname>Jiaqi</surname>
            <given-names>Zhang</given-names>
          </string-name>
          , Lakshminarayanan Renganarayana, Xiaolan Zhang, Niyu Ge, Vasanth Bala, Tianyin Xu, and Yuanyuan Zhou, '
          <article-title>EnCore: Exploiting System Environment and Correlation Information for Misconfiguration Detection'</article-title>
          ,
          <source>in 19th International Conference on Architectural Support for Programming Languages and Operating Systems</source>
          , pp.
          <fpage>687</fpage>
          -
          <lpage>700</lpage>
          , Salt Lake City, Utah, USA, (
          <year>2014</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref56">
        <mixed-citation>
          [56]
          <string-name>
            <surname>Sai</surname>
            <given-names>Zhang</given-names>
          </string-name>
          , '
          <article-title>ConfDiagnoser: An Automated Configuration Error Diagnosis Tool for Java Software'</article-title>
          ,
          <source>in 2013 International Conference on Software Engineering, ICSE '13</source>
          , pp.
          <fpage>1438</fpage>
          -
          <lpage>1440</lpage>
          , Piscataway, NJ, USA, (
          <year>2013</year>
          ). IEEE Press.
        </mixed-citation>
      </ref>
      <ref id="ref57">
        <mixed-citation>
          [57]
          <string-name>
            <given-names>Sai</given-names>
            <surname>Zhang</surname>
          </string-name>
          and
          <string-name>
            <given-names>Michael D.</given-names>
            <surname>Ernst</surname>
          </string-name>
          , '
          <source>Automated diagnosis of software configuration errors'</source>
          , in ICSE'
          <volume>13</volume>
          , 34th International Conference on Software Engineering, San Francisco, CA, USA, (May
          <year>2013</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref58">
        <mixed-citation>
          [58]
          <string-name>
            <given-names>Sai</given-names>
            <surname>Zhang</surname>
          </string-name>
          and
          <string-name>
            <given-names>Michael D.</given-names>
            <surname>Ernst</surname>
          </string-name>
          , '
          <article-title>Which Configuration Option Should I Change?'</article-title>
          ,
          <source>in 36th International Conference on Software Engineering, ICSE</source>
          <year>2014</year>
          , pp.
          <fpage>152</fpage>
          -
          <lpage>163</lpage>
          , New York, NY, USA, (
          <year>2014</year>
          ). ACM.
        </mixed-citation>
      </ref>
      <ref id="ref59">
        <mixed-citation>
          [59]
          <string-name>
            <given-names>Sai</given-names>
            <surname>Zhang</surname>
          </string-name>
          and
          <string-name>
            <given-names>Michael D.</given-names>
            <surname>Ernst</surname>
          </string-name>
          , '
          <article-title>Proactive Detection of Inadequate Diagnostic Messages for Software Configuration Errors'</article-title>
          ,
          <source>in Int. Symp. on Software Testing and Analysis (ISSTA)</source>
          , pp.
          <fpage>12</fpage>
          -
          <lpage>23</lpage>
          , NY, USA, (
          <year>2015</year>
          ). ACM.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>