A Software Falsifier

A falsifier is a tool for discovering errors by static source-code analysis.
Its goal is to discover them while requiring minimal programmer's effort.
In contrast to lint-like tools or verifiers, which
try to maximize the number of errors reported at the expense
of allowing "false errors", falsifier's goal is to guarantee no false errors.
To further minimize programmer's effort, no specification or extra information
about his program is required.
That, however, does not preclude project specific information from being built in.
The class of errors detectable without any specification is important not only
because of the low cost of detection, but also because it includes
errors of portability, irreproducible behavior, etc.,
which are very expensive to detect by testing.
This paper describes the design and implementation of such a falsifier,
and reports on the experience with its use for design automation software.
The main contribution of this work lies in combining data-flow analysis
with symbolic execution to take advantage of their relative advantages.

By: Daniel Brand

Published in: RC21788 in 2000

LIMITED DISTRIBUTION NOTICE:

This Research Report is available. This report has been submitted for publication outside of IBM and will probably be copyrighted if accepted for publication. It has been issued as a Research Report for early dissemination of its contents. In view of the transfer of copyright to the outside publisher, its distribution outside of IBM prior to publication should be limited to peer communications and specific requests. After outside publication, requests should be filled only by reprints or legally obtained copies of the article (e.g., payment of royalties). I have read and understand this notice and am a member of the scientific community outside or inside of IBM seeking a single copy only.

RC21788.ps

Questions about this service can be mailed to reports@us.ibm.com .