【みゅーてーしょんてすと】
ミューテーションテスト とは?
💡 コードに「わざとバグ」を植えて、テストの見張り力を試す健康診断
📌 このページのポイント
ミューテーションテストって、わざとバグを入れるの?
そうだよ。たとえば `if (x > 0)` を `if (x >= 0)` に変えたり、`+` を `-` に変えたりする。こうして作った変異体(ミュータント)をテストが見つけられるかチェックするんだ
テストが通っちゃったらどうなるの?
ミュータントが「生き残った(survived)」と判定されるんだ。つまり、そのバグを見逃すテストしか書いていないということ。テストの穴が見つかったわけだね
コードカバレッジが100%でも意味ないの?
まさにそこがポイントだよ。カバレッジは「コードを通過したか」だけで、「正しく検証したか」は分からない。ミューテーションテストなら検証の質まで測れるんだ
デメリットはないの?
実行時間がかなり長いのが課題だね。ミュータントを1つ作るたびに全テストを実行するから、大規模プロジェクトだと数時間かかることもある。PitestやStrykerなどのツールは差分実行で高速化しているよ
実際どのくらいのスコアを目指せばいいの?
一般的には80%以上が良好とされるけど、等価ミュータント(動作に影響しない変異)が混ざるから100%は現実的じゃないんだ。CIに組み込んで定期的に計測するのがおすすめだよ
まとめ:ざっくりこれだけ覚えればOK!
「ミューテーションテスト」って出てきたら「わざとバグを入れてテストの検出力を測る手法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Mutation Testing」 = 突然変異テスト
💬 生物学の「突然変異(mutation)」が語源だよ。コードに小さな変異を起こして、テストの免疫力を調べるイメージだね