A Lightweight Technique for Distributed and Incremental Program Verification

Applying automated verification to industrial code bases creates a significant computational task even when the individual conditions to be checked are trivial. This affects the wall clock time taken to verify the program and has knock-on effects on how the tools are used and on project management. In this paper a simple and lightweight technique for adding incremental and distributed capabilities to a program verification system is given. Experiments with an implementation of the technique for the SPARK tool set show that it can yield an average 29 fold speed increase in incremental use and near optimal speedup in distributed use. Critically, this gives a qualitative change in how automated verification is used in a large commercial project.

[1]  Daniel Kroening,et al.  A Survey of Automated Techniques for Formal Software Verification , 2008, IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems.

[2]  Andrey Rybalchenko,et al.  Distributed and Predictable Software Model Checking , 2011, VMCAI.

[3]  L. D. Moura,et al.  The YICES SMT Solver , 2006 .

[4]  Michael Eichberg,et al.  Automatic Incrementalization of Prolog Based Static Analyses , 2007, PADL.

[5]  Nachum Dershowitz,et al.  Verification: Theory and Practice , 2004, Lecture Notes in Computer Science.

[6]  Rajeev Alur,et al.  A Temporal Logic of Nested Calls and Returns , 2004, TACAS.

[7]  François Bobot,et al.  Why3: Shepherd Your Herd of Provers , 2011 .

[8]  David Aspinall,et al.  Formalising Java's Data Race Free Guarantee , 2007, TPHOLs.

[9]  Mark A. Hillebrand,et al.  VCC: A Practical System for Verifying Concurrent C , 2009, TPHOLs.

[10]  K. Rustan M. Leino,et al.  Dafny: An Automatic Program Verifier for Functional Correctness , 2010, LPAR.

[11]  Paul B. Jackson,et al.  Proving SPARK Verification Conditions with SMT Solvers , 2009 .

[12]  Kousha Etessami,et al.  Analysis of Recursive Game Graphs Using Data Flow Equations , 2004, VMCAI.

[13]  Albert L. Baker,et al.  Preliminary design of JML: a behavioral interface specification language for java , 2006, SOEN.

[14]  Patrice Chalin,et al.  Faster and More Complete Extended Static Checking for the Java Modeling Language , 2010, Journal of Automated Reasoning.

[15]  David A. Patterson,et al.  Computer Architecture, Fifth Edition: A Quantitative Approach , 2011 .

[16]  David A. Patterson,et al.  Computer Architecture: A Quantitative Approach , 1969 .

[17]  Fernando Gustavo Tinetti,et al.  Computer Architecture: A Quantitative Approach J. L. Hennessy, D. A. Patterson Morgan Kaufman, 4th Edition, 2007 , 2008 .

[18]  Nicholas Carriero,et al.  Parallel Programming in Linda , 1985, ICPP.

[19]  Patrice Chalin,et al.  ESC4: a modern caching ESC for Java , 2009, SAVCBS '09.

[20]  Stefan Berghofer Verification of Dependable Software using SPARK and Isabelle , 2011, SSV.

[21]  Shuvendu K. Lahiri,et al.  Static and Precise Detection of Concurrency Errors in Systems Code Using SMT Solvers , 2009, CAV.

[22]  Stephen A. Edwards,et al.  Incremental Algorithms for Inter-procedural Analysis of Safety Properties , 2005, CAV.

[23]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.

[24]  Bernard Carré,et al.  Information-flow and data-flow analysis of while-programs , 1985, TOPL.

[25]  Yannick Moy Automatic modular static safety checking for C programs , 2009 .

[26]  John G. P. Barnes,et al.  High Integrity Software - The SPARK Approach to Safety and Security , 2003 .

[27]  C. Tinelli,et al.  The SMT-LIB Format: An Initial Proposal , 2003 .

[28]  Thomas A. Henzinger,et al.  Extreme Model Checking , 2003, Verification: Theory and Practice.

[29]  Frank Wolter,et al.  Monodic fragments of first-order temporal logics: 2000-2001 A.D , 2001, LPAR.

[30]  Jérôme Guitton,et al.  Why Hi-Lite Ada? , 2011 .

[31]  Claude Marché,et al.  The Why/Krakatoa/Caduceus Platform for Deductive Program Verification , 2007, CAV.