|
ABSTRACT
We present an approach for checking code against rich specifications, based on existing work that consists of encoding the program in a relational logic and using a constraint solver to find specification violations. We improve the efficiency of this approach with a new encoding of the program that effectively slices it at the logical level with respect to the specification. We also present new encodings for integer values and arrays, enabling the verification of realistic fragments of code that manipulate both. Our technique can handle integers of much larger ranges than previously possible, and permits large sparse arrays to be handled efficiently. We present a soundness proof for our slicing algorithm and a general condition under which relational formulae may be sliced. We implemented our technique and evaluated it by checking data structure invariants of several classes taken from the Java Collections Framework. We also checked for violations of Java's equality contract in a variety of open-source programs, and found several bugs.
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
|
Spin model checker. http://spinroot.com/spin/whatispin.html.
|
 |
2
|
|
| |
3
|
|
 |
4
|
|
| |
5
|
|
 |
6
|
James C. Corbett , Matthew B. Dwyer , John Hatcliff , Shawn Laubach , Corina S. Păsăreanu , Robby , Hongjun Zheng, Bandera: extracting finite-state models from Java source code, Proceedings of the 22nd international conference on Software engineering, p.439-448, June 04-11, 2000, Limerick, Ireland
[doi> 10.1145/337180.337234]
|
 |
7
|
|
 |
8
|
Paul T. Darga , Chandrasekhar Boyapati, Efficient software model checking of data structure properties, Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications, October 22-26, 2006, Portland, Oregon, USA
|
 |
9
|
|
| |
10
|
Java equals() and compareto() contracts. http://java.sun.com/j2se/1.5.0/docs/api/java/lang/package-summary.html.
|
 |
11
|
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
|
| |
12
|
Grammatech, I. Codesurfer. http://www.grammatech.com/products/codesurfer/index.html.
|
| |
13
|
|
| |
14
|
|
| |
15
|
Constance Heitmeyer , James Kirby, Jr. , Bruce Labaw , Myla Archer , Ramesh Bharadwaj, Using Abstraction and Model Checking to Detect Safety Violations in Requirements Specifications, IEEE Transactions on Software Engineering, v.24 n.11, p.927-948, November 1998
[doi> 10.1109/32.730543]
|
 |
16
|
Thomas A. Henzinger , Ranjit Jhala , Rupak Majumdar , Grégoire Sutre, Lazy abstraction, Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages, p.58-70, January 16-18, 2002, Portland, Oregon
|
 |
17
|
|
 |
18
|
|
 |
19
|
|
 |
20
|
|
| |
21
|
Khurshid, S., Pasareanu, C., and Visser, W. Generalized symbolic execution for model checking and testing. In TACAS'03: Proceedings of the International Conference on Tools and Algorithms for the Construction and Analysis of Systems (2003).
|
| |
22
|
|
| |
23
|
|
| |
24
|
|
| |
25
|
Millett, L. I., and Teitelbaum, T. Slicing Promela and its applications to model checking. In Proceedings of the 4th International SPIN Workshop (1998).
|
| |
26
|
|
| |
27
|
Tip, F. A survey of program slicing techniques. Journal of Programming Languages 3, 3 (1995), 121--189.
|
| |
28
|
Torlak, E., and Jackson, D. Kodkod: A relational model finder. In TACAS'07: Proceedings of the International Conference on Tools and Algorithms for the Construction and Analysis of Systems (2007).
|
| |
29
|
|
| |
30
|
Raja Vallée-Rai , Phong Co , Etienne Gagnon , Laurie Hendren , Patrick Lam , Vijay Sundaresan, Soot - a Java bytecode optimization framework, Proceedings of the 1999 conference of the Centre for Advanced Studies on Collaborative research, p.13, November 08-11, 1999, Mississauga, Ontario, Canada
|
| |
31
|
Vaziri, M., and Jackson, D. Checking properties of heap-manipulating procedures with a constraint solver. In TACAS'03: Proceedings of the International Conference on Tools and Algorithms for the Construction and Analysis of Systems (2003).
|
| |
32
|
Vaziri, M., Tip, F., Fink, S., and Dolby, J. Declarative object identity using relation types. In ECOOP'07: Proceedings of the European Conference on Object-Oriented Programming (2007), pp. 54--78.
|
| |
33
|
|
| |
34
|
Watson Libraries for Analysis (WALA). http://wala.sourceforge.net/.
|
 |
35
|
|
CITED BY 4
|
|
|
|
|
|
|
|
Derek Rayside , Zev Benjamin , Rishabh Singh , Joseph P. Near , Aleksandar Milicevic , Daniel Jackson, Equality and hashing for (almost) free: Generating implementations from abstraction functions, Proceedings of the 2009 IEEE 31st International Conference on Software Engineering, p.342-352, May 16-24, 2009
|
|
|
|
|