DynaMine: Finding Common Error Patterns by Mining Software Revision Histories
1. DynaMine
Finding Common Error Patterns by
Mining Software Revision Histories
Benjamin Livshits Thomas Zimmermann
Stanford University Saarland University
2. Error Pattern Iceberg
null dereferences,
buffer overruns, ...
The usual suspects
J2EE servlets
Application
specific
Device drivers Linux code
17. State Machines in Eclipse
Pretty-printing Usage pattern
o.redoAlignment()
o.enterAlignment() o.exitAlignment()
18. State Machines in Eclipse
Memory context manupilation
Not hit at runtime
OS.PmMemFlush()
OS.PmMemStart() OS.PmMemStop()
OS.PmMemCreateMC() OS.PmMemReleaseMC()
19. State Machines in JEdit
Compound edits (for undo/redo)
Usage pattern
o.insert()
o.remove()
o.beginCompoundEdit() o.endCompoundEdit()
23. Workspace Transactions
Usage pattern
S → O*
O → w.prepareOperation()
w.beginOperation()
U*
w.endOperation()
U → w.getWorkManager().beginUnprotected()
S
[w.getWorkManager().operationCanceled()]
w.getWorkManager().beginUnprotected()
24. Dynamic Validation
mine CVS rank and
revision
patterns
history mining histories filter
instrument relevant
method calls
run the application
dynamic
analysis
post-process
usage error unlikely
patterns patterns patterns
report report
reporting
patterns bugs
25. Pattern classification
post-process
v validations, e violations
usage error unlikely
patterns patterns patterns
ev/10 v/10=e=2v otherwise
26. Experiments
usage pattern
15
not hit
24
error pattern
8
unlikely
11
total 56 patterns
27. Future Work
Automatically generate state machines
Additional patterns by textual matching
Programmer assist tools
Programmers who inserted a call to open()
inserted a call to close()
Aspect Mining
28. Contibutions
DynaMine learns usage patterns from
large version archives.
DynaMine ranks patterns effectively,
especially for finding error patterns.
DynaMine increases trust in patterns by
dynamic analysis