Techniques and tools for achieving improved test coverage in a finite
program state space are described, such as a technique for selecting a
set of predicates, calculating a set of possible predicate values,
calculating a subset of the set of possible predicate values, and
generating a test for the computer program based at least in part on the
subset. The subset comprises an approximation (e.g., an
under-approximation) of reachable states in the program. A superset of
the set of possible predicate values also can be calculated; the superset
comprises an over-approximation of the reachable states in the program.
In another aspect, a Boolean abstraction of a program is generated,
reachability analysis is performed based at least in part on the Boolean
abstraction, and symbolic execution is performed to generate test data.
The reachability analysis can include computing lower and/or upper bounds
of reachable observable states.