Abstract | This paper describes a technique that helps a test engineer select, from a large set of randomly generated test inputs, a small subset likely to reveal faults in the software under test. The technique takes a program or software component, plus a set of normal executions\,–-\,say, from an existing test suite, or from observations of the software running properly. The technique works by extracting an operational model of the software's operation, and comparing each input's operational pattern of execution against the model. Test inputs whose operational pattern is suggestive of a fault are further reduced by selecting only one input per such pattern. The result is a small portion of the original inputs, deemed most likely to reveal faults. Thus, our technique can also be seen as an error-detection technique. \par We have implemented these ideas in the Eclat tool, designed for unit testing of Java classes. Eclat generates a large number of inputs and uses our technique to select only a few of them as fault-revealing. The inputs that it selects are an order of magnitude more likely to reveal faults than non-selected inputs. |