Techniques and tools for generating test cases for methods or programs
with input preconditions are described. For example, after finding
feasible control flow paths for a tested method along with each path's
associated input conditions, a new program is created which tests these
conditions along with the precondition. By analyzing this new program's
control flow graph, a class of test cases is found while avoiding
inefficiencies created by doing complete searches of paths through the
combined control flow graph of the precondition and the method.
Additional efficiencies are introduced by partitioning a control flow
graph for the precondition into branched and straight sections.