skip to main content
10.1145/2384616.2384623acmconferencesArticle/Chapter ViewAbstractPublication PagessplashConference Proceedingsconference-collections
research-article

Predicate abstraction of Java programs with collections

Published: 19 October 2012 Publication History

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.

References

[1]
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.
[2]
T. Ball, R. Majumdar, T. Millstein, and S.K. Rajamani. Automatic Predicate Abstraction of C Programs. In Proceedings of PLDI 2001, ACM.
[3]
T. Ball, A. Podelski, and S.K. Rajamani. Boolean and Cartesian Abstraction for Model Checking C Programs. In TACAS 2001, LNCS, vol. 2031.
[4]
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.
[5]
M. Barnett, R. Leino, and W. Schulte. The Spec# Programming System: An Overview. In CASSIS 2004, LNCS, vol. 3362.
[6]
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.
[7]
J. Bingham and Z. Rakamaric. A Logic and Decision Procedure for Predicate Abstraction of Heap-Manipulating Programs. In VMCAI 2006, LNCS, vol. 3855.
[8]
N. Blanc, A. Groce, and D. Kroening. Verifying C+ with STL Containers via Predicate Abstraction. In ASE 2007, ACM.
[9]
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.
[10]
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.
[11]
C. Boyapati, S. Khurshid, and D. Marinov. Korat: Automated Testing Based on Java Predicates, In ISSTA 2002, ACM.
[12]
A.R. Bradley, Z. Manna, and H.B. Sipma. What's Decidable About Arrays?. In VMCAI 2006, LNCS, vol. 3855.
[13]
S. Chandra, S.J. Fink, and M. Sridharan. Snugglebug: A Powerful Approach to Weakest Preconditions. In PLDI 2009, ACM.
[14]
E.M. Clarke, O. Grumberg, S. Jha, Y. Lu, and H. Veith. Counterexample-Guided Abstraction Refinement, In CAV 2000, LNCS, vol. 1855.
[15]
D. Cok and J. Kiniry. ESC/Java2: Uniting ESC/Java and JML, In CASSIS 2004.
[16]
D. Dams and K. Namjoshi. Shape Analysis through Predicate Abstraction and Model Checking. In Proceedings of VMCAI 2003, LNCS, vol. 2575.
[17]
I. Dillig, T. Dillig, and A. Aiken. Precise Reasoning for Programs Using Containers. In Proceedings of POPL 2011, ACM.
[18]
D. Distefano and M. Parkinson. jStar: Towards Practical Verification for Java. In Proceedings of OOPSLA 2008, ACM.
[19]
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.
[20]
C.A. Furia. What's Decidable about Sequences?. In ATVA 2010, LNCS, vol. 6252.
[21]
S. Graf and H. Saïdi. Construction of Abstract State Graphs with PVS. In Proceedings of CAV 1997, LNCS, vol. 1254.
[22]
M. Heizmann, J. Hoenicke, and A. Podelski. Nested interpolants. In POPL 2010, ACM.
[23]
T.A. Henzinger, R. Jhala, R. Majumdar, and G. Sutre. Lazy Abstraction. In Proceedings of POPL 2002, ACM.
[24]
D. Kapur, R. Majumdar, and C.G. Zarba. Interpolation for Data Structures. In Proceedings of FSE 2006, ACM.
[25]
S. Khurshid, C.S. Pasareanu, and W. Visser. Generalized Symbolic Execution for Model Checking and Testing. In TACAS 2003, LNCS, vol. 2619.
[26]
S. Khurshid and Y.L. Suen. Generalizing Symbolic Execution to Library Classes. In Proceedings of PASTE 2005, ACM.
[27]
V. Kuncak, R. Piskac, P. Suter, and T. Wies. Building a Calculus of Data Structures. In VMCAI 2010, LNCS, vol. 5944.
[28]
S.K. Lahiri and S. Qadeer. Verifying Properties of Well-Founded Linked Lists. In Proceedings of POPL 2006, ACM.
[29]
S.K. Lahiri and S. Qadeer. Back to the Future: Revisiting Precise Program Verification Using SMT Solvers. In Proceedings of POPL 2008, ACM.
[30]
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.
[31]
R. Leino. Dafny: An Automatic Program Verifier for Functional Correctness. In LPAR 2010, LNAI, vol. 6355.
[32]
R. Madhavan and R. Komondoor. Null Dereference Verification via Over-approximated Weakest Pre-conditions Analysis. In OOPSLA 2011, ACM.
[33]
P. Madhusudan, G. Parlato, and X. Qiu. Decidable Logics Combining Heap Structures and Data. In POPL 2011, ACM.
[34]
J. McCarthy. A Basis for a Mathematical Theory of Computation, Technical report, MIT, Cambridge, MA, USA, 1962.
[35]
K. McMillan. Lazy Abstraction with Interpolants. In CAV 2006, LNCS, vol. 4144.
[36]
L. de Moura and N. Bjorner. Z3: An Efficient SMT Solver. In Proceedings of TACAS 2008, LNCS, vol. 4963.
[37]
A. Podelski and T. Wies. Boolean Heaps. In SAS 2005, LNCS, vol. 3672.
[38]
S. Ranise and C. Tinelli. The SMT-LIB standard, version 1.2, August 2006.
[39]
W. Visser, C.S. Pasareanu, and S. Khurshid. Test Input Generation with Java PathFinder, In ISSTA 2004, ACM.
[40]
K. Zee, V. Kuncak, and M. Rinard. Full Functional Verification of Linked Data Structures. In PLDI 2008, ACM.
[41]
K. Zee, V. Kuncak, and M. Rinard. An Integrated Proof Language for Imperative Programs. In PLDI 2009, ACM.
[42]
ASM: Java bytecode manipulation and analysis framework. http://asm.ow2.org/.
[43]
J2BP tool for predicate abstraction of Java programs. http://plg.uwaterloo.ca/~pparizek/j2bp/.
[44]
Java Pathfinder system for verification of Java programs. http://babelfish.arc.nasa.gov/trac/jpf/.
[45]
SMT-LIB Format for Finite Lists, Sets, and Maps. http://www.cprover.org/SMT-LIB-LSM/.
[46]
T.J. Watson Libraries for Analysis (WALA). http://wala.sourceforge.net/.
[47]
Yices: An SMT solver. http://yices.csl.sri.com/.

