Databases Reference
In-Depth Information
7.5.2
Discussion of the Results :::::::::::::::::::::::::::::::::::::::::: 219
7.5.2.1
Matching Method Pairs :::::::::::::::::::::::::::::::::: 219
7.5.2.2
State Machines ::::::::::::::::::::::::::::::::::::::::::: 222
7.5.2.3
More Complex Patterns ::::::::::::::::::::::::::::::::: 224
7.6
Design Decisions :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 226
7.6.1
Static versus Dynamic Analysis ::::::::::::::::::::::::::::::::::: 226
7.6.2
Amount of User Involvement :::::::::::::::::::::::::::::::::::::: 228
7.6.3
Granularity of Mined Information :::::::::::::::::::::::::::::::: 228
7.7
Extensions ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 229
7.8
Related Work ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 230
7.8.1
Revision History Mining :::::::::::::::::::::::::::::::::::::::::: 232
7.8.2
Model Extraction :::::::::::::::::::::::::::::::::::::::::::::::::: 232
7.9
Conclusions :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 233
Bibliography ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 234
7.1 Introduction
A great deal of attention has been given lately to addressing application-
specific software bugs such as errors in operating system drivers [4,14], security
errors [24, 43], or errors in reliability-critical embedded software in domains
like avionics [7, 8]. These represent critical errors in widely used software and
tend to get fixed relatively quickly when found. A variety of static and dynamic
analysis tools have been developed to address these high-profile bugs.
However, many other errors are specific to individual applications or plat-
forms. This is especially true when it comes to extensible development plat-
forms such as J2EE, .NET, and others that have a variety of programmers at
all skill levels writing code to use the same sets of APIs. Violations of these
application-specific coding rules, referred to as error patterns, are responsible
for a multitude of errors. Error patterns tend to be re-introduced into the code
over and over by multiple developers working on a project and are a common
source of software defects. While each pattern may be only responsible for a
few bugs in a given project snapshot, when taken together over the project's
lifetime, the detrimental effect of these error patterns is quite serious and they
can hardly be ignored in the long term if software quality is to be expected.
However, finding the error patterns to look for with a particular static
or dynamic analysis tool is often dicult, especially when it comes to legacy
code, where error patterns either are recoded as comments in the code or
not documented at all [15]. Moreover, while well-aware of certain types of
behavior that cause the application to crash or well-publicized types of bugs
such as buffer overruns, programmers often have diculty formalizing or even
expressing API invariants. In addition to a handful of patterns that can be
 
Search WWH ::




Custom Search