|
ABSTRACT
This paper describes an analysis approach based on a of static and dynamic techniques to ?nd run-time errors in Java code. It uses symbolic execution to ?nd constraints under which an error (e.g. a null pointer dereference, array out of bounds access, or assertion violation) may occur and then solves these constraints to ?nd test inputs that may expose the error. It only alerts the user to the possibility of a real error when it detects the expected exception during a program run. The analysis is customizable in two important ways. First, we can adjust how deeply to follow calls from each top-level method. Second, we can adjust the path termination tion for the symbolic execution engine to be either a bound on the path condition length or a bound on the number of times each instruction can be revisited. We evaluated the tool on a set of benchmarks from the literature as well as a number of real-world systems that range in size from a few thousand to 50,000 lines of code. The tool discovered all known errors in the benchmarks (as well as some not previously known) and reported on average 8 errors per 1000 lines of code for the industrial examples. In both cases the interprocedural call depth played little role in the error detection. That is, an intraprocedural analysis seems adequate for the class of errors we detect.
REFERENCES
Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.
| |
1
|
C. BarrettandS. Berezin. CVCLite: A new implementation of the cooperating validity checker. In R. Alur and D. A. Peled, editors, Proceedings of the International Conference on Computer Aided Verification volume 3114 of Lecture Notes in Computer Science pages 515--518. Springer-Verlag, July 2004.
|
 |
2
|
|
| |
3
|
C. Cadar and D. Engler. Execution generated test cases: how to make systems code crash itself. In Proceedings of the International SPIN Workshop on Model Checking of Software 2005.
|
| |
4
|
T. Copeland. PMD Applied Centennial Books, Nov. 2005.
|
| |
5
|
P. Cousot, R. Cousot, J. Feret, L. Mauborgne, A. Min, D. Monniaux, and X. Rival. The ASTRÉE analyser. In Proceedings of the European Symposium on Programming pages 21--30, 2005.
|
| |
6
|
Coverity, Inc. http://www.coverity.com
|
| |
7
|
|
 |
8
|
|
 |
9
|
|
 |
10
|
|
 |
11
|
Michael D. Ernst , Adam Czeisler , William G. Griswold , David Notkin, Quickly detecting relevant program invariants, Proceedings of the 22nd international conference on Software engineering, p.449-458, June 04-11, 2000, Limerick, Ireland
[doi> 10.1145/337180.337240]
|
 |
12
|
Cormac Flanagan , K. Rustan M. Leino , Mark Lillibridge , Greg Nelson , James B. Saxe , Raymie Stata, Extended static checking for Java, Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation, June 17-19, 2002, Berlin, Germany
|
| |
13
|
|
 |
14
|
|
| |
15
|
G. J. Holzmann. The Spin Model Checker Addison-Wesley, 2003.
|
 |
16
|
David Hovemeyer , William Pugh, Finding bugs is easy, Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications, October 24-28, 2004, Vancouver, BC, CANADA
[doi> 10.1145/1028664.1028717]
|
| |
17
|
S. C. Johnson. Lint, a C Program Checker BellLabs, 1978.
|
| |
18
|
R. A. Kemmerer and S. T. Eckman. UNISEX: A UNIX-based symbolic executor for Pascal. Software - Practice and Experience 15(5):439--458, 1985.
|
| |
19
|
S. Khurshid, C. S. Pasareanu, and W. Visser. Generalized symbolic execution for model checking and testing. In Proceedings of the International Conference on Tools and Algorithms for the Construction and Analysis of Systems 2003.
|
 |
20
|
|
| |
21
|
Klocwork, Inc. http://www.klocwork.com
|
 |
22
|
|
| |
23
|
|
| |
24
|
National Institute of Standards and Technology. The economic impacts of inadequate infrastructure for software testing, May 2002.
|
 |
25
|
|
| |
26
|
T. Sakaguchi. UNISEX-C: a UNIx-based Symbolic EXecutor for standard C PhD thesis, University of California, Santa Barbara, 1997.
|
| |
27
|
H. Schlenker and G. Ringwelski. POOC: A platform for object-oriented constraint programming, 2002.
|
 |
28
|
|
| |
29
|
R. Vallée-Rai, L. Hendren, V. Sundaresan, P. Lam, E. Gagnon, and P. Co. Soot -a Java optimization framework. In Proceedings of CASCON 1999 pages 125--135, 1999.
|
| |
30
|
|
| |
31
|
T. Xie, D. Marinov, W. Schulte, and D. Notkin. Symstra: A framework for generating object-oriented unit tests using symbolic execution. Proceedings of the International Conference on Tools and Algorithms for the Construction and Analysis of Systems 3440:365--381, 2005.
|
| |
32
|
|
| |
33
|
|
CITED BY 7
|
|
|
|
|
|
|
|
|
|
|
Alexey Loginov , Eran Yahav , Satish Chandra , Stephen Fink , Noam Rinetzky , Mangala Nanda, Verifying dereference safety via expanding-scope analysis, Proceedings of the 2008 international symposium on Software testing and analysis, July 20-24, 2008, Seattle, WA, USA
|
|
|
|
|
|
|
|
|
Saurabh Sinha , Hina Shah , Carsten Görg , Shujuan Jiang , Mijung Kim , Mary Jean Harrold, Fault localization and repair for Java runtime exceptions, Proceedings of the eighteenth international symposium on Software testing and analysis, July 19-23, 2009, Chicago, IL, USA
|
|