November 17, 2009
Edison Mera
We present a framework that unifies unit testing and run-time verification (as well as static verification and static debugging). A key contribution of our overall approach is that we preserve the use of a unified assertion language for all of these tasks. We first describe a method for compiling run-time checks for (parts of) assertions which cannot be verified at compile-time via program transformation.
This transformation allows checking preconditions and postconditions, including conditional postconditions, properties at arbitrary program points, and certain computational properties.
The implemented transformation includes several optimizations to reduce run-time overhead. Most importantly, we propose a minimal addition to the assertion language which allows defining unit tests to be run in order to detect possible violations of the (partial) specifications expressed by the assertions.
We have implemented the framework within the Ciao/CiaoPP system and effectively applied it to the verification of ISO Prolog compliance and to the detection of different types of bugs in the Ciao system source code. We have performed some experiments to assess different trade-offs among program size, running time, or levels of verbosity of the messages shown to the user.
The talk will be divided into two parts. The first one will be devoted to the description of the unified framework, and a demonstration of the system will be performed in the second part.