To prove the correctness of a program is to demonstrate, through impeccable mathematical techniques, that it has no bugs. To test a program is to run it with the expectation of discovering bugs. These two paths to software reliability seem to diverge from the very start: if you have proved your program correct, it is fruitless to comb it for bugs; and if you are testing it, that surely must be a sign that you have given up on any hope to prove its correctness. Accordingly, proofs and tests have, since the onset of software engineering research, been pursued by distinct communities using different kinds of techniques and tools. Dijkstra’s famous pronouncement that tests can only show the presence of errors — in retrospect, perhaps one of the best advertisements one can imagine for testing, as if “only” finding bugs were not already a momentous achievement! — didn’t help make testing popular with provers, or proofs attractive to testers. And yet the development of both approaches leads to the discovery of common issues and to the realization that each may need the other. The emergence of model checking was one of the first signs that apparent contradiction may yield to complementarity; in the past few years an increasing number of research efforts have encountered the need for combining proofs and tests, dropping earlier dogmatic views of incompatibility and taking instead the best of what each of these software engineering domains has to offer.
Les mer
Dijkstra’s famous pronouncement that tests can only show the presence of errors — in retrospect, perhaps one of the best advertisements one can imagine for testing, as if “only” finding bugs were not already a momentous achievement! — didn’t help make testing popular with provers, or proofs attractive to testers.
Les mer
Combining Static and Dynamic Reasoning for Bug Detection.- Testable Requirements and Specifications.- Proving Programs Incorrect Using a Sequent Calculus for Java Dynamic Logic.- Testing and Verifying Invariant Based Programs in the SOCOS Environment.- Testing and Proving Distributed Algorithms in Constructive Type Theory.- Automatic Testing from Formal Specifications.- Using Contracts and Boolean Queries to Improve the Quality of Automatic Test Generation.- Symbolic Execution Techniques for Refinement Testing.- Test-Sequence Generation with Hol-TestGen with an Application to Firewall Testing.- Generating Unit Tests from Formal Proofs.- Using Model Checking to Generate Fault Detecting Tests.- White-Box Testing by Combining Deduction-Based Specification Extraction and Black-Box Testing.
Les mer
This book constitutes the thoroughly refereed post-proceedings of the First International Conference on Test and Proofs, TAP 2007, held in Zurich, Switzerland in February 2007.
The 12 revised full papers presented were carefully reviewed and selected for inclusion in the book. The papers are devoted to the convergence of software proofing and testing and feature current research work that combines ideas from both sides to foster software quality. Topics addressed are generation of test cases or oracles by theorem proving, constraint logic programming, model checking, or symbolic execution; program proving with the aid of testing techniques; automatic tools; case studies; formal frameworks; as well as verification techniques combining proofs and tests.
Les mer
Produktdetaljer
ISBN
9783540737698
Publisert
2007-08-09
Utgiver
Vendor
Springer-Verlag Berlin and Heidelberg GmbH & Co. K
Høyde
235 mm
Bredde
155 mm
Aldersnivå
Research, UP, P, 05, 06
Språk
Product language
Engelsk
Format
Product format
Heftet