😊
カバレッジによってわかることとわからないこと
はじめに
テストコードを書く際、よく話題に上がるのが「カバレッジ率」です。
「カバレッジ率100%を目指すべき」という意見もあれば、「カバレッジ率にこだわりすぎるのは良くない」という意見もあります。
この記事では、カバレッジ率から何がわかって、何がわからないのかを整理し、カバレッジ率との付き合い方について考えます。
カバレッジ率とは
カバレッジ率(コードカバレッジ)とは、テストコードによって実行されたコードの割合を示す指標です。
例えば、カバレッジ率80%であれば、全体のコードのうち80%がテストによって実行されたことを意味します。
一般的なカバレッジの種類としては以下があります。
- Statement Coverage
- コード内の各ステートメント(命令文)が少なくとも1回は実行された割合を測定します
- (例) 以下のコードでは
foo = 1
は実行されますが、foo = 2
が実行されない場合、カバレッジ率は50%です。if condition: foo = 1 else: foo = 2
- Branch Coverage
- 条件分岐のすべてのパス(true と false の両方)を網羅した割合を測定します
- (例) 以下のコードでは、
x > 0
の両方の分岐をテストする必要があります。public String branchCoverageExample(int x) { if (x > 0) { return "Positive"; } else { return "Non-Positive"; } }
- Multipule Condition Coverage
- 条件式に含まれるすべてのサブ条件(部分条件)について、可能な真偽の組み合わせを網羅した割合を測定します
- (例) 以下のコードの
A
とB
の真偽の組み合わせをすべて網羅します。if (A && B) { doSomething(); } else { doSomethingElse(); }
カバレッジ率によってわかること
カバレッジ率によってわかることは、テストコードによってどの程度の量のコードが実行されているかです。
- カバレッジ率が高いということは、「テストコードによって、本体コードの大部分が実行されている」ということを示しています。
- カバレッジ率が低いということは、「テストコードによって、本体コードのほとんどが実行されていない」ということを示しています。
これによってわかることは、以下のとおりです。
カバレッジ率が高い場合
- テストケースが 本体コードの大部分を網羅 している。
- 本体コードが テストケースに無駄なく対応 している。
カバレッジ率が低い場合
- テストケースが 不足している可能性 がある。
- 本体コードに 未テストの部分 が多い。
- 本体コードに 余分な実装 が含まれている可能性がある。
カバレッジ率によってわからないこと
カバレッジ率は、テストケースの品質は評価できません。
ここでいうテストケースの品質とは、以下の点を指します。
- テストケースがビジネス要件を満たすことを確認できるものか
- 境界値テストが十分か
- 異常系のテストが適切か
- etc...
つまりカバレッジ率が高いからといって、システムとして品質が高いかどうかは言えないということになります。
カバレッジ率を活用する際のポイント
では、我々はカバレッジ率とどのように付き合っていけばよいのでしょうか。それを以下にまとめます。
-
カバレッジ率は参考指標として扱う
- 高いカバレッジ率が必ずしも高品質なテストを意味しない
- 低いカバレッジ率は要改善のシグナルとして捉える
-
テストケースの質を重視する
- 重要な機能のテストを優先する
- エッジケースや異常系のテストを適切に設計する
- テスト容易性を考慮したコード設計を心がける
-
継続的なモニタリング
- カバレッジ率の急激な低下は注意信号
- 新機能追加時はテストケースの追加を忘れない
おわりに
カバレッジ率は便利な指標ですが、それだけでテストの十分性を判断することはできません。
テストの品質向上には、カバレッジ率と合わせて以下の点に注目することが重要です。
- テストケースそのものの品質
- ビジネス要件との整合性
カバレッジ率は、テスト戦略全体の中の1つの指標として活用していきましょう。
Discussion