Cited By

View all
  • (2023)Requirements‐related fault prevention during the transformation from formal specifications to programsIET Software10.1049/sfw2.1212617:3(316-332)Online publication date: 15-May-2023
  • (2018)Towards Model Checking Android ApplicationsIEEE Transactions on Software Engineering10.1109/TSE.2017.269784844:6(595-612)Online publication date: 1-Jun-2018
  • (2016)From Low-Level Pointers to High-Level ContainersProceedings of the 17th International Conference on Verification, Model Checking, and Abstract Interpretation - Volume 958310.1007/978-3-662-49122-5_21(431-452)Online publication date: 17-Jan-2016
  • Show More Cited By

Recommendations

Comments

Information & Contributors

Information

Published In

cover image ACM Conferences
OOPSLA '12: Proceedings of the ACM international conference on Object oriented programming systems languages and applications
October 2012
1052 pages
ISBN:9781450315616
DOI:10.1145/2384616
  • cover image ACM SIGPLAN Notices
    ACM SIGPLAN Notices  Volume 47, Issue 10
    OOPSLA '12
    October 2012
    1011 pages
    ISSN:0362-1340
    EISSN:1558-1160
    DOI:10.1145/2398857
    Issue’s Table of Contents
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

Sponsors

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 19 October 2012

Permissions

Request permissions for this article.

Check for updates

Author Tags

  1. Java
  2. collections
  3. predicate abstraction

Qualifiers

  • Research-article

Conference

SPLASH '12
Sponsor:

Acceptance Rates

Overall Acceptance Rate 268 of 1,244 submissions, 22%

Upcoming Conference

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)6
  • Downloads (Last 6 weeks)0
Reflects downloads up to 30 Jan 2025

Other Metrics

Citations

Cited By

View all
  • (2023)Requirements‐related fault prevention during the transformation from formal specifications to programsIET Software10.1049/sfw2.1212617:3(316-332)Online publication date: 15-May-2023
  • (2018)Towards Model Checking Android ApplicationsIEEE Transactions on Software Engineering10.1109/TSE.2017.269784844:6(595-612)Online publication date: 1-Jun-2018
  • (2016)From Low-Level Pointers to High-Level ContainersProceedings of the 17th International Conference on Verification, Model Checking, and Abstract Interpretation - Volume 958310.1007/978-3-662-49122-5_21(431-452)Online publication date: 17-Jan-2016
  • (2016)Predator Shape Analysis Tool SuiteHardware and Software: Verification and Testing10.1007/978-3-319-49052-6_13(202-209)Online publication date: 1-Nov-2016
  • (2015)TLV: abstraction through testing, learning, and validationProceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering10.1145/2786805.2786817(698-709)Online publication date: 30-Aug-2015
  • (2015)Two techniques to improve the precision of a demand-driven null-dereference verification approachScience of Computer Programming10.1016/j.scico.2014.09.00698:P4(645-679)Online publication date: 1-Feb-2015
  • (2015)PANDA: Simultaneous Predicate Abstraction and Concrete ExecutionHardware and Software: Verification and Testing10.1007/978-3-319-26287-1_6(87-103)Online publication date: 28-Nov-2015
  • (2020)Towards transparency-encouraging partial software disclosure to enable trust in data usageProceedings of the 35th IEEE/ACM International Conference on Automated Software Engineering10.1145/3324884.3415282(1167-1169)Online publication date: 21-Dec-2020
  • (2016)From Low-Level Pointers to High-Level ContainersProceedings of the 17th International Conference on Verification, Model Checking, and Abstract Interpretation - Volume 958310.1007/978-3-662-49122-5_21(431-452)Online publication date: 17-Jan-2016

View Options

Login options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Figures

Tables

Media

Share

Share

Share this Publication link

Share on social media