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

Yunhao Jiao
テストカバレッジの指標はあなたを欺いている。本当に重要なものとは。 カバー

テストカバレッジは85%。十分だと感じています。そして、ライン カバレッジ100%の機能にバグが本番環境に紛れ込みます。

なぜか?ラインカバレッジは、テストがコードを実行したかどうかを測定するものであり、テストが正しい動作を検証したかどうかを測定するものではないからです。テストは関数のすべての行を実行しながら、意味のあるアサーションを何一つ行わないことができます。カバレッジは上がります。しかし、信頼性は上がるべきではありません。

嘘をつく指標

ラインカバレッジ:コードの実行を測定するものであり、検証を測定するものではありません。関数を呼び出しながら戻り値をアサートしないテストでも、カバレッジのクレジットは得られますが、バグは検出できません。

ブランチカバレッジ:ラインカバレッジよりも優れています。条件分岐の両側が実行されたかどうかを確認します。しかし、正確性の検証にはなりません。両方のブランチが誤った出力で実行されても、カバレッジは100%と表示されます。

テスト数:テストが多いことはより良いテストを意味しません。設計の粗い500件のユニットテストは、設計の優れた50件のインテグレーションテストよりも実際のバグを捕捉できません。

本当に重要な指標

バグ流出率:1スプリントあたりに本番環境に流出するバグの数はどれくらいか?これはテストの有効性を直接測定します。バグ流出率の低下は、テストが改善されていることを意味します。増加傾向(Cortexが発見した23.5%の上昇のような)は、テストが追いついていないことを意味します。

バグ混入から検出までの平均時間:コードが書かれてからバグが検出されるまでの速さを指します。PR時点でバグを捕捉する場合(数分)と本番環境で捕捉する場合(数日)では、テストの有効性が根本的に異なります。

テストシグナルの品質:テストの失敗のうち、本物のバグによるものの割合はどれくらいか?フレーキーなテストや誤検知はどれくらいか?失敗の20%がノイズであれば、開発者はすべての失敗を無視するようになります。

フィーチャーフローのカバレッジ:完全なユーザーフローがエンドツーエンドでテストされている割合はどれくらいか?これは、テストが単なるコード実行ではなく、実際のユーザー行動を反映しているかどうかを測定します。

TestSpriteはプロダクト要件からテストを生成し、個別のコードパスではなく完全なユーザーフローをカバーします。提供されるカバレッジは、任意の行数ではなく実際のユーザー行動に対応しています。すべてのテスト失敗は、フレーキーなセレクターではなく実際の動作上の問題を示しています。

カバレッジの数値を最適化するのをやめましょう。バグの検出に最適化しましょう。

TestSpriteを無料で試す →