LESSON 15分

カバレッジと品質指標

ストーリー

「テストを書いたけど、十分かどうか分からない...... そんなときに頼りになるのがカバレッジだ」

松本先輩がカバレッジレポートの画面を見せた。

「ただし、カバレッジは万能じゃない。 数字だけ追いかけると本質を見失う。 正しい使い方を教えるよ」


コードカバレッジとは

テスト実行時に、プロダクションコードのどの部分が実行されたかを示す指標です。

カバレッジの種類

種類意味計算方法
行カバレッジ (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分