Infrastructure · Verification

MetamorphicTesting

Test a stated relation among the outputs of several runs, which needs no exact expected answer for any single run

Definition

Mechanism

Instead of checking each run against a known answer, related runs are compared: a relation states how the outputs must correspond when the inputs are changed in a stated way, as permuting the rows fed to an order-independent aggregation must leave its result unchanged. A relation may involve more than two runs. Each relation is derived, before any run, from a property the correct output must have, stated in the Spec or known of the domain, never from the implementation's behaviour, and it states how a violation is decided: exactly, within a tolerance, or by a statistical test where outputs are random. Follow-up inputs are generated from source inputs, and a violation is a failure on that set of inputs. A satisfied relation shows the outputs are consistent under that relation, not that any single output is correct. It builds tests for EmpiricalTest that need no exact expected answer, including where the correct output cannot be computed independently.

Invariants

  1. Each relation is derived from a stated property of the correct output, from the specification or the domain, and recorded before execution together with how a violation is decided.
  2. A violation is reported with the source inputs, the transformations and every output the relation involves.
  3. A pass is reported as consistency under the named relations, never as correctness.

Risks

Failure modes

  1. Weak relation

    the relation also holds for wrong implementations, for example one any constant output satisfies, so passing proves little.

  2. Relation read off the code

    the relation is derived from the implementation's behaviour, so the test cannot disagree with it.

  3. Shared error

    the defect changes every related output in the same way, so the relation holds.

  4. Tolerance creep

    numeric relations get tolerances wide enough to hide real violations.

Relationships

Builds on

References

Spec

Rigorous requirement definition

Nothing in this library builds on this pattern yet.

Reference

Identity

Ref
MetamorphicTesting#7129
Sema ID
sema:MetamorphicTesting#mh:SHA-256:7129619c60f2d3773b9a985ae4365bf2dbdba782131b9c804e079142656dae9c
Ring
2
Tier
2
Updated
2026-11-11