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)