Proving Theorems about LISP Functions
Journal of the ACM (JACM)
Initial Algebra Semantics and Continuous Algebras
Journal of the ACM (JACM)
Path Calculus in Program Verification
Journal of the ACM (JACM)
Verification of Array, Record, and Pointer Operations in Pascal
ACM Transactions on Programming Languages and Systems (TOPLAS)
Simplification by Cooperating Decision Procedures
ACM Transactions on Programming Languages and Systems (TOPLAS)
Correctness-preserving program transformations
POPL '75 Proceedings of the 2nd ACM SIGACT-SIGPLAN symposium on Principles of programming languages
POPL '80 Proceedings of the 7th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A constructive alternative to axiomatic data type definitions
LFP '80 Proceedings of the 1980 ACM conference on LISP and functional programming
Prolog - the language and its implementation compared with Lisp
Proceedings of the 1977 symposium on Artificial intelligence and programming languages
Automatic program verification III: a methodology for verifying programs.
Automatic program verification III: a methodology for verifying programs.
Specification techniques for data abstractions
IEEE Transactions on Software Engineering
Structural specification-based testing with ADL
ISSTA '96 Proceedings of the 1996 ACM SIGSOFT international symposium on Software testing and analysis
Exact real arithmetic: a case study in higher order programming
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
The evolution of an integrated testing environment by the Domain Testing Strategy
ACM '84 Proceedings of the 1984 annual conference of the ACM on The fifth generation challenge
Automated specification analysis using an interactive theorem prover
Proceedings of the International Conference on Formal Methods in Computer-Aided Design
Behavioral interface specification languages
ACM Computing Surveys (CSUR)
Hi-index | 0.03 |
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.