テストカバレッジ100%は必要?適切な目標と種類

はじめに

 「単体テストはテストカバレッジ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%の落とし穴

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

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

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

 

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

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

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

これにより、プロダクションコードの保守性が下がることすらあります。

 

100%でもバグは残る

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

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

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

 

つまり、

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

ということです。

 

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

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

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

 

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

2,影響範囲・ビジネスリスク

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%は「気持ちいい」指標ですが、コスト・設計・リスクのバランスを崩すこともあります。

・「どのコードに、どれくらい投資するか」を考え、変更頻度・リスク・規格要求を軸に “適切なカバレッジ” を決めるのがおすすめです。

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