It is challenging to test applications and functions for which the correct output for arbitrary input cannot be known in advance, e.g. some computational science or machine learning applications. In the absence of a test oracle, one approach to testing these applications is to use metamorphic testing: existing test case input is modified to produce new test cases in such a manner that, when given the new input, the application should produce an output that can be easily be computed based on the original output. That is, if input x produces output f(x), then we create input x’ such that we can predict f(x’) based on f(x); if the application or function does not produce the expected output, then a defect must exist, and either f(x) or f(x’) (or both) is wrong. By using metamorphic testing, we are able to provide built-in “pseudo-oracles” for these so-called “nontestable programs” that have no test oracles. In this paper, we describe an approach in which a function’s met...
Christian Murphy, Kuang Shen, Gail E. Kaiser