「単体テストはカバレッジ100%を目指すべきだ」

そんな会話を一度は聞いたことがあるかもしれません。

 

しかし、現場で限られた工数・納期の中で開発していると、

「100%を追いかけること」自体が目的化してしまい、本来守りたい品質がおろそかになることも少なくありません。

 

この記事では、

・カバレッジとはそもそも何か

・なぜ100%にこだわりすぎると危険なのか

・プロジェクトにとって“適切なカバレッジ”をどう決めるか

を整理してみます。

 

カバレッジとは?よく出てくる4種類

まずは用語の整理からです。

単体テストの世界で「カバレッジ」と言うとき、代表的には次のような種類があります。

 

・ステートメントカバレッジ

実行された「行」の割合

例)100行中80行がテストで実行された → 80%

 

・ブランチカバレッジ

if / switch などの分岐が、true/false ともに通ったか

条件分岐の抜け漏れを確認しやすい

 

・条件/判定カバレッジ(Condition / Decision)

if (A && B) のような複数条件の true/false 組み合わせを考慮したカバレッジ

分岐だけでなく、条件単位での網羅性を見る

 

・MC/DC(Modified Condition/Decision Coverage)

航空・自動車などの安全規格でよく要求される厳しめのカバレッジ

「各条件が、単独で判定結果に影響する」ことを確認する

 

カバレッジツールによってどこまで対応しているかは異なりますが、

「どの種類のカバレッジを、どのレベルまで求めるのか」が大事なポイントになります。

 

なぜ「100%」を目指したくなるのか

カバレッジは数値で見えるため、マネジメントしやすい指標です。

そのため、次のような流れで「100%」という目標が生まれがちです。

 

・数値で管理したい → カバレッジなら%で見えてわかりやすい

・「高いほど良いなら、100%が最高だよね」

・結果として「100%でない=サボっている」という空気になる

 

気持ちはよく分かるのですが、ここにはいくつか落とし穴があります。

 

カバレッジ100%の落とし穴

  1. テストコストが膨らみすぎる

・初期化処理・ログ出力・デバッグ用コードなど、リスクが低い部分にまで時間をかけることになります。

・限られた時間を「本当にバグを埋め込みやすい箇所」に使えなくなる可能性があります。

 

  1. 「テストのためのコード」が増えすぎる

・100%を達成するためだけの不自然な分岐・設定を入れてしまう

・本来の設計よりも「カバレッジを上げやすい設計」を優先してしまう

結果的に、プロダクションコードの保守性が下がることもあります。

 

  1. 100%でもバグは残る

・カバレッジは「実行されたかどうか」であり、「正しく検証できているかどうか」までは保証してくれません。

・アサーションがないテストでも、ツール上はカバレッジが上がります。

・組み合わせ爆発や異常系まですべてカバーするのは、現実的ではありません。

「100%だから安心」ではなく、「どこをどのようにテストしたか」が重要です。

 

“適切なカバレッジ”を決める3つの視点

では、どのくらいを目標にすべきなのでしょうか。

万能の正解はありませんが、考えるうえでの軸を3つ挙げてみます。

  1. 変更頻度・今後のメンテナンス予定

・よく変更が入るモジュール

・今後も機能追加が見込まれている箇所

こうした部分はバグが紛れ込みやすく、将来の影響も大きいため、

他よりも高めのカバレッジ(例:80〜90%)を狙う価値があります。

逆に、ほとんど触らないレガシー部分に無理やりテストを書くのは、

投資対効果が低くなることもあります。

 

  1. 影響範囲・ビジネスリスク

・課金、決済、認証、データ破壊につながる処理

・顧客への影響が大きい処理

こうした部分は、障害が起きたときのリスクが高いため、

ブランチカバレッジや条件カバレッジを重視して、

85〜90%以上を目標にするケースが多いです。

 

  1. 法規制・安全規格などの要求

・自動車、医療機器、産業機器などの分野では、規格で「ブランチカバレッジ○○%以上」「MC/DC 必須」などと定められる場合があります。

・この場合、プロジェクト独自の判断よりも規格要求が優先されます。

 

カバレッジ目標の「例」

あくまで一例ですが、現実的な運用イメージとしては次のような分け方があります。

・全体目標:

プロジェクト平均で ステートメント 70〜80%程度

・重要モジュール:

ビジネスロジック・安全上重要な部分は ブランチ 80〜90%

・周辺・補助的な処理:

ログ・UI・一部のラッパーなどは 60%程度でも許容

 

大事なのは、「なぜその数字なのか」をチームで合意しておくことです。

「なんとなく100%」ではなく、リスク・コスト・納期のバランスで決められているかがポイントになります。

 

現場で使えるカバレッジ運用ルールの例

もう少し具体的に、チームで取り入れやすいルール例を挙げます。

・新規で書くコードは、原則 ステートメント 80%以上 を目指す

・すでにあるレガシーコードは、

「今回さわった範囲」は ブランチ 70〜80%以上 を目標にする

・重要モジュールについては、

別途「このファイルは80%以上」「このクラスは90%以上」などのリストを作る

・カバレッジが目標に届かない場合は、

なぜ届かないか(テストが難しい・価値が低いなど)をコメントやWikiに残す

 

こうしておくと、数字だけでなく背景も含めて判断しやすくなります。

 

数値に振り回されず、指標として“賢く”使う

カバレッジは、あくまで 「テストが当たっていない場所を見つけるための道具」 です。

・高いからといって、必ずしも高品質とは限らない

・低いからといって、必ずしも悪いテストとも限らない

大事なのは、

1.どの種類のカバレッジを

2.どのモジュールに対して

3.どの水準まで目指すのか

をチームで話し合い、「現実的に回せるライン」を決めて運用することです。

 

まとめ

・カバレッジ100%は「気持ちいい」指標ですが、

コスト・設計・リスクのバランスを崩すこともある。

・「どのコードにどれくらい投資するか」を考え、

変更頻度・リスク・規格要求を軸に“適切なカバレッジ”を決めるのがおすすめです。

・カバレッジは目的ではなく、議論のきっかけになる指標として活用しましょう。