A strong form of coverage dating back to the 1970s. A derived, automatable check: the tool takes code and tests, applies transformations to the code, and reports transformations the tests fail to detect as 'unspecified semantics'. The human then either removes that semantics or adds a test to specify it. Cannot be further automated past the decision step. Motivated by regression prevention: code may be correct today but not proven to stay correct; mutation testing nails required semantics so future changes (by coworkers, interns, or your future self) cannot silently regress them. Technique is language-agnostic; engines exist for Ruby (Mutant), Haskell (Heckle), JavaScript, Scala, C#, etc. Does not guarantee correctness — only that an automated tool could not find holes; serves as a first line of code review. Equivalent mutations (semantically-identical transformations a test cannot kill) occur but are rare in practice, especially when using semantic-reduction operators.