<!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>Locating Loop Errors in Programs: A Scalable and Expressive Approach using LocFaults</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Mohammed Bekkouche</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>LabRI-SBA Laboratory, École Supérieure en Informatique</institution>
          ,
          <addr-line>Sidi Bel Abbes 22000</addr-line>
          ,
          <country country="DZ">Algeria</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>A model checker can generate a lengthy and complicated trace of counterexamples for an erroneous program, with the loop instructions being the largest part of this trace. Consequently, the location of errors in loops is critical to analyzing the overall program. In this paper, we delve into the scalability potential of LocFaults, our error localization approach that utilizes Control Flow Graph (CFG) paths from counterexamples to calculate the Minimal Correction Deviations (MCDs) and Minimal Correction Subsets (MCSs) for each MCD found. The study presents the eficiency of LocFaults on programs with While-loops unfolded b times and deviated conditions ranging from 0 to n. Preliminary results show that LocFaults, constraint-based and flow-driven, is faster and provides more expressive information for the user compared to BugAssist, which is based on SAT and transforms the entire program into a Boolean formula.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Error localization</kwd>
        <kwd>LocFaults</kwd>
        <kwd>BugAssist</kwd>
        <kwd>Of-by-one bug</kwd>
        <kwd>Minimal Correction Deviations</kwd>
        <kwd>Minimal Correction Subsets</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        Several statistical approaches for error localization have been proposed, such as Tarantula [
        <xref ref-type="bibr" rid="ref6 ref7">6,
7</xref>
        ], Ochiai [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], AMPLE [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], Pinpoint [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], FLCN-S [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], FTFL [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], ConsilientSFL [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], and
