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.
Organisations
Publications
Botincan M
(2011)
Safe asynchronous multicore memory operations
Botincan M
(2012)
Resource-sensitive synchronization inference by abduction
in ACM SIGPLAN Notices
Botincan M
(2013)
Proof-Directed Parallelization Synthesis by Separation Logic
in ACM Transactions on Programming Languages and Systems
Da Rocha Pinto P
(2011)
A simple abstraction for complex concurrent indexes
Da Rocha Pinto P
(2011)
A simple abstraction for complex concurrent indexes
in ACM SIGPLAN Notices
Dodds M
(2016)
Verifying Custom Synchronization Constructs Using Higher-Order Separation Logic
in ACM Transactions on Programming Languages and Systems
Dodds M
(2011)
Modular reasoning for deterministic parallelism
in ACM SIGPLAN Notices
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) |