<!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>A Constraint Solving Problem Towards Uni ed Combinatorial Interaction Testing</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Faculty of Engineering and Natural Sciences, Sabanci University</institution>
          ,
          <addr-line>Istanbul</addr-line>
          ,
          <country country="TR">Turkey</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Combinatorial Interaction Testing (CIT) approaches aim to reveal failures caused by the interactions of factors, such as input parameters and con guration options. Our ultimate goal in this line of research is to improve the practicality of CIT approaches. To this end, we have been working on developing what we call Uni ed Combinatorial Interaction Testing (U-CIT), which not only represents most (if not all) combinatorial objects that have been developed so far, but also allows testers to develop their own application-speci c combinatorial objects for testing. However, realizing U-CIT in practice requires us to solve an interesting constraint solving problem. In this work we informally de ne the problem and present a greedy algorithm to solve it. Our gaol is not so much to present a solution, but to introduce the problem, the solution of which (we believe) is of great practical importance.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        Software systems frequently embody a wide spectrum of system variabilities that require testing,
such as software and hardware con guration options, user inputs, and thread interleavings.
However, exhaustively testing all possible variations in a timely manner (if not impossible at
all) is generally far beyond the available resources for testing [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. For this reason, the testing
of modern software systems almost always involve sampling enormous variability spaces and
testing representative instances of a system's behavior. In practice, this sampling is commonly
performed with techniques collectively referred to as combinatorial interaction testing (or CIT)
[
        <xref ref-type="bibr" rid="ref10 ref15">15, 10</xref>
        ].
      </p>
      <p>
        CIT approaches work by rst de ning a model of the system's variability space. This model
typically includes a set of factors, each of which takes its value from a particular domain,
and a (possibly empty) set of inter-option constraints, each of which invalidates certain factor
value combinations, as not all possible combinations may be valid in practice. Based on this
model, CIT then generates a sample, meeting a speci ed coverage criterion. That is, the
sample contains some speci ed combinations of factors and their values. For instance, a t-way
covering array, which is a well-known and frequently-used CIT object, requires that each valid
combination of factor values for every combination of t factors, appears at least once in the
sample [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. Here, t is often referred to as the coverage strength.
      </p>
      <p>The basic justi cation for using CIT is that they can (under certain assumptions) e ectively
and e ciently exercise all system behaviors caused by the interactions of t or fewer factors.
The e ectiveness of CIT stems from the coverage properties it provides; e.g., all required t-way
combinations of factor values are guaranteed to be covered at least once. The e ciency, on the
other hand, stems from the fact that a test case can cover more than one required combination.
For example, a con guration composed of n con guration options covers nt di erent t-way
option setting combinations. That is, testing a single con guration has the potential of testing
all nt combinations. Therefore, carefully generating test cases, such that a full coverage under
the given coverage criterion is obtained using a minimum number of test cases can, for example,
decrease the cost of testing.</p>
      <p>
        The results of many empirical studies suggest that majority of factor-related failures in
practice are caused by the interactions of only a small number of factors. That is, t is small in
practice, typically 2 t 6 with t=2 (i.e., pairwise testing) being the most common case [
        <xref ref-type="bibr" rid="ref2 ref3 ref4 ref5">3, 2, 4,
5</xref>
        ]. For a xed t, as the variability space grows (as the number of factors increases, for example),
the size of a CIT object represents an increasingly smaller proportion of the whole space. Thus,
very large spaces can e ciently be covered. Consequently, CIT has been successfully used
in many application domains, including systematic testing of network protocols [
        <xref ref-type="bibr" rid="ref1 ref12">1, 12</xref>
        ], input
parameters [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], con gurations [
        <xref ref-type="bibr" rid="ref14 ref8">8, 14</xref>
        ], software product lines [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], multi-threaded applications [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ],
and graphical user interfaces [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
      </p>
      <p>
        All these have so far been achieved by having researchers develop speci c models for de ning
variability spaces together with speci c coverage criteria to be used for testing, which in turn
led to the development of novel CIT objects for every unique testing scenario. However, when
the testing scenarios encountered in practice deviate from the ones addressed by researchers,
practitioners often have profound di culties in using these existing CIT objects [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. As a
matter of fact, even small changes in variability spaces and/or coverage criteria, may render
existing CIT objects useless. For example, the very rst variants of covering arrays supported
only pairwise testing (where t=2) of binary factors. That is, when t&gt;2 and/or when factors
had varying number of values, these CIT objects were useless. Then, new CIT objects were
developed to handle scenarios, in which factors might have di erent number of values and the
covering arrays could be created for t 2. But then these new objects su ered in the presence
of inter-option constraints. New combinatorial objects were developed to handle system-wide
constraints, but they then su ered in the presence of test case-speci c inter-option constraints,
which led to the development of test case-aware covering arrays [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. This trend has been going
on for decades now. And the bad news is that every time the variability space and/or the
coverage criterion changes, a new CIT object needs to be de ned, which in turn necessitates
the development of specialized construction approaches, algorithms, and tools to compute these
objects. Clearly, all these have been greatly hindering the applicability of CIT in practice.
      </p>
      <p>We conjecture that the exibility, thus the applicability of CIT in practice, would greatly be
improved, if there were better tools that allowed practitioners to de ne their own
applicationspeci c variability spaces as well as their own application-speci c coverage criteria. That is,
rather than we, as researchers, invent new CIT objects for testing and ask practitioners to use
them, thus telling them what to test, we would like to enable practitioners to de ne their own
space for testing as well as their own coverage criterion, thus enabling them to invent their
own application-speci c CIT objects. Our goal as researchers is then to develop powerful tools
to e ciently and e ectively sample the given space to obtain full coverage under the given
criterion. Although such generic tools may not be as e cient as their specialized counterparts,
they certainly can provide the exibility needed in practice. We call this approach Uni ed
Combinatorial Interaction Testing (or U-CIT).</p>
      <p>In this work we informally introduce U-CIT, which enables practitioners to de ne their own
variability spaces and coverage criteria for testing, and present a uni ed construction approach
to compute speci c instances of U-CIT objects.
2</p>
      <p>Uni ed Combinatorial Interaction Testing (U-CIT)
De nition 1. A U-CIT requirement is an entity that needs be covered. In U-CIT, requirements
are expressed as constraints.</p>
      <p>For example, for scenarios, in which standard covering arrays are used for testing highly
con gurable systems, a U-CIT requirement corresponds to a t-tuple to be covered, where a
t-tuple is a set of option-setting pairs for a combination of t distinct con guration options.
De nition 2. A U-CIT test case is a collection of U-CIT test requirements that can be tested
together, i.e., a set of constraints that can be satis ed together.</p>
      <p>In our running scenario, for example, a U-CIT test case corresponds to a system con
guration, which is indeed an n-tuple, where n is the number of con guration options.
De nition 3. A U-CIT space model is a system of constraints that implicitly de ne the space
of all valid U-CIT requirements as well as all valid U-CIT test cases, as not all possible
combinations of U-CIT requirements may be valid in practice.</p>
      <p>For our running scenario, a U-CIT space model speci es that 1) every con guration option
must have a valid setting in a con guration, 2) a valid U-CIT requirement is a valid t-tuple
that does not violate any inter-option constraints, and 3) a valid U-CIT test case is valid
con guration that does not violate any inter-option constraints.</p>
      <p>De nition 4. A U-CIT coverage criterion is a criterion that implicitly de nes all valid U-CIT
requirements that need to be covered.</p>
      <p>For example, the U-CIT coverage criterion for our running scenario states that all valid
t-tuples must be covered at least once.</p>
      <p>
        U-CIT takes as input a U-CIT space model and a U-CIT coverage criterion and as output
computes a U-CIT object, e.g., a set of valid U-CIT test cases, which achieves a full coverage
under the given criterion. Although it is possible to de ne additional constraints on the
emergent properties of the resulting objects, such as the objects must achieve a full coverage with
the \minimum" possible testing cost [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], we, for this work, assume one such emergent constraint
which aims to minimize the number of test cases required for full coverage.
      </p>
      <p>What makes a U-CIT approach a uni ed approach is that requirements to be covered, test
cases, and the space from which the test cases will be drawn, are all expressed as constraints.
Consequently, the problem of computing a U-CIT object turns into one big, interesting
constraint solving problem. Note that we use the term \constraint" in the general sense; any
restriction, independent of the logic in which it is speci ed, is considered to be a constraint.
In other words, no matter whether the constraints are speci ed using Boolean logic, rst-order
logic, temporal logic, etc., the proposed approach will work as long as an appropriate constraint
solver is provided.</p>
    </sec>
    <sec id="sec-2">
      <title>Constraint Satisfaction Problem</title>
      <p>A U-CIT coverage criterion e ectively de nes a set of constraints to be satis ed (not necessarily
all together, but in groups), each of which represents a U-CIT requirement. Given the
requirements to be covered and a U-CIT space model further constraining the variability space from
which the U-CIT test cases will be drawn, the constraint satisfaction problem we need to solve
is to divide the requirements into a minimum number of non-overlapping sets of requirements,
such that within each set, the constraints representing the requirements in the set as well as the
model constraints are satis able together. In e ect, a solution for each set represents a valid
U-CIT test case, i.e., a collection of U-CIT requirements that can be tested together. Therefore,
the test cases generated for all the sets, represent a U-CIT object achieving full coverage under
the given coverage criterion. In particular, by reducing the number of non-overlapping sets,
thus the number of test cases, we attempt to reduce testing costs.</p>
      <p>A Greedy Approach for Computing U-CIT Ob jects
In this section we present a greedy algorithm (Algorithm 1) to compute U-CIT objects. Given
a U-CIT space model M and a coverage criterion C, we rst determine all valid U-CIT
requirements R (lines 2-7). To this end, we enumerate all the entities to be covered, convert each
entity to a constraint r, and then determine whether r ^ M is satis able (line 4). If it is, then
r is added in R (line 5). Otherwise, r is invalid.</p>
      <p>Once the set of valid requirements R is determined, we divide it into non-overlapping
satis able subsets S, covering all requirements (lines 9-23). To this end, we start with an empty
pool of subsets (line 10). Then, for each requirement r in R, we attempt to accommodate it in
an existing subset in the pool (line 14). If such a subset is found, we include r in the subset
(line 15). If not, we populate the pool with an initially empty subset and then include r in
the newly added subset (line 21). Note that a subset of requirements R0 in this context is
speci ed as the logical conjunction of all the requirements included in the set, i.e., Vr02R0 r0.
Consequently, to determine whether a new requirement r can be accommodated in an existing
subset R0, we solve the respective constraints together with M , i.e., r ^ M ^ Vr02R0 r0 (line 14),
if the resulting constraint is satis able then we include r in R0 (line 15).</p>
      <p>After determining the subsets S, to compute the U-CIT object O, we generate a test case
by solving the logical conjunction M ^ Vr2R0 r for each subset R0 (line 28). The set of test
cases are then guaranteed to obtain full coverage under the coverage criterion C.</p>
      <p>Not that we provide this algorithm as a proof-of-concept algorithm for computing U-CIT
objects. That is, in the development of this algorithm, our major concern was correctness, not
performance. Consequently, the proposed algorithm su ers from some drawbacks. One issue is
that being a greedy algorithm, it may yield locally optimal solutions. Another issue is that the
same constraints may end up being solved repeatedly, which may cause scalability issues.
5</p>
      <p>An Example: Specifying and Computing Standard
Covering Arrays as U-CIT Ob jects
In this section, we illustrate U-CIT on a hypothetical system by providing details about how
our running scenario, in which standard covering arrays are used for con guration testing, can
be handled by U-CIT. The example is kept as simple as possible on purpose. In general, the
complexity of encodings depends on the complexity of the system under test and/or complexity
of the application domain.</p>
      <p>Without losing the generality of the proposed approach, the system under test we use in our
example has three binary con guration options (o1, o2, and o3), each of which takes the setting of
true or f alse, together with two inter-option constraints: o2 = true ! o3 = true, invalidating
the combination (o2 = true, o3 = f alse), and :(o1 = true ^ o3 = f alse), invalidating the
combination (o1 = true, o3 = f alse). Furthermore, the system is to be tested using a 2-way
covering array, i.e., all valid 2-tuples must be covered at least once.</p>
      <p>For this example, the U-CIT space model M can be expressed in Boolean algebra as (:o2 _
o3) ^ (:o1 _ o3), where each con guration option is represented by a Boolean variable. In this
encoding, each U-CIT requirement simply becomes a Boolean formula representing a 2-tuple.
For example, the 2-tuple (o1 = f alse, o2 = true) is expressed as (:o1 ^ o2). To determine
whether a U-CIT requirement is valid or not, it is checked whether the respective Boolean
formula is satis able with the U-CIT space model M . For example, since (:o1 ^ o2) ^ M is
(o1; o2)
satis able, the 2-tuple (o1 = f alse, o2 = true) is a valid 2-tuple, thus a valid U-CIT requirement.
For the same reason, (o2 = true, o3 = f alse) is not a valid U-CIT requirement.</p>
      <p>The rst part of Algorithm 1 (lines 2-7), which determines all valid U-CIT requirements,
would then generate the 10 U-CIT requirements r1; ; r10 given in Table 1.</p>
      <p>S = fR10; R20; R30; R40g</p>
      <p>Next, the set of valid requirements is divided into non-overlapping satis able subsets by
the second part of Algorithm 2 (lines 10-23). Assuming that the requirements in Table 1 are
processed in the order r1; ; r10, the rst requirement we process becomes r1 : (:o1 ^ :o2).
Since the set S is initially empty, we create a new subset R10 = fr1g and populate S with
R10, i.e., S = fR10g. For the second requirement r2 : (:o1 ^ o2), since r1 ^ r2 ^ M , i.e.,
(:o1 ^ :o2) ^ (:o1 ^ o2) ^ M , is not satis able, r2 cannot be placed in R10. So, we create a new
subset R20 = fr2g and S becomes fR10; R20g. After processing r4, we would have four subsets R10,
R20, R30, and R40 in S, containing requirements r1, r2, r3, and r4, respectively. For requirement
r5 : (:o1 ^ :o3), as r1 ^ r5 ^ M , i.e., (:o1 ^ :o2) ^ (:o1 ^ :o3) ^ M , is satis able r5 is placed
in R10 together with r1. After processing all the requirements, we would have the four subsets
of satis able U-CIT requirements given in the left column of Table 2.</p>
      <p>Finally, in the last part of Algorithm 1 (lines 26-30), for each subset of U-CIT requirements
in S, we generate a U-CIT test case, which in this case corresponds to a valid con guration, by
solving the requirements in the subset together with the U-CIT space model M . For example,
for R10 (Table 2), solving r1 ^r5 ^r8 ^M produces the con guration (o1 = f alse; o2 = f alse; o3 =
f alse). Solving all the subsets would then generate the U-CIT object given in the right column
of Table 2, which is indeed a standard 2-way covering array { a set of con gurations that covers
each valid 2-tuple at least once.
6</p>
    </sec>
    <sec id="sec-3">
      <title>Conclusion and Future Work</title>
      <p>We believe that U-CIT can greatly improve the exibility of combinatorial interaction testing
in practice. Therefore, e cient and a ective approaches for solving the constraint satisfaction
problem we informally introduced in this paper, are of great practical importance. Therefore,
we keep on developing languages and model-based tools for de ning variability spaces and
coverage criteria in a generic manner as well as developing e cient and e ective approaches for
computing U-CIT objects.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Kirk</given-names>
            <surname>Burroughs</surname>
          </string-name>
          , Aridaman Jain,
          <string-name>
            <given-names>and Robert L.</given-names>
            <surname>Erickson</surname>
          </string-name>
          .
          <article-title>Improved quality of protocol testing through techniques of experimental design</article-title>
          .
          <source>In Communications</source>
          ,
          <year>1994</year>
          . ICC'94, SUPERCOMM/ICC'94,
          <string-name>
            <surname>Conference</surname>
            <given-names>Record</given-names>
          </string-name>
          ,'Serving Humanity Through Communications.'IEEE International Conference on, pages
          <volume>745</volume>
          {
          <fpage>752</fpage>
          . IEEE,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>David</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Cohen</surname>
          </string-name>
          ,
          <string-name>
            <surname>Siddhartha R. Dalal</surname>
          </string-name>
          , Michael L.
          <string-name>
            <surname>Fredman</surname>
          </string-name>
          , and
          <string-name>
            <surname>Gardner</surname>
            <given-names>C.</given-names>
          </string-name>
          <string-name>
            <surname>Patton</surname>
          </string-name>
          .
          <article-title>The aetg system: An approach to testing based on combinatorial design</article-title>
          .
          <source>Software Engineering</source>
          , IEEE Transactions on,
          <volume>23</volume>
          (
          <issue>7</issue>
          ):
          <volume>437</volume>
          {
          <fpage>444</fpage>
          ,
          <year>1997</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>David</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Cohen</surname>
          </string-name>
          ,
          <string-name>
            <surname>Siddhartha R. Dalal</surname>
          </string-name>
          , Jesse Parelius, and
          <string-name>
            <surname>Gardner</surname>
            <given-names>C.</given-names>
          </string-name>
          <string-name>
            <surname>Patton</surname>
          </string-name>
          .
          <article-title>The combinatorial design approach to automatic test generation</article-title>
          .
          <source>IEEE software</source>
          ,
          <volume>13</volume>
          (
          <issue>5</issue>
          ):
          <volume>83</volume>
          {
          <fpage>88</fpage>
          ,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>Jacek</given-names>
            <surname>Czerwonka</surname>
          </string-name>
          .
          <article-title>Pairwise testing in the real world: Practical extensions to test-case scenarios</article-title>
          .
          <source>In Proceedings of 24th Paci c Northwest Software Quality Conference, Citeseer</source>
          , pages
          <volume>419</volume>
          {
          <fpage>430</fpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Siddhartha</surname>
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Dalal</surname>
            , Ashish Jain, Nachimuthu Karunanithi,
            <given-names>J. M.</given-names>
          </string-name>
          <string-name>
            <surname>Leaton</surname>
          </string-name>
          , and
          <string-name>
            <surname>Christopher</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Lott</surname>
          </string-name>
          .
          <article-title>Model-based testing of a highly programmable system</article-title>
          .
          <source>In Software Reliability Engineering</source>
          ,
          <year>1998</year>
          . Proceedings. The Ninth International Symposium on, pages
          <volume>174</volume>
          {
          <fpage>179</fpage>
          . IEEE,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Gulsen</given-names>
            <surname>Demiroz</surname>
          </string-name>
          and
          <string-name>
            <given-names>Cemal</given-names>
            <surname>Yilmaz</surname>
          </string-name>
          .
          <article-title>Cost-aware combinatorial interaction testing</article-title>
          .
          <source>In Proceedings of the Internatinoal Conference on Advances in System Testing and Validation Lifecycles</source>
          , pages
          <volume>9</volume>
          {
          <fpage>16</fpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>Martin</given-names>
            <surname>Fagereng Johansen</surname>
          </string-name>
          , ystein Haugen, and
          <string-name>
            <given-names>Franck</given-names>
            <surname>Fleurey</surname>
          </string-name>
          .
          <article-title>An algorithm for generating t-wise covering arrays from large feature models</article-title>
          .
          <source>In Proceedings of the 16th International Software Product Line Conference-Volume</source>
          <volume>1</volume>
          , pages
          <fpage>46</fpage>
          {
          <fpage>55</fpage>
          . ACM,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Rick</given-names>
            <surname>Kuhn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Yu</given-names>
            <surname>Lei</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Raghu</given-names>
            <surname>Kacker</surname>
          </string-name>
          .
          <article-title>Practical combinatorial testing: Beyond pairwise</article-title>
          .
          <source>IT Professional</source>
          ,
          <volume>10</volume>
          (
          <issue>3</issue>
          ):
          <volume>19</volume>
          {
          <fpage>23</fpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Yu</surname>
            <given-names>Lei</given-names>
          </string-name>
          , Richard H Carver, Raghu Kacker, and
          <string-name>
            <given-names>David</given-names>
            <surname>Kung</surname>
          </string-name>
          .
          <article-title>A combinatorial testing strategy for concurrent programs</article-title>
          .
          <source>Software Testing, Veri cation and Reliability</source>
          ,
          <volume>17</volume>
          (
          <issue>4</issue>
          ):
          <volume>207</volume>
          {
          <fpage>225</fpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>Changhai</given-names>
            <surname>Nie</surname>
          </string-name>
          and
          <string-name>
            <given-names>Hareton</given-names>
            <surname>Leung</surname>
          </string-name>
          .
          <article-title>A survey of combinatorial testing</article-title>
          .
          <source>ACM Computing Surveys (CSUR)</source>
          ,
          <volume>43</volume>
          (
          <issue>2</issue>
          ):
          <fpage>11</fpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Patrick</surname>
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Schroeder</surname>
            , Pat Faherty, and
            <given-names>Bogdan</given-names>
          </string-name>
          <string-name>
            <surname>Korel</surname>
          </string-name>
          .
          <article-title>Generating expected results for automated black-box testing</article-title>
          .
          <source>In Automated Software Engineering</source>
          ,
          <year>2002</year>
          .
          <string-name>
            <surname>Proceedings. ASE</surname>
          </string-name>
          <year>2002</year>
          . 17th IEEE International Conference on, pages
          <volume>139</volume>
          {
          <fpage>148</fpage>
          . IEEE,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Alan</surname>
            <given-names>W.</given-names>
          </string-name>
          <string-name>
            <surname>Williams</surname>
          </string-name>
          and
          <string-name>
            <surname>Robert L. Probert</surname>
          </string-name>
          .
          <article-title>A practical strategy for testing pair-wise coverage of network interfaces</article-title>
          .
          <source>In Software Reliability Engineering</source>
          ,
          <year>1996</year>
          . Proceedings., Seventh International Symposium on, pages
          <volume>246</volume>
          {
          <fpage>254</fpage>
          . IEEE,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>Cemal</given-names>
            <surname>Yilmaz</surname>
          </string-name>
          .
          <article-title>Test case-aware combinatorial interaction testing</article-title>
          .
          <source>Software Engineering</source>
          , IEEE Transactions on,
          <volume>39</volume>
          (
          <issue>5</issue>
          ):
          <volume>684</volume>
          {
          <fpage>706</fpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Cemal</surname>
            <given-names>Yilmaz</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Myra</surname>
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Cohen</surname>
            ,
            <given-names>Adam</given-names>
          </string-name>
          <string-name>
            <surname>Porter</surname>
          </string-name>
          , et al.
          <article-title>Covering arrays for e cient fault characterization in complex con guration spaces</article-title>
          .
          <source>Software Engineering</source>
          , IEEE Transactions on,
          <volume>32</volume>
          (
          <issue>1</issue>
          ):
          <volume>20</volume>
          {
          <fpage>34</fpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Cemal</surname>
            <given-names>Yilmaz</given-names>
          </string-name>
          , Sandro Fouche,
          <string-name>
            <surname>Myra</surname>
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Cohen</surname>
            , Adam Porter,
            <given-names>Gulsen</given-names>
          </string-name>
          <string-name>
            <surname>Demiroz</surname>
            , and
            <given-names>Ugur</given-names>
          </string-name>
          <string-name>
            <surname>Koc</surname>
          </string-name>
          .
          <article-title>Moving forward with combinatorial interaction testing</article-title>
          .
          <source>Computer</source>
          ,
          <volume>47</volume>
          (
          <issue>2</issue>
          ):
          <volume>37</volume>
          {
          <fpage>45</fpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Xun</surname>
            <given-names>Yuan</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Myra</surname>
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Cohen</surname>
          </string-name>
          , and
          <string-name>
            <surname>Atif</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Memon</surname>
          </string-name>
          .
          <article-title>Gui interaction testing: Incorporating event context</article-title>
          .
          <source>Software Engineering</source>
          , IEEE Transactions on,
          <volume>37</volume>
          (
          <issue>4</issue>
          ):
          <volume>559</volume>
          {
          <fpage>574</fpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>