Poster [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. Among them, Tarantula is the most famous and uses diferent metrics to calculate
the degree of suspicion of each instruction in the program while running a series of tests.
However, these approaches have a drawback in that they require a large number of test cases,
while our approach only uses one counterexample. Another challenge with statistical approaches
is the need for an oracle to determine if a test case’s result is correct or not. To address this issue,
we utilize the Bounded Model Checking (BMC) framework, which only requires a postcondition
or assertion to verify.
      </p>
      <p>
        Our approach aims to simplify the problem of error localization by reducing it to computing
a minimal set that explains why a Constraint Satisfaction Problem (CSP) is infeasible. The CSP
represents the constraints of the program, counterexample, and the assertion or postcondition
violated. The calculated set can be either a Minimal Correction Subset (MCS) or a Minimal
Unsatisfiable Subset (MUS). Generally, testing the feasibility of a CSP over a finite domain is an
NP-complete problem, which is one of the most dificult NP problems. Thus, explaining the
infeasibility in a CSP is equally challenging, if not harder, and can be classified as an NP-hard
problem. While BugAssist [
        <xref ref-type="bibr" rid="ref14 ref15">14, 15</xref>
        ] is a BMC-based error localization method that employs a
Max-SAT solver to compute the merger of MCSs of the Boolean formula of the entire program
with the counterexample, it becomes ineficient for large programs. LocFaults also works from
a counterexample to calculate MCSs.
      </p>
      <p>In this paper, we investigate the scalability of LocFaults on programs with While-loops that
are unfolded b times, and a number of deviated conditions ranging from 0 to 3. Our approach
contributes in the following ways compared to BugAssist:
• We avoid transforming the entire program into a system of constraints. Instead, we use the
CFG (Control Flow Graph) of the program to gather the constraints of the counterexample
path and paths derived from it. We assume that at most k conditionals may contain errors,
and we calculate MCSs only on the counterexample path and paths that correct the
program.
• We do not convert program instructions into a SAT (Boolean satisfiability) formula.</p>
      <p>Instead, we use numerical constraints that will be handled by constraint solvers.
• We do not rely on MaxSAT solvers as black boxes. Instead, we use a generic algorithm
that uses a constraint solver to calculate MCSs.
• We limit the size of the generated MCSs and the number of deviated conditions.
• We can work together multiple solvers during the localization process and choose the
most eficient one according to the category of the CSP (Constraint Satisfaction Problem)
constructed. For example, if the CSP of the detected path is linear over integers, we use
a MIP (Mixed Integer Programming) solver. If it is nonlinear, we use a CP (Constraint
Programming) and/or MINLP (Mixed Integer Nonlinear Programming) solver.</p>
      <p>Based on our practical experience, as demonstrated in Section 5, we have found that the
restrictions and distinctions employed by LocFaults make it faster and more expressive.</p>
      <p>The paper is organized as follows. Section 2 introduces the definition of MUS and MCS. In
Section 3, we define the ≤ k-MCD problem. In section 4, we describe our contribution to treating
erroneous loops, including the Of-by-one bug. The results of our experimental evaluation are
presented in Section 5. Section 6 includes the conclusion and discussion of future work.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Definitions</title>
      <p>In this section, we introduce the definition of an IIS/MUS and MCS.</p>
      <p>CSP.</p>
      <p>A CSP (Constraint Satisfaction Problem)  is defined as a triple
&lt; , ,  &gt;, where:
•  : a set of  variables 1, 2, ..., .
•  = {1, 2, ..., } is the set of constraints.</p>
      <p>•  : the tuple &lt; 1 , 2 , ...,  &gt;. The set  contains the values of the variable .</p>
      <p>A solution for  is an instantiation of the variables  ∈  that satisfies all the constraints in
.  is infeasible if it has no solutions. A sub-set of constraints ′ in  is also said infeasible
for the same reason except that it is limited to the constraints in ′.</p>
      <p>We denote as:
• (&lt; , ′,  &gt;) = ∅, to specify that ′ has no solutions, so it is infeasible.
• (&lt; , ′,  &gt;) ̸= ∅, to specify that ′ has at least one solution, so it is feasible.</p>
      <p>A Linear Program, denoted as LP, is said to be linear if all the constraints in the set  are
expressed as linear equations or inequalities. It is considered continuous if the domain of all
variables is real. If at least one variable in the set  is an integer or a binary (which is a special
case of an integer), and the constraints are linear, then  is referred to as a Mixed-Integer Linear
Program (MIP). If the constraints are expressed as nonlinear equations or inequalities, then  is
referred to as a Nonlinear Program (NLP).</p>
      <p>Let  =&lt; , ,  &gt; an infeasible CSP, we define for  :
IS. An IS (Inconsistent Set) is an infeasible subset of constraints in the constraint set infeasible
. ′ is an IS if:
• ′ ⊆ .</p>
      <p>• (&lt; , ′,  &gt;) = ∅.</p>
      <p>IIS or MUS. An IIS (Irreducible Inconsistent Set) or MUS (Minimal Unsatisfiable Subset) is an
infeasible subset of constraints of , and all its strict subsets are feasible. ′ is an IIS if :
• ′ is an IS.
• ∀′′ ⊂ ′.(&lt; , ′′,  &gt;) ̸= ∅, (each of its parts contributes to the infeasibility), ′
is called irreducible.</p>
      <p>MCS. ′ is a MCS (Minimal Correction Set) if :
• ′ ⊆ .
• (&lt; , ∖′,  &gt;) ̸= ∅.</p>
      <p>• ∄ ′′ ⊂ ′ such as (&lt; , ∖′′,  &gt;) = ∅.
3. The problem ≤ k-MCD
Given an erroneous program modeled in a CFG1  = (, , ), where  is the set of conditional
nodes,  is the set of assignment blocks, and  is the set of arcs, along with a counterexample, a
Minimal Correction Deviation (MCD) is a set  ⊆  such that propagating the counterexample
on all the instructions of  from the root, while having negated each condition2 in , allows
the output to satisfy the postcondition. A MCD is called minimal (or irreducible) if no element
can be removed from  without losing this property. In other words,  is a minimal program
correctness in the set of conditions. The size of the minimal deviation is its cardinality. The
problem of finding all MCDs of size smaller or equal to  is denoted as ≤ k-MCD.</p>
      <p>As an illustration (refer to Fig. 1), consider the CFG of the program AbsMinus (refer to
Fig. 1b). When provided with the counterexample { = 0,  = 1}, this program has one
minimal deviation of size 1. While the deviation {0 ≤ 0, 1 = 1 ∧ 0 ̸= 0} does correct the
program, it is not minimal. In fact, the only minimal correction deviation for this program is
{1 = 1 ∧ 0 ̸= 0}.</p>
    </sec>
    <sec id="sec-3">
      <title>4. Error localization in loops</title>
      <p>
        In the context of Bounded Model Checking (BMC) for programs, unfolding can be applied to the
entire program or to loops separately [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. Our algorithm, LocFaults [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], for error localization
1We use Dynamic Single Assignment (DSA) form [16] transformation that ensures that each variable is assigned
only once on each path of the CFG.
2To navigate to the intended branch, we negate the condition to take the opposite branch.
1 class AbsMinus {
2 /*@ ensures
3 @ ((i &lt; j) ==&gt; (\result == j-i
      </p>
      <p>)) &amp;&amp;
4 @ ((i &gt;= j) ==&gt; (\result ==
i</p>
      <p>j)); */
5 int AbsMinus (int i, int j) {
6 int result;
7 int k = 0;
8 if (i &lt;= j) {
9 k = k+2; } // error : k = k</p>
      <p>+2 instead of k=k+1
10 if (k == 1 &amp;&amp; i != j) {
11 result = j-i; }
12 else {
13 result = i-j; }
14 return result; } }
(a) The program AbsMinus</p>
      <p>0 = 0
If
If
0 ≤
0 Else
1 =
1 &amp;&amp;
0! =
0</p>
      <p>Else</p>
      <p>POST:{1 =
|0 − 0|} is UNSAT</p>
      <p>If
If
follows the latter approach, where we use a bound  to unfold loops by replacing them with
nested conditional statements of depth . For example, consider the program Minimum (refer to
Fig. 2), which contains a single loop that calculates the minimum value in an array of integers.
The efect on the control flow graph of the program Minimum before and after unfolding is
illustrated in Figures 2 and 3, respectively. The while-loop is unfolded three times, since three
iterations are required to calculate the minimum value for an array of size 4.</p>
      <p>LocFaults takes the CFG of the erroneous program,  (a counterexample),  (a bound
on the number of deviated conditions), and  (a bound on the size of calculated MCSs) as
input. It enables us to explore the CFG in depth by diverting a maximum of  conditions
from the counterexample’s path by performing the following steps:</p>
      <p>• Propagating CE on the CFG until the postcondition is reached. Then, it calculates the
2 /*The minimum in an array of n integers</p>
      <p>*/</p>
      <p>length) ; tab[k]&gt;=min);
