TL;DR
テストスイートを実行したときに、プログラムのソースコードのどれだけの割合が実行されたかを表す指標。テストカバレッジとも呼ぶ。
なぜ必要か
Wikipedia によると、カバレッジが高いほど、見つかっていないバグが残る可能性は一般に低くなる。ソフトウェアテストの最初期の体系的な手法の 1 つで、最も古い文献は 1963 年の Miller と Maloney の論文である。
仕組み
何を「実行された」とみなすかで、いくつかの基準がある。
- 関数カバレッジ: 各関数が呼ばれたか
- 命令(ステートメント)カバレッジ: 各文が実行されたか
- 分岐カバレッジ: 各分岐の両方の結果を通ったか
- 条件カバレッジ: 各真偽値の部分式が真と偽の両方になったか
- MC/DC: 各条件が単独で判定の結果を変えることを示せたか。航空機などの安全性が重視される分野で求められる
例
Jest では --coverage を付けるとコードカバレッジを計算する。Effective Rust 項目32 によると、Rust では cargo tarpaulin で測れる。前回の結果と比べないとテスト不足を検出できないので、Codecov などの外部の追跡システムと連携する。
注意点
カバレッジが高くても、正しく動くことは保証されない。Wikipedia は、数字を上げるためだけにテストが書かれることを懸念する Martin Fowler の「100% のようなものは疑わしい」という言葉を引いている。何もアサートしないテストでもカバレッジは上がるので、テストの実効性はミューテーションテストで確かめる。また、計測のための処理が負荷を足すので、普通は本番ではなくテストのときに使う。