Identifying
the Buggy Locations in a Program
Software fault localization
involves locating the exact cause of error for a "failing" execution run
– a run which exhibits an unexpected behavior. We have proposed
several methods for identifying the cause of error, which are based on
execution tracing and analysis. Our key contributions are:
-
Dynamic Slicing:
Dynamic slicing finds out statements in the buggy program which
affected the unexpected behavior during the failing execution run,
via dynamic control or data dependencies. It is performed on an
execution trace to detect dynamic control and data dependencies. In
practice, execution traces maybe be too huge to fit into the
memory. We have proposed a method which can collect, store, and
analyze (for slicing) an execution trace all in compressed form.
Initial experiments show that our method is efficient in both time
and space.
Check out our Jslice dynamic
slicing tool for Java programs.
-
Distance Metric
Evaluation: The fault localization is done by comparing the
"failing" execution run with one that does not exhibits the
erroneous behavior ("successful" run). Furthermore, a decision shall
be made to choose a particular "successful" run among a large pool
of such runs. We have been studying a metric based on the "distance"
between a "failing" run and a "successful" run, which can be used to
both select a "nearest" successful run to a failing run and locate
the buggy statement.
-
Automated Path
Generation: When fault localization is proceeded by comparing
the "failing" run with some "successful" run, an issue here is to
generate or choose a suitable successful run; this task is often
left to the programmer. We have proposed an efficient technique
where the construction of the successful run as well its comparison
with the failing run is automated. Our method constructs a
successful program run by toggling the outcomes of some conditional
branch instances in the failing run. If such a successful run
exists, program statements for these branches are returned as bug
report.
People
Involved:
Abhik Roychoudhury
Tao Wang
Liang Guo
Current
Work:
Here is a list of related
publications.
Tools Used:
Jslice ( dynamic slicing
tool for Java programs)
Codesurfer (used under Academic program)