jStar: making java verification practical

Lead Research Organisation: University of Cambridge
Department Name: Computer Science and Technology

Abstract

Software is unreliable. This is a serious problem for modern society. We are in contact with software everyday, but this software often contains critical bugs. Currently, operating systems are susceptible to viruses, and commercial software packages are sold with disclaimers not guarantees. To address this, we need to develop practical verfication methods for real-world programming languages. This is about giving a mathematical specification of what the software should do, and guaranteeing the implementation meets this specification. This proposal focusses on verifying object-oriented programs. The most prominent approaches to object-oriented verification, Boogie and ESC, suffer two major problems. First, their specifications are verbose, in fact sometimes longer than the code. The reason for this is that they only support limited modularity and require redundant annotations, like many loop invariants. Secondly, their specifications are weak since they cannot express functional correctness. The problem here is that although the mantra ``say less to do more'' is alluring in the context of software specification, unfortunately, it does not work for realistic examples, or even just common design patterns. Here, we propose the following novel combination of ideas, which make practical verification for Java possible: * A separation Logic based specification language for OO giving powerful modularity. * Automatic theorem proving for substructural logics which integrates with existing theorem provers for classical logic, e.g. SMT solvers; HOL; etc. * A proof theoretic approach to abstract interpretation, which allows redundant annotations to be inferred and boost abstract interpretation to coverage of full functional correctness properties. Furthermore, we propose that all these concepts can be realised together in a unified prover/abstracter architecture.

Publications

10 25 50

publication icon
Botincan M (2012) Resource-sensitive synchronization inference by abduction in ACM SIGPLAN Notices

publication icon
Botincan M (2013) Proof-Directed Parallelization Synthesis by Separation Logic in ACM Transactions on Programming Languages and Systems

publication icon
Da Rocha Pinto P (2011) A simple abstraction for complex concurrent indexes in ACM SIGPLAN Notices

publication icon
Dodds M (2016) Verifying Custom Synchronization Constructs Using Higher-Order Separation Logic in ACM Transactions on Programming Languages and Systems

publication icon
Dodds M (2011) Modular reasoning for deterministic parallelism in ACM SIGPLAN Notices

publication icon
Naudziuniene D (2011) jStar-eclipse

 
Description Software is unreliable. This is a serious problem for modern society. We are in contact with software everyday, but this software often contains critical bugs. Currently, operating systems are susceptible to viruses, and commercial software packages are sold with disclaimers not guarantees. To address this, we need to develop practical verification methods for real-world programming languages. This is about giving a mathematical specification of what the software should do, and guaranteeing the implementation meets this specification.



This proposal focusses on verifying object-oriented programs. The most prominent approaches to object-oriented verification, Boogie and ESC, suffer two major problems. First, their specifications are verbose, in fact sometimes longer than the code. The reason for this is that they only support limited modularity and require redundant annotations, like many loop invariants. Secondly, their specifications are weak since they cannot express functional correctness. The problem here is that although the mantra "say less to do more" is alluring in the context of software specification, unfortunately, it does not work for realistic examples, or even just common design patterns.



Our approach combines the following novel combination of ideas, which make practical verification for Java possible:



* A separation Logic based specification language for OO giving powerful modularity.

* Automatic theorem proving for substructural logics which integrates with existing theorem provers for classical logic, e.g. SMT solvers; HOL; etc.

* A proof theoretic approach to abstract interpretation, which allows redundant annotations to be inferred and boost abstract interpretation to coverage of full functional correctness properties.



These concepts have been realised together in a unified prover/abstracter architecture called jStar.



We have developed jStar into a generic framework that allows easy experimentation and quick prototyping. Using jStar, we have verified both sequential and concurrent programs. We have developed new techniques aimed at extending jStar to complex concurrent programs. We have used jStar to synthesise programs, as well as verifying them. Finally, we have developed jStar so that it integrates with existing solvers, allowing us to interoperate straightforwardly with existing proof tools.

[Copied from Final Report]
Exploitation Route Use software produced by project and read papers.
Sectors Aerospace, Defence and Marine,Digital/Communication/Information Technologies (including Software)

URL http://jstarverifier.org/
 
Description Others have used software produced by jStar and read the papers.
First Year Of Impact 2004
Sector Aerospace, Defence and Marine,Digital/Communication/Information Technologies (including Software)