Program Checking with Certificates: Separating Correctness-Critical Code

We introduce program checking with certificates by extending the traditional notion of black-box program checking. Moreover, we establish program checking with certificates as a safety-scalable and practical method to ensure the correctness of real-scale applications. We motivate our extension of program checking with concepts of computational complexity theory and show its practical implication on the implementation and verification of checkers. Furthermore, we present an iterative method to construct checkers which is able to deal with the practically relevant problem of incomplete or missing specifications of software. In our case study, we have considered compilers and their generators, in particular code generators based on rewrite systems.

[1]  Thilo S. Gaul,et al.  Practical Construction of Correct Compiler Implementations by Runtime Result Verification , 2000 .

[2]  Thilo S. Gaul,et al.  AJACS: Applying Java to Automotive Control Systems , 2001 .

[3]  Alfred V. Aho,et al.  Code Generation for Expressions with Common Subexpressions , 1977, J. ACM.

[4]  Wolf Zimmermann,et al.  Construction of Veriied Software Systems with Program-checking: an Application to Compiler Back-ends , 1999 .

[5]  Joost-Pieter Katoen,et al.  Code generation based on formal BURS theory and heuristic search , 1997, Acta Informatica.

[6]  George C. Necula,et al.  Translation validation for an optimizing compiler , 2000, PLDI '00.

[7]  Mark N. Wegman,et al.  Efficiently computing static single assignment form and the control dependence graph , 1991, TOPL.

[8]  Bertrand Meyer,et al.  Object-Oriented Software Construction, 2nd Edition , 1997 .

[9]  Ron Cytron,et al.  Efficiently computing Φ-nodes on-the-fly , 1993, TOPL.

[10]  George C. Necula,et al.  Oracle-based checking of untrusted software , 2001, POPL '01.

[11]  Manuel Blum,et al.  Designing programs that check their work , 1989, STOC '89.

[12]  Amir Pnueli,et al.  Translation Validation , 1998, TACAS.

[13]  Gerhard Goos,et al.  Construction of Verified Compiler Front-Ends with Program-Checking , 1999, Ershov Memorial Conference.

[14]  George C. Necula,et al.  The design and implementation of a certifying compiler , 1998, PLDI.

[15]  Amir Pnueli,et al.  The Code Validation Tool (CVT) , 1998, International Journal on Software Tools for Technology Transfer (STTT).

[16]  Manuel Blum,et al.  Self-testing/correcting with applications to numerical problems , 1990, STOC '90.

[17]  Eric Charton,et al.  AJACS : APPLYING JAVA TO AUTOMOTIVE CONTROL SYSTEMS , 2004 .

[18]  George C. Necula,et al.  A certifying compiler for Java , 2000, PLDI '00.

[19]  Amir Pnueli,et al.  Validation of Optimizing Compilers , 2001 .

[20]  簡聰富,et al.  物件導向軟體之架構(Object-Oriented Software Construction)探討 , 1989 .

[21]  Rina Dechter,et al.  Generalized best-first search strategies and the optimality of A* , 1985, JACM.

[22]  George C. Necula,et al.  Proof-carrying code , 1997, POPL '97.