Databases Reference
In-Depth Information
learning algorithm has a high computational cost, whereas our algorithm
scales better to larger traces than theirs.
Whaley et al. proposed a static and a dynamic approach for inferring
what protocols clients of a Java class must follow [81]. The protocols their
approach found are mainly typestate properties that involve one component
and are small. In contrast, our approach is able to discover useful properties
involving more than one component. In addition, our chaining method is able
to construct large finite state machines eciently.
Cook et al. developed a statistical dynamic analysis for extracting thread
synchronization models from a program's execution traces [13]. Our work dif-
fers from theirs in that our approach focuses on detecting API rules and
assumes the trace already has the thread information.
Reiss and Renieris developed a technique to compact large volumes of
execution traces [69]. Their tool uses the sequencing properties on individual
objects, while Perracotta detects rules across multiple objects.
DynaMine extracts error patterns from a system's CVS revision histories
and dynamically validates inferred patterns [58]. This approach is complemen-
tary to our work in that examining a CVS history is a way to select events
to monitor at run-time. Their mining algorithm has to filter out a fixed set
of frequent events to scale to large scenarios, which is not as general as our
heuristics. The patterns their approach infers tend to focus only on methods
within a class, whereas our approach can infer properties involving more than
one class.
8.5.3 Use of Inferred Specifications
This section presents related work on using the inferred specifications to
improve a variety of software development activities, including defect detection
[11, 16, 17, 24, 28, 30, 37, 38, 58, 62, 66, 79, 81], test case generation [17, 39, 83],
program evolution [26], program understanding [13, 59], theorem proving [82],
bug localization [56], and data structure repairing at runtime [20].
8.5.3.1
Defect Detection
Defect detection is the application to which inferred specifications are most
widely applied. We can further divide the related work into several groups:
using a separate verification tool [28, 37, 58, 62, 81], statistical defect detection
[11, 24, 38, 79], context-free language reachability analysis [30, 66], combining
static analysis and test generation [16, 17].
The work in the first group simply feeds the inferred properties to a sepa-
rate program verification tool [28, 37, 58, 62, 81]. This is similar to our work on
checking the inferred properties using Java PathFinder and ESP. The benefits
of such an approach are that inferred specifications can be easily checked by
different verification tools.
 
Search WWH ::




Custom Search