6 int Minimum(int[] tab){
int min=tab[0];
int i=1;
while(i&lt;tab.length-1){ /*error, the
condition should be (i&lt;tab.</p>
      <p>length)*/
if(tab[i]&lt;min){</p>
      <p>min=tab[i];
}
i=i+1;
}
return min;
7
8
9
10
11
12
13
14
15
16 }
17 }
; (</p>
      <p>≥
2
= }
] 0
1
[ =
0 ]
 3
 [
 0

∧ 
3</p>
      <p>∧
=
] 1
0
[ =
0 ]
 2
 [
 0
{ 
:</p>
      <p>∧

]
0
[
0

 1

=</p>
      <p>0
0 



=
highlighted path of a counterexample in dashed lines and a deviation that satisfies the postcondition in
dotted lines.</p>
      <p>Of-by-one bugs are among the most common errors associated with loops. These bugs
cause loops to iterate one too many or one too few times. The cause of these bugs can be
∧
0  &lt; .ℎ); []
≥</p>
      <p>}</p>
      <p>. For each found MCD, it calculates the
MCSs on the path that reaches the last deviated condition and allows for taking the path
of the deviation.</p>
      <p>ℎ


&lt;
 1
0 .
0</p>
      <p>0
 
lse 4 4
E 
lse 1
E 
]
0

f [
I
0







] 0
0 
[ 
0 


0

1

ℎ


&lt;
 1
1 .
0</p>
      <p>1
 
lse 4 4
E 
lse 2
E 
]
1

