そのテスト、本当にバグを検出できますか?── Mutation Testingでテストの質を測る
概要
テストカバレッジが高くても「バグを検出できるテスト」かどうかは別問題。Mutation Testing(ミューテーションテスト)を使い、プロダクトコードに意図的にバグを埋め込んでテストがそれを検出できるかを測定する手法を解説。AI生成テストのギャップ問題を念頭に置いた実践的な記事。
詳細
- Mutation Testingの仕組み: ツールがプロダクトコードを機械的に少しずつ書き換えた「ミュータント」を生成し、テストがKILLED(失敗)かSURVIVED(通過)かを確認
- ミューテーションスコア: KILLEDミュータント数÷総ミュータント数。高いほどテストの検出力が高い
- AI生成テストの問題: 「この関数のテストを書いて」と依頼したテストが戻り値を検証せず、カバレッジは高いがバグを見逃すケースが多い
- 実例:
discount := price * (100 - rate) / 100の-を+に書き換えたミュータントを、assertなしのテストは検出できない - Go実装: Go 1.26での動作確認コード付きで解説
参照
- 出典: https://zenn.dev/explaza/articles/b04ad08bca46e1
- はてなブックマーク数: 23