Abstract
Our goal is to develop precise and scalable verification techniques for Java programs that use collections and properties that depend on their content. We apply the popular approach of predicate abstraction to Java programs and collections. The main challenge in this context is precise and compact modeling of collections that enables practical verification. We define a predicate language for modeling the observable state of Java collections at the interface level. Changes of the state by API methods are captured by weakest preconditions. We adapt existing techniques for construction of abstract programs. Most notably, we designed optimizations based on specific features of the predicate language. We evaluated our approach on Java programs that use collections in advanced ways. Our results show that interesting properties, such as consistency between multiple collections, can be verified using our approach. The properties are specified using logic formulas that involve predicates introduced by our language.
- T. Ball, E. Bounimova, B. Cook, V. Levin, J. Lichtenberg, C. McGarvey, B. Ondrusek, S.K. Rajamani, and A. Ustuner. Thorough Static Analysis of Device Drivers. In Proceedings of EuroSys 2006, ACM. Google Scholar
Digital Library
- T. Ball, R. Majumdar, T. Millstein, and S.K. Rajamani. Automatic Predicate Abstraction of C Programs. In Proceedings of PLDI 2001, ACM. Google Scholar
Digital Library
- T. Ball, A. Podelski, and S.K. Rajamani. Boolean and Cartesian Abstraction for Model Checking C Programs. In TACAS 2001, LNCS, vol. 2031. Google Scholar
Digital Library
- M. Barnett, B.-Y. E. Chang, R. DeLine, B. Jacobs, and R. Leino. Boogie: A Modular Reusable Verifier for Object-Oriented Programs. In FMCO 2005, LNCS, vol. 4111. Google Scholar
Digital Library
- M. Barnett, R. Leino, and W. Schulte. The Spec# Programming System: An Overview. In CASSIS 2004, LNCS, vol. 3362. Google Scholar
Digital Library
- J. Berdine, C. Calcagno, B. Cook, D. Distefano, P. W. O'Hearn, T. Wies, and H. Yang. Shape Analysis for Composite Data Structures. In CAV 2007, LNCS, vol. 4590. Google Scholar
Digital Library
- J. Bingham and Z. Rakamaric. A Logic and Decision Procedure for Predicate Abstraction of Heap-Manipulating Programs. In VMCAI 2006, LNCS, vol. 3855. Google Scholar
Digital Library
- N. Blanc, A. Groce, and D. Kroening. Verifying C+ with STL Containers via Predicate Abstraction. In ASE 2007, ACM. Google Scholar
Digital Library
- A. Bouajjani, M. Bozga, P. Habermehl, R. Iosif, P. Moro, and T. Vojnar. Programs with Lists Are Counter Automata. In CAV 2006, LNCS, vol. 4144. Google Scholar
Digital Library
- A. Bouajjani, C. Dragoi, C. Enea, A. Rezine and M. Sighireanu. Invariant Synthesis for Programs Manipulating Lists with Unbounded Data. In CAV 2010, LNCS, vol. 6174. Google Scholar
Digital Library
- C. Boyapati, S. Khurshid, and D. Marinov. Korat: Automated Testing Based on Java Predicates, In ISSTA 2002, ACM. Google Scholar
Digital Library
- A.R. Bradley, Z. Manna, and H.B. Sipma. What's Decidable About Arrays?. In VMCAI 2006, LNCS, vol. 3855. Google Scholar
Digital Library
- S. Chandra, S.J. Fink, and M. Sridharan. Snugglebug: A Powerful Approach to Weakest Preconditions. In PLDI 2009, ACM. Google Scholar
Digital Library
- E.M. Clarke, O. Grumberg, S. Jha, Y. Lu, and H. Veith. Counterexample-Guided Abstraction Refinement, In CAV 2000, LNCS, vol. 1855. Google Scholar
Digital Library
- D. Cok and J. Kiniry. ESC/Java2: Uniting ESC/Java and JML, In CASSIS 2004. Google Scholar
Digital Library
- D. Dams and K. Namjoshi. Shape Analysis through Predicate Abstraction and Model Checking. In Proceedings of VMCAI 2003, LNCS, vol. 2575. Google Scholar
Digital Library
- I. Dillig, T. Dillig, and A. Aiken. Precise Reasoning for Programs Using Containers. In Proceedings of POPL 2011, ACM. Google Scholar
Digital Library
- D. Distefano and M. Parkinson. jStar: Towards Practical Verification for Java. In Proceedings of OOPSLA 2008, ACM. Google Scholar
Digital Library
- C. Flanagan, R. Leino, M. Lillibridge, G. Nelson, J.B. Saxe, and R. Stata. Extended Static Checking for Java, In Proceedings of PLDI 2002, ACM. Google Scholar
Digital Library
- C.A. Furia. What's Decidable about Sequences?. In ATVA 2010, LNCS, vol. 6252. Google Scholar
Digital Library
- S. Graf and H. Saïdi. Construction of Abstract State Graphs with PVS. In Proceedings of CAV 1997, LNCS, vol. 1254. Google Scholar
Digital Library
- M. Heizmann, J. Hoenicke, and A. Podelski. Nested interpolants. In POPL 2010, ACM. Google Scholar
Digital Library
- T.A. Henzinger, R. Jhala, R. Majumdar, and G. Sutre. Lazy Abstraction. In Proceedings of POPL 2002, ACM. Google Scholar
Digital Library
- D. Kapur, R. Majumdar, and C.G. Zarba. Interpolation for Data Structures. In Proceedings of FSE 2006, ACM. Google Scholar
Digital Library
- S. Khurshid, C.S. Pasareanu, and W. Visser. Generalized Symbolic Execution for Model Checking and Testing. In TACAS 2003, LNCS, vol. 2619. Google Scholar
Digital Library
- S. Khurshid and Y.L. Suen. Generalizing Symbolic Execution to Library Classes. In Proceedings of PASTE 2005, ACM. Google Scholar
Digital Library
- V. Kuncak, R. Piskac, P. Suter, and T. Wies. Building a Calculus of Data Structures. In VMCAI 2010, LNCS, vol. 5944. Google Scholar
Digital Library
- S.K. Lahiri and S. Qadeer. Verifying Properties of Well-Founded Linked Lists. In Proceedings of POPL 2006, ACM. Google Scholar
Digital Library
- S.K. Lahiri and S. Qadeer. Back to the Future: Revisiting Precise Program Verification Using SMT Solvers. In Proceedings of POPL 2008, ACM. Google Scholar
Digital Library
- G. Leavens, A. Baker, and C. Ruby. Preliminary Design of JML: A Behavioral Interface Specification Language for Java. ACM SIGSOFT Software Engineering Notes, 31(3), 2006. Google Scholar
Digital Library
- R. Leino. Dafny: An Automatic Program Verifier for Functional Correctness. In LPAR 2010, LNAI, vol. 6355. Google Scholar
Digital Library
- R. Madhavan and R. Komondoor. Null Dereference Verification via Over-approximated Weakest Pre-conditions Analysis. In OOPSLA 2011, ACM. Google Scholar
Digital Library
- P. Madhusudan, G. Parlato, and X. Qiu. Decidable Logics Combining Heap Structures and Data. In POPL 2011, ACM. Google Scholar
Digital Library
- J. McCarthy. A Basis for a Mathematical Theory of Computation, Technical report, MIT, Cambridge, MA, USA, 1962. Google Scholar
Digital Library
- K. McMillan. Lazy Abstraction with Interpolants. In CAV 2006, LNCS, vol. 4144. Google Scholar
Digital Library
- L. de Moura and N. Bjorner. Z3: An Efficient SMT Solver. In Proceedings of TACAS 2008, LNCS, vol. 4963. Google Scholar
Digital Library
- A. Podelski and T. Wies. Boolean Heaps. In SAS 2005, LNCS, vol. 3672. Google Scholar
Digital Library
- S. Ranise and C. Tinelli. The SMT-LIB standard, version 1.2, August 2006.Google Scholar
- W. Visser, C.S. Pasareanu, and S. Khurshid. Test Input Generation with Java PathFinder, In ISSTA 2004, ACM. Google Scholar
Digital Library
- K. Zee, V. Kuncak, and M. Rinard. Full Functional Verification of Linked Data Structures. In PLDI 2008, ACM. Google Scholar
Digital Library
- K. Zee, V. Kuncak, and M. Rinard. An Integrated Proof Language for Imperative Programs. In PLDI 2009, ACM. Google Scholar
Digital Library
- ASM: Java bytecode manipulation and analysis framework. http://asm.ow2.org/.Google Scholar
- J2BP tool for predicate abstraction of Java programs. http://plg.uwaterloo.ca/~pparizek/j2bp/.Google Scholar
- Java Pathfinder system for verification of Java programs. http://babelfish.arc.nasa.gov/trac/jpf/.Google Scholar
- SMT-LIB Format for Finite Lists, Sets, and Maps. http://www.cprover.org/SMT-LIB-LSM/.Google Scholar
- T.J. Watson Libraries for Analysis (WALA). http://wala.sourceforge.net/.Google Scholar
- Yices: An SMT solver. http://yices.csl.sri.com/.Google Scholar
Index Terms
Predicate abstraction of Java programs with collections
Recommendations
Empirical Study of Usage and Performance of Java Collections
ICPE '17: Proceedings of the 8th ACM/SPEC on International Conference on Performance EngineeringCollection data structures have a major impact on the performance of applications, especially in languages such as Java, C#, or C++. This requires a developer to select an appropriate collection from a large set of possibilities, including different ...
Predicate abstraction of Java programs with collections
OOPSLA '12: Proceedings of the ACM international conference on Object oriented programming systems languages and applicationsOur goal is to develop precise and scalable verification techniques for Java programs that use collections and properties that depend on their content. We apply the popular approach of predicate abstraction to Java programs and collections. The main ...
Combining Theorem Proving with Model Checking through Predicate Abstraction
This article presents a procedure for proving invariants of infinite-state reactive systems using a combination of two formal verification techniques: theorem proving and model checking. This method uses term rewriting on the definition of the target ...







Comments