An oracle is a mechanism used by software testers and software engineers for determining whether a test has passed or failed.[1] It is used by comparing the output(s) of the system under test, for a given test case input, to the outputs that the oracle determines that product should have. Oracles are always separate from the system under test.
Common oracles include:
* specifications and documentation
* other products (for instance, an oracle for a software program might be a second program that uses a different algorithm to evaluate the same mathematical expression as the product under test)
* an heuristic oracle that provides approximate results or exact results for a set of a few test inputs,
* a statistical oracle that uses statistical characteristics,
* a consistency oracle that compares the results of one test execution to another for similarity,
* a model-based oracle that uses the same model to generate and verify system behavior
* or a human being's judgment (i.e. does the program "seem" to the user to do the correct thing?).