テストカバレッジ指標はあなたを欺いている。本当に重要なのはこれだ。

テストカバレッジは85%。それで安心している。しかし、ラインカバレッジ100%の機能にバグがあり、本番環境に流出する。
なぜか?ラインカバレッジはコードがテスト中に実行されたかどうかを測定するのであり、テストが正しい動作を検証したかどうかを測定するわけではないからです。テストは何も意味のあるアサーションをせずに関数のすべての行を実行できます。カバレッジは上がります。しかし、自信は上がるべきではありません。
嘘をつく指標
ラインカバレッジ:コードの実行を測定するのであり、検証を測定するわけではありません。関数を呼び出しても戻り値をアサートしないテストは、バグを検出せずにカバレッジのクレジットを与えます。
ブランチカバレッジ:ラインカバレッジよりも優れています——条件分岐の両側が実行されたかどうかをチェックします。しかし、正確性の検証はできません。両方のブランチが誤った出力で実行されても、カバレッジは100%と表示されます。
テスト数:テストが多いほど良いわけではありません。設計が不十分なユニットテスト500件よりも、適切に設計されたインテグレーションテスト50件の方が実際のバグを多く検出します。
重要な指標
バグ流出率:スプリントごとに何件のバグが本番環境に到達するか?これはテストの有効性を直接測定します。バグ流出率の低下はテストの改善を意味します。増加傾向(Cortexが発見した23.5%の上昇など)は、テストが遅れを取っていることを意味します。
バグ混入から検出までの平均時間:コードが書かれてからバグが検出されるまでの速さはどれほどか?PRで検出されたバグ(数分)と本番環境で検出されたバグ(数日)は、テストの有効性において根本的に異なります。
テストシグナル品質:テストの失敗のうち、フレーキーなテストや誤検知ではなく実際のバグを表す割合は?失敗の20%がノイズであれば、開発者はすべての失敗を無視するようになります。
機能フローカバレッジ:完全なユーザーフローがエンドツーエンドでテストされている割合は?これは、テストが単なるコード実行ではなく実際のユーザー動作を反映しているかどうかを測定します。
TestSpriteはプロダクト要件からテストを生成し、個々のコードパスではなく完全なユーザーフローをカバーします。提供されるカバレッジは、恣意的な行数ではなく実際のユーザー動作に対応しています。すべてのテスト失敗は、フレーキーなセレクターではなく実際の動作上の問題を表しています。
カバレッジ数値の最適化をやめ、バグ検出の最適化を始めましょう。
TestSpriteを無料で試す →