f [
I
0







] 1
1 
[ 
0 


1

2

0
1</p>
      <p>
        2
0
1
2



traced back to improper initialization of loop control variables or an erroneous loop condition.
The program Minimum provides an example of this type of error. The error occurs due to
a falsified instruction in the loop condition (line 9) of the While loop. The correct condition
should be (i &lt; tab.length), where tab.length is the number of elements in the table tab. Using
the counterexample {[0] = 3, [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] = 2, [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] = 1, [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] = 0}, we illustrated the initial
faulty path in Figure 3 (shown in dashed lines) and the deviation for which the postcondition is
satisfiable (the deviation and the path beyond the deviated condition are displayed in dotted
lines).
      </p>
      <p>Table 2 shows the erroneous paths generated (column PATH) and the corresponding MCSs
calculated (column MCSs) for at most one deviated condition from the execution of the
counterexample. The first row pertains to the path of the counterexample, while the second row
corresponds to the path obtained by deviating the condition {2 ≤ 0.ℎ − 1}.</p>
      <p>
        LocFaults identifies a single MCS on the path of the counterexample that includes the
constraint 2 = 0[1]. This constraint arises from the instruction on line 11 in the second
iteration of the unfolded loop. When a condition is deviated, the algorithm suspects the third
condition of the unfolded loop, i.e., 2 &lt; 0.ℎ − 1. This deviation implies that we need
to execute a new iteration to satisfy the postcondition.
{ : [0[0] = 3 ∧ 0[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] = 2 ∧ 0[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] = 1 ∧ 0[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] = 0],
0 = 0[0], 0 = 1, 1 = 0[0], 1 = 0 + 1, 2 = 0[1],
2 = 1 + 1, 4 = 2, 4 = 2,   : [(0[0] ≥ 4)
∧(0[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] ≥ 4) ∧ (0[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] ≥ 4) ∧ (0[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] ≥ 4)]
{ : [0[0] = 3 ∧ 0[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] = 2 ∧ 0[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] = 1 ∧ 0[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] = 0],
0 = 0[0], 0 = 1, 1 = 0[0], 1 = 0 + 1,
2 = 0[1], 2 = 1 + 1, [¬(2 ≤ 0.ℎ − 1)]
      </p>
      <p>MCSs
{2 = 0[1]}</p>
      <p>{0 = 1},
{1 = 0 + 1},
{2 = 1 + 1}</p>
      <p>This example illustrates a case of a program with an incorrect loop. The error lies in the
stopping criterion, which prevents the program from iterating until the last element of the input
array. LocFaults, with its deviation mechanism, is capable of accurately locating this type of
error. It not only identifies suspicious instructions in the unfolded loop that were not present in
the original program, but also provides information about the iterations in which they occur.
This information could be extremely useful for programmers to identify errors in the loop.</p>
    </sec>
    <sec id="sec-4">
      <title>5. Practical experience</title>
      <p>To evaluate the scalability of our method, we compared its performance with that of BugAssist3
using a benchmark set that we created4. The benchmark set comprises various implementations
3The tool BugAssist can be accessed at http://bugassist.mpi-sws.org/.
4The source code for all programs is available at http://capv.toile-libre.org/Benchs_Mohammed.html
of BubbleSort, Sum, and SquareRoot programs, consisting of 19, 48, and 91 variations,
respectively. These programs incorporate loops, enabling us to study the scalability of our approach
compared to BugAssist. To increase the program’s complexity, we augmented the number of
loop iterations in the execution of each tool. Both LocFaults and BugAssist were subjected to
the same bound of unfolding loops.</p>
      <p>To generate the CFG and counterexample, we employed the tool CPBPV [17], which stands
for Constraint-Programming Framework for Bounded Program Verification. LocFaults and
BugAssist are designed to operate on Java and C programs, respectively. To enable a fair
comparison, we created two equivalent versions for each program:
• one version annotated with a JML specification in Java,
• another version annotated with the same specification in ACSL, using ANSI-C.
Both versions consist of an identical number of lines of instructions, including errors. The
precondition defines the counterexample used for the program.</p>
      <p>For computing the MCSs, we employed the CPLEX solvers of IBM ILOG, encompassing both
MIP and CP solvers. We have implemented the algorithm proposed by Lifiton and Sakallah [ 18].
This implementation requires as input the infeasible set of constraints that correspond to the
identified path and a bound on the size of calculated MCSs.</p>
      <p>BugAssist leverages the CBMC tool [19] to generate erroneous traces and input data. We
utilized MSUnCore2 [20] as the Max-SAT solver (used by BugAssist).</p>
      <p>The experiments were conducted on an Intel Core i7-3720QM 2.60 GHz processor with 8 GB
of RAM.
5.1. Benchmarks with loops
These benchmarks are utilized to evaluate the scalability of LocFaults in comparison to BugAssist
for programs with loops, based on the increase of unfolding . We selected three programs with
loops: BubbleSort, Sum, and SquareRoot, and introduced an Of-by-one bug in each of them.
The benchmark for each program is generated by increasing the number of unfolding , where
 represents the number of iterations through the loop in the worst case. Additionally, we vary
the number of deviated conditions for LocFaults from 0 to 3.</p>
      <p>We utilized the MIP solver of CPLEX for BubbleSort. For Sum and SquareRoot, we integrated
the two solvers of CPLEX, CP and MIP, during the localization process. Specifically, during the
collection of constraints, we employ a variable to store information on the type of CSP being
constructed. When LocFaults identifies an erroneous path 5 and before calculating MCSs, it
selects the appropriate solver based on the type of CSP associated with that path. If the CSP is
non-linear, it uses the CP OPTIMIZER solver; otherwise, it uses the MIP solver.</p>
      <p>For each benchmark, we provided an excerpt from the table containing the computation time6.
Columns P and L represent the time of pretreatment and calculation of MCSs, respectively.
5An erroneous path is one on which we identify MCSs.
6The complete tables can be found at http://www.capv.toile-libre.org/Benchs_Mohammed.html#ravb, and the sources
of these results are available at http://www.capv.toile-libre.org/Benchs_Mohammed.html#sr.
6,000
)
s
d
n
o
c
se4,000
n
i
(
s
e
m
iT2,000</p>
      <p>0</p>
      <sec id="sec-4-1">
        <title>5.1.1. BubbleSort benchmark</title>
        <p>BubbleSort is an implementation of the bubble sort algorithm. The erroneous statement in the
program causes the program to sort the input array by considering only its  − 1 first elements,
leading to incorrect results. The malfunction of BubbleSort is due to the insuficient number of
iterations performed by the loop, which is caused by the faulty initialization of the variable  as
 = .ℎ − 1; the correct instruction should be  = .ℎ.</p>
        <p>The graph in Figure 4 depicts the variation in computation times for diferent versions of
LocFaults and BugAssist, based on the number of unfoldings.</p>
        <p>LocFaults (= 0)
LocFaults (≤ 1)
LocFaults (≤ 2)
LocFaults (≤ 3)</p>
        <p>BugAssist</p>
        <p>The runtime of LocFaults and BugAssist shows exponential growth with the number of
unfoldings, with BugAssist consistently having the highest computation times. BugAssist may
not be efective for this benchmark. Among the diferent versions of LocFaults (with up to 3, 2,
1, or 0 conditions deviated), all remain usable up to a certain unfolding threshold. The number
of unfoldings at which the computation time of BugAssist becomes prohibitively high is lower
compared to LocFaults. Additionally, the computation time of LocFaults with up to 3 conditions
deviated is lower than that of LocFaults with up to 2 conditions deviated, which is also lower
than that of LocFaults with up to 1 condition deviated. The computation times of LocFaults
with up to 1 and 0 conditions deviated are nearly identical.</p>
      </sec>
      <sec id="sec-4-2">
        <title>5.1.2. SquareRoot and Sum benchmarks</title>
        <p>The SquareRoot program (refer to Figure 5) is designed to find the integer part of the square
root of the integer 50. An error is injected at line 13, resulting in the incorrect return value of
8, whereas the correct value should be 7. This program has been previously used in the paper
describing the BugAssist approach. It contains a linear numerical calculation in its loop and
non-linear calculation in its postcondition.</p>
        <p>With an unwinding limit of 50, BugAssist identifies the following suspicious instructions
for this program: {9, 10, 11, 13}. The localization time is 36.16 and the pre-treatment time is
0.12.</p>
        <p>LocFaults identifies suspicious instructions by providing their location in the program
(instruction line), as well as the line of the condition and the iteration number of the loop leading
to that instruction. For example, {9 : 2.11} indicates that the suspicious instruction is on line
11 of the program, which is inside a loop with the stop condition at line 9 and the iteration
number is 2. The sets of suspected instructions identified by LocFaults are listed in Table 3. The
pretreatment time is 0.769s. The time for exploring the CFG and calculating MCSs is 1.299s.</p>
        <p>We conducted a study of the times for LocFaults and BugAssist with values of "val" ranging
from 10 to 100 (where the number of unfoldings "b" used is equal to "val"), in order to analyze
the combinatorial behavior of each tool for this program.</p>
        <p>The Sum program receives a positive integer  from the user and calculates the value of
∑︀=1  as per the postcondition. The error in Sum lies in the condition of its loop, causing it to
calculate the sum ∑︀ =1 . The program contains linear numerical instructions
 =−11  instead of ∑︀
within the core of the loop, along with a nonlinear postcondition.</p>
        <p>The time results for the SquareRoot and Sum benchmarks are presented in Tables 4 and 5,
respectively. It is observed that the execution time of BugAssist increases rapidly, while the
times of LocFaults remain relatively constant. Furthermore, the times of LocFaults with at most
0, 1, and 2 conditions deviated are comparable to those of LocFaults with at most 3 conditions
deviated.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>6. Conclusion</title>
      <p>The LocFaults method detects suspicious subsets by analyzing the paths of the CFG to identify
the MCDs and MCSs from each MCD, utilizing constraint solvers. On the other hand, the
BugAssist method calculates the merger of MCSs by transforming the entire program into a
Boolean formula and leveraging Max-SAT solvers. Both methods start from a counterexample to
identify potential issues. In this paper, we have presented a scalability exploration of LocFaults,
with a focus on handling loops with the Of-by-one bug. The initial results indicate that LocFaults
is more efective than BugAssist for programs with loops. The execution times of BugAssist
tend to rapidly increase with the number of loop unfoldings, while LocFaults shows better
scalability in this aspect.</p>
      <p>As part of our future work, we plan to validate our results on programs with more complex
loops. We also intend to compare the performance of LocFaults with existing statistical methods.
To further enhance our tool, we are developing an interactive version that presents suspect
subsets one by one, leveraging the user’s knowledge to select the conditions that should be
deviated. Additionally, we are considering ways to extend our method to handle numerical
instructions involving calculations on floating-point
[16] M. Barnett, K. R. M. Leino, Weakest-precondition of unstructured programs, in:
Proceedings of the 6th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools
and engineering, 2005, pp. 82–87.
[17] H. Collavizza, M. Rueher, P. Van Hentenryck, Cpbpv: a constraint-programming framework
for bounded program verification, Constraints 15 (2010) 238–264.
[18] M. H. Lifiton, K. A. Sakallah, Algorithms for computing minimal unsatisfiable subsets of
constraints, Journal of Automated Reasoning 40 (2008) 1.
[19] E. Clarke, D. Kroening, F. Lerda, A tool for checking ansi-c programs, in: Tools and
Algorithms for the Construction and Analysis of Systems: 10th International Conference,
TACAS 2004, Held as Part of the Joint European Conferences on Theory and Practice of
Software, ETAPS 2004, Barcelona, Spain, March 29-April 2, 2004. Proceedings 10, Springer,
2004, pp. 168–176.
[20] J. Marques-Silva, The msuncore maxsat solver, SAT (2009) 151.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>R. N.</given-names>
            <surname>Charette</surname>
          </string-name>
          ,
          <article-title>Why software fails</article-title>
          ,
          <source>IEEE spectrum 42</source>
          (
          <year>2005</year>
          )
          <fpage>36</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Bekkouche</surname>
          </string-name>
          , Bug stories,
          <year>2015</year>
          . URL: http://www.capv.toile-libre.org/Bug_stories.html.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>W. E.</given-names>
            <surname>Wong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Gao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Abreu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Wotawa</surname>
          </string-name>
          ,
          <article-title>A survey on software fault localization</article-title>
          ,
          <source>IEEE Transactions on Software Engineering</source>
          <volume>42</volume>
          (
          <year>2016</year>
          )
          <fpage>707</fpage>
          -
          <lpage>740</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>M.</given-names>
            <surname>Bekkouche</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Collavizza</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Rueher</surname>
          </string-name>
          ,
          <article-title>Locfaults: A new flow-driven and constraintbased error localization approach</article-title>
          ,
          <source>in: Proceedings of the 30th Annual ACM Symposium on Applied Computing</source>
          ,
          <year>2015</year>
          , pp.
          <fpage>1773</fpage>
          -
          <lpage>1780</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>V. D'silva</surname>
            , D. Kroening,
            <given-names>G.</given-names>
          </string-name>
          <string-name>
            <surname>Weissenbacher</surname>
          </string-name>
          ,
          <article-title>A survey of automated techniques for formal software verification</article-title>
          ,
          <source>IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems</source>
          <volume>27</volume>
          (
          <year>2008</year>
          )
          <fpage>1165</fpage>
          -
          <lpage>1178</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J. A.</given-names>
            <surname>Jones</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. J.</given-names>
            <surname>Harrold</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Stasko</surname>
          </string-name>
          ,
          <article-title>Visualization of test information to assist fault localization</article-title>
          ,
          <source>in: Proceedings of the 24th international conference on Software engineering</source>
          ,
          <year>2002</year>
          , pp.
          <fpage>467</fpage>
          -
          <lpage>477</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>J. A.</given-names>
            <surname>Jones</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. J.</given-names>
            <surname>Harrold</surname>
          </string-name>
          ,
          <article-title>Empirical evaluation of the tarantula automatic fault-localization technique</article-title>
          ,
          <source>in: Proceedings of the 20th IEEE/ACM international Conference on Automated software engineering</source>
          ,
          <year>2005</year>
          , pp.
          <fpage>273</fpage>
          -
          <lpage>282</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>R.</given-names>
            <surname>Abreu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Zoeteweij</surname>
          </string-name>
          ,
          <string-name>
            <surname>A. J. Van Gemund</surname>
          </string-name>
          ,
          <article-title>On the accuracy of spectrum-based fault localization</article-title>
          , in: Testing:
          <article-title>Academic and industrial conference practice and research techniques-MUTATION (TAICPART-MUTATION</article-title>
          <year>2007</year>
          ), IEEE,
          <year>2007</year>
          , pp.
          <fpage>89</fpage>
          -
          <lpage>98</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>M. Y.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Kiciman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Fratkin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Fox</surname>
          </string-name>
          , E. Brewer,
          <article-title>Pinpoint: Problem determination in large, dynamic internet services</article-title>
          ,
          <source>in: Proceedings International Conference on Dependable Systems and Networks</source>
          , IEEE,
          <year>2002</year>
          , pp.
          <fpage>595</fpage>
          -
          <lpage>604</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>A.</given-names>
            <surname>Zakari</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S. P.</given-names>
            <surname>Lee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I. A. T.</given-names>
            <surname>Hashem</surname>
          </string-name>
          ,
          <article-title>A single fault localization technique based on failed test input</article-title>
          ,
          <source>Array</source>
          <volume>3</volume>
          (
          <year>2019</year>
          )
          <fpage>100008</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A.</given-names>
            <surname>Dutta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Kunal</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S. S.</given-names>
            <surname>Srivastava</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Shankar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Mall</surname>
          </string-name>
          ,
          <article-title>Ftfl: A fisher's test-based approach for fault localization</article-title>
          ,
          <source>Innovations in Systems and Software Engineering</source>
          <volume>17</volume>
          (
          <year>2021</year>
          )
          <fpage>381</fpage>
          -
          <lpage>405</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>A.</given-names>
            <surname>Majd</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Vahidi-Asl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Khalilian</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Bagheri</surname>
          </string-name>
          ,
          <article-title>Consilientsfl: using preferential voting system to generate combinatorial ranking metrics for spectrum-based fault localization</article-title>
          ,
          <source>Applied Intelligence</source>
          <volume>52</volume>
          (
          <year>2022</year>
          )
          <fpage>11068</fpage>
          -
          <lpage>11088</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Q. I. Sarhan</surname>
          </string-name>
          , Á. Beszédes, Poster:
          <article-title>Improving spectrum based fault localization for python programs using weighted code elements</article-title>
          ,
          <source>in: 2023 IEEE Conference on Software Testing, Verification and Validation (ICST)</source>
          , IEEE,
          <year>2023</year>
          , pp.
          <fpage>478</fpage>
          -
          <lpage>481</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M.</given-names>
            <surname>Jose</surname>
          </string-name>
          , R. Majumdar,
          <article-title>Cause clue clauses: error localization using maximum satisfiability</article-title>
          ,
          <source>ACM SIGPLAN Notices</source>
          <volume>46</volume>
          (
          <year>2011</year>
          )
          <fpage>437</fpage>
          -
          <lpage>446</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>M.</given-names>
            <surname>Jose</surname>
          </string-name>
          , R. Majumdar,
          <article-title>Bug-assist: Assisting fault localization in ansi-c programs</article-title>
          , in: Computer Aided Verification: 23rd International Conference, CAV 2011,
          <article-title>Snowbird</article-title>
          ,
          <string-name>
            <surname>UT</surname>
          </string-name>
          , USA, July
          <volume>14</volume>
          -
          <issue>20</issue>
          ,
          <year>2011</year>
          . Proceedings 23, Springer,
          <year>2011</year>
          , pp.
          <fpage>504</fpage>
          -
          <lpage>509</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>