TL;DR
テスト対象のコードに意図的な変異(ミュータント)を埋め込み、既存のテストスイートがそれを検出できるかを評価する手法。欠陥挿入とも呼ばれる。
なぜ必要か
テストカバレッジだけでは、テストの実効性は分からない。たとえば、コードを実行するだけで何もアサートしないテストでも、カバレッジは上がる。ミューテーションテストを使えば、こうしたテストを見抜ける。
仕組み
本番コードに明らかな誤りを一時的に入れ、テストを実行する。テストが失敗すれば、テストはその誤りを検出できている。テストが成功したままなら、偽陰性が起きている。
Wikipedia によると、元のプログラムとミュータントで同じテストの結果が異なれば、テストスイートはそのミュータントを「kill」したという。大量のミュータントのうちどれだけを kill できたかで、テストスイートの欠陥を見つける力を測る。kill できなかったミュータントに対してテストを足せば、その力を上げられる。書き換えの方法(ミューテーション操作)には、+ と - の取り違えのような典型的な誤りをまねるものがある。
例
Wikipedia の例では、a + b > 0 の + を - に変えたミュータントを考える。(a, b) = (-1, 2) で結果が true になることを確かめるテストがあれば、このミュータントを kill できる。
注意点
元のプログラムと常に同じ振る舞いをするミュータントを、等価ミュータントという。等価ミュータントを kill するテストは作れない。Wikipedia によると、等価ミュータントを手作業で見分けるコストは小さなプログラムでも大きく、実用化の大きな障害になっている。