Databases Reference
In-Depth Information
FIGURE 7.7: Template creation for h acquireRead , exitRead i pattern.
heap errors, and Eraser [39], which detects race conditions. Both of these
analyses have been implemented as standard uses of the Valgrind system [34].
Much attention has been given to detecting high-profile software defects in
important domains such as operating system bugs [21, 23], security bugs [41,
43], bugs in firmware [25] and errors in reliability-critical embedded systems [7,
8].
Space limitations prohibit us from reviewing a vast body of literature of
bug-finding techniques. Engler et al. are among the first to point out the need
for extracting rules to be used in bug-finding tools [15]. They employ a static
analysis approach and statistical techniques to find likely instantiations of
pattern templates such as matching function calls. Our mining technique is
not a priori limited to a particular set of pattern templates; however, it is
powerless when it comes to patterns that are never added to the repository
after the first revision.
Several projects focus on application-specific error patterns, including
SABER [37] that deals with J2EE patterns. Their work was motivated by
the desire to analyze really large Java systems such as WebSphere. Based
on the experience of IBM's developers, they have identied a range of usage
patterns in Java AWT, Swing, and EJB code and analyses created to find vi-
olations of these patterns. The Metal system [21] addresses the types of bugs
in OS code.
PQL is a language that allows one to express and enforce API usage pat-
terns [31]. PQL supports both runtime and static checking as well as a hybrid
mode when static analysis removes superfluous runtime checks to reduce the
overhead. The need to come up with useful patterns for PQL served as the
original inspiration for our work.
 
Search WWH ::




Custom Search