Mutation Testing
Deliberately introducing small faults into the code and measuring how many the test suite detects, as a measure of test strength rather than test reach.
It exists because line coverage measures the wrong thing. Coverage tells you a line was executed during the test run, which is entirely compatible with the test asserting nothing about it — a common state in suites written to hit a coverage target.
Mutation testing changes a comparison operator, negates a condition, alters a boundary or removes a statement, then re-runs the tests. If they still pass, the mutant survived, and a test that cannot detect broken code is not protecting that code. The mutation score is the proportion killed, and it is a far better proxy for whether a suite would catch a regression.
The cost is the obstacle: the suite runs once per mutant, so a full analysis is expensive on any sizeable codebase. What makes it practical is running it incrementally on changed code only, inside the pull request, where the volume is small and the feedback lands where someone can act.
Where it is worth the effort: high-consequence logic — pricing, entitlement, financial calculation, tax, safety limits — where a silent wrong answer is far worse than an outage and where a suite that merely executes the code is not evidence of anything.