Formal program testing

This paper proposes a practical alternative to program verification -- called formal program testing -- with similar, but less ambitious goals. Like a program verifier, a formal testing system takes a program annotated with formal specifications as input, generates the corresponding verification conditions, and passes them through a simplifier. After the simplification step, however, a formal testing system simply evaluates the verification conditions on a representative set of test data instead of trying to prove them. Formal testing provides strong evidence that a program is correct, but does not guarantee it. The strength of the evidence depends on the adequacy of the test data.

[1]  Greg Nelson,et al.  Simplification by Cooperating Decision Procedures , 1979, TOPL.

[2]  Richard J. Lipton,et al.  Theoretical and empirical studies on using program mutation to test the functional correctness of programs , 1980, POPL '80.

[3]  Robert Cartwright,et al.  User-Defined Data Types as an Aid to Verifying LISP Programs , 1976, ICALP.

[4]  David H. D. Warren,et al.  Prolog - the language and its implementation compared with Lisp , 1977, Artificial Intelligence and Programming Languages.

[5]  Robert Cartwright,et al.  A constructive alternative to axiomatic data type definitions , 1980, LISP Conference.

[6]  Ken Kennedy,et al.  An introduction to the set theoretical language SETL , 1975 .

[7]  John McCarthy,et al.  A BASIS FOR A MATHEMATICAL THEORY OF COMPUTATION 1) , 2018 .

[8]  Daniel Brand,et al.  Proving Programs Incorrect , 1976, International Colloquium on Automata, Languages and Programming.

[9]  David C. Luckham,et al.  Verification of Array, Record, and Pointer Operations in Pascal , 1979, TOPL.

[10]  Susan L. Gerhart,et al.  Correctness-preserving program transformations , 1975, POPL '75.

[11]  David C. Luckham,et al.  Automatic program verification III: a methodology for verifying programs. , 1974 .

[12]  Stephen N. Zilles,et al.  Specification techniques for data abstractions , 1975 .

[13]  Daniel Brand,et al.  Path Calculus in Program Verification , 1978, JACM.

[14]  Joseph A. Goguen,et al.  Initial Algebra Semantics and Continuous Algebras , 1977, J. ACM.

[15]  Robert S. Boyer,et al.  Proving Theorems about LISP Functions , 1973, JACM.