カバレッジと品質指標
ストーリー
「テストを書いたけど、十分かどうか分からない...... そんなときに頼りになるのがカバレッジだ」
松本先輩がカバレッジレポートの画面を見せた。
「ただし、カバレッジは万能じゃない。 数字だけ追いかけると本質を見失う。 正しい使い方を教えるよ」
コードカバレッジとは
テスト実行時に、プロダクションコードのどの部分が実行されたかを示す指標です。
カバレッジの種類
| 種類 | 意味 | 計算方法 |
|---|---|---|
| 行カバレッジ (Line) | 実行された行の割合 | 実行行数 / 全行数 |
| 分岐カバレッジ (Branch) | 通過した分岐の割合 | 通過分岐数 / 全分岐数 |
| 関数カバレッジ (Function) | 呼び出された関数の割合 | 呼び出し関数数 / 全関数数 |
| 文カバレッジ (Statement) | 実行された文の割合 | 実行文数 / 全文数 |
カバレッジの見方
typescript
function calculatePrice(price: number, isMember: boolean): number {
let result = price; // ← 行1: 実行される
if (isMember) { // ← 行2: 分岐あり
result *= 0.9; // ← 行3: isMember=true のときのみ
}
if (result > 10000) { // ← 行4: 分岐あり
result -= 500; // ← 行5: result>10000 のときのみ
}
return result; // ← 行6: 実行される
}
// テスト: calculatePrice(5000, true) だけの場合
// 行カバレッジ: 5/6 = 83%(行5が未実行)
// 分岐カバレッジ: 2/4 = 50%(false 分岐が未通過)Jest でのカバレッジ取得
bash
# カバレッジ付きでテスト実行
npx jest --coverage
# 出力例
--------------------|---------|----------|---------|---------|
File | % Stmts | % Branch | % Funcs | % Lines |
--------------------|---------|----------|---------|---------|
All files | 85.71 | 66.67 | 100 | 85.71 |
calculatePrice.ts | 85.71 | 66.67 | 100 | 85.71 |
--------------------|---------|----------|---------|---------|カバレッジの目標値
| カバレッジ | 目安 | 解説 |
|---|---|---|
| 80% 以上 | 一般的な推奨値 | 大半のプロジェクトで妥当な目標 |
| 90% 以上 | 高品質 | 重要なライブラリやミッションクリティカルなシステム |
| 100% | 非現実的 | エラーハンドリングのテストが困難な箇所もある |
| 60% 未満 | 危険 | テスト不足が懸念される |
カバレッジの落とし穴
カバレッジが高くてもバグがある例
typescript
function divide(a: number, b: number): number {
return a / b;
}
// テスト(行カバレッジ100%)
test('2 / 1 = 2', () => {
expect(divide(2, 1)).toBe(2);
});
// → カバレッジ100%だが、b=0 の場合のテストがない!
// → divide(1, 0) は Infinity を返す(バグ)カバレッジだけでは測れないこと
カバレッジが測れるもの:
├── コードが実行されたかどうか
カバレッジが測れないもの:
├── ビジネスロジックの正確性
├── エッジケースの網羅性
├── 非機能要件(パフォーマンス、セキュリティ)
├── テストのアサーションの質
└── 並行処理の問題
その他の品質指標
| 指標 | 意味 | 目安 |
|---|---|---|
| バグ密度 | コード1,000行あたりのバグ数 | < 1.0 |
| 循環的複雑度 | 関数の条件分岐の複雑さ | < 10 |
| テスト実行時間 | 全テストの実行にかかる時間 | < 5分 |
| テスト/コード比率 | テストコード行数 / プロダクション行数 | 1:1 ~ 2:1 |
| フレーキーテスト率 | 不安定なテストの割合 | < 1% |
まとめ
| 項目 | ポイント |
|---|---|
| カバレッジの種類 | 行、分岐、関数、文の4種類 |
| 推奨値 | 80%以上を目標に(100%は非現実的) |
| 落とし穴 | カバレッジが高くてもテストの質が低い場合がある |
| 総合的な判断 | カバレッジは指標の1つ。他の品質指標と組み合わせる |
チェックリスト
- 4種類のカバレッジを説明できる
- Jest でカバレッジを取得できる
- カバレッジの目標値の目安を理解した
- カバレッジの落とし穴を説明できる
次のステップへ
Step 3 の最後は理解度チェックです。テスト設計の基本知識を確認しましょう。
推定読了時間: 15分