テストカバレッジとは?
テストカバレッジとは、プログラムのソースコード全体のうち、テストによって実行された部分の割合を示す指標です。「網羅率」とも呼ばれ、テストがどれだけ広範囲に実施されたかを数値化したものになります。
ソフトウェア開発の現場では、主にホワイトボックステストで用いられ、コードの論理構造に対して、どの程度テストを実行できたかを評価する尺度として活用されます。カバレッジを計測することで、未テスト部分を明確にし、テストの効果を客観的に把握できます。
カバレッジの算出方法は、対象範囲全体を分母とし、実際にテストを実行した部分を分子とした割合です。たとえば、100行のコードのうち80行がテストで実行された場合、カバレッジは80%となります。
ただし、カバレッジが高ければ必ずしも品質が高いとは限りません。テストケースの品質とカバレッジの両方を適切に管理することが重要です。
テストカバレッジの主な種類
テストカバレッジには、着目する要素によってさまざまな種類があります。それぞれ網羅性の強度やテストケース数が異なるため、プロジェクトの特性や品質要件に応じて適切なものを選択することが重要です。
カバレッジには「C0」「C1」「C2」といった略称が使われることがありますが、これらの用法に統一的な定義はなく、解説サイトやツール、専門書によって指し示す内容が異なる点に注意が必要です。実務では正式な呼び方を使う方が、認識の齟齬や混乱を避けられます。
ステートメントカバレッジは、プログラム内のすべての命令文を最低1回は実行するようにテストする基準です。最も基本的なカバレッジであり、コードの未実行部分を発見するのに役立ちます。
命令文を1回通過するだけで網羅したと判断されるため、テスト量は比較的少なく導入しやすい反面、条件分岐の真偽両方を考慮しないため網羅性は低いといえます。
たとえば、条件を満たす場合のみ処理を行う条件文では、条件が真の場合だけをテストすればカバレッジ100%を達成できてしまいます。
デシジョンカバレッジは、プログラム内のすべての条件分岐について、真と偽の両方の経路を最低1回は通るようにテストする基準です。
ステートメントカバレッジよりも強力な網羅性を持ち、デシジョンカバレッジが100%を達成すると、ステートメントカバレッジも自動的に100%になります。
ただし、論理和(OR)や論理積(AND)を含む複合条件の場合、個々の条件式の組み合わせまでは考慮しません。そのため、複合条件の判定式に欠陥がある場合、検出できない可能性があります。
条件カバレッジは、複合条件を構成する個々の条件式について、真と偽がそれぞれ最低1回は評価されるようにテストする基準です。
注意すべき点として、条件カバレッジが100%であっても、必ずしもステートメントカバレッジやデシジョンカバレッジが100%になるとは限りません。
個々の条件式の真偽を網羅しても、複合条件全体としての真偽の組み合わせがすべて実行されるわけではないためです。条件カバレッジは、各条件の動作を個別に確認できますが、条件間の相互作用までは保証しません。
改良条件判定カバレッジ(MC/DC:Modified Condition/Decision Coverage)は、複合条件において、各条件が複合条件全体の結果に独立して影響を与えることを確認する、非常に厳格なテスト基準です。
航空機システムや自動車の制御システムなど、人命に関わる高い安全性が求められる分野で採用される国際技術標準「DO-178B(RTCA)」において、テストの評価基準として定められています。
MC/DCの特徴は、最小限のテストケース数で条件の独立性を確認できる効率性の高さにあります。
例として「子どもである OR りんごジュースを希望する」という複合条件を見てみましょう。この場合「大人でりんごジュースを希望する」ケースと「大人でりんごジュースを希望しない」ケースを比較することで「りんごジュースを希望する」という条件が結果に独立して影響することを確認できます。
複合条件カバレッジ(MCC:Multiple Condition Coverage)は、複合条件を構成する個々の条件式のすべての真偽の組み合わせをテストする基準です。カバレッジの中で最も網羅性が高い指標といえます。
たとえば「条件A AND 条件B」という複合条件がある場合、条件Aと条件Bの真偽4通りすべてをテストします。複合条件カバレッジは、すべての条件の組み合わせをテストするため、下位のステートメントカバレッジ、デシジョンカバレッジ、条件カバレッジもすべて満たします。
ただし、条件式が増えるほどテストケースが爆発的に増加します。条件が3つあれば8通り、4つあれば16通りと、2のn乗で増加するため、極めて高い品質が求められる重要な機能に限定して適用することが現実的です。
テストカバレッジを設定し計測するメリット
テストカバレッジを設計し計測するメリットは、以下2点です。
● 漏れのないテストケースを設計できる
● ソースコードの隠れた欠陥を発見できる
ひとつずつ見ていきましょう。
カバレッジの目標値を設定すると、その目標に向けて体系的にテストケースを設計できます。実際にテストを実施してカバレッジを計測した結果、目標値に達していない場合は、テスト漏れが存在することが明確になります。
「テストケースを作成した=十分な確認ができている」という思い込みは危険です。カバレッジを計測することで、コード全体のどの範囲をカバーできているか客観的に把握でき、未テスト部分を特定して効率的にテストケースを追加・改善できます。
カバレッジの計測は、ソースコードに潜む隠れた欠陥の発見にも役立ちます。カバレッジが予想よりも低い場合、その箇所に欠陥が潜んでいる可能性があります。
具体的には、条件分岐が正常に機能していないコード、実行されることのない冗長なコード、本来は削除すべき不要なコードなどが含まれている可能性があります。開発の初期段階でこうした欠陥を発見し修正することで、リリース後の手戻りコストを大幅に削減できます。
テストカバレッジの重要性は、エンドユーザーの期待からも裏付けられます。
株式会社NEXERとポールトゥウィンが2024年に実施した調査によると、アプリやWebサイトの利用時に欠陥に遭遇した経験のある人は全体の49.6%と、実に半数近くにのぼります。その経験者のうち60.2%が欠陥にストレスを抱えており、ユーザーの利便性や満足度が少なくない頻度で損なわれていることが分かりました。
加えて、アプリやWebサイトのテストについて、入念に行うことが重要だと答えた人は全体の91.2%となっています。理由の多くは「当然のこと」「企業としての責任」「快適に利用したいから」といったもので、ユーザーはテストが当たり前に行われ、さらに欠陥が潰されていること前提で利用していると読み取れます。
調査データ引用元:https://prtimes.jp/main/html/rd/p/000001581.000044800.html
ここまでで述べたとおり、品質の高いテストを実施するには、テストカバレッジの活用が欠かせません。信頼される製品を提供し、ユーザーの満足を得るための基本的な取り組みなのです。
テストカバレッジの数値の目安と注意点
テストカバレッジの目標値設定は、プロジェクトの品質とコストのバランスを取るうえで重要な判断です。高すぎる目標は非効率を招き、低すぎる目標は品質リスクを高めます。
世界的なIT企業であるGoogleは、カバレッジの目標値について具体的なガイドラインを公開しています。一般的な指標として、60%を「許容できる(acceptable)」、75%を「称賛に値する(commendable)」、90%を「模範的(exemplary)」としています。ただし、これらの数値はあくまで努力目標であり、テストの完了条件ではない点に注意が必要です。
一般的には、カバレッジの目標値は80%から90%程度が現実的とされています。世界的に著名なソフトウェア技術者であるMartin Fowler氏も「思慮深くテストを実施すればカバレッジは80%台後半から90%台になるだろう」と述べています。
カバレッジ100%は理想的な目標に思えますが、実際には目指すべきではありません。
まず、カバレッジを100%に近づけるほど、欠陥検出の費用対効果が低下します。労力のわりにカバレッジが上がらない、上限が存在するわけです。95%から100%に上げるための労力は、0%から95%に上げる労力よりもはるかに大きくなります。
次に、カバレッジ100%でも欠陥が残る可能性があります。カバレッジは「コードが実行されたか」を測定するものであって「テストケースが適切に欠陥を検出できるか」を保証するものではありません。
たとえば、ゼロ除算のエラーチェックが必要な箇所で、ゼロ以外の値だけでテストした場合、カバレッジは100%になりますが、ゼロ除算の欠陥は検出できません。これは「アンチパターン」と呼ばれる問題です。
また、カバレッジには省略を検出できないという根本的な弱点があります。本来実装すべき処理が欠落している場合、そもそもコードが存在しないため、カバレッジでは検出できません。エラーハンドリングの不備も見逃される可能性があります。
カバレッジ100%を無理に目指すと、本質的でないテストケースの作成に時間を費やし、重要なテストケースの品質向上がおろそかになる恐れがあります。カバレッジはテスト品質を測る指標のひとつであり、唯一の指標ではないことを理解しておくべきです。
まとめ
テストカバレッジは、プログラムのどの範囲がテストされたかを数値で示す重要な指標です。カバレッジを計測することで、漏れのないテストケースを設計でき、ソースコードの隠れた欠陥を発見できます。
しかし、限られたリソースの中で適切なテスト計画を立案し、効果的にカバレッジを管理することは容易ではありません。テストの抜け漏れをなくし、リリース後の予期せぬ欠陥や手戻りを削減したいとお考えの開発チームは、専門家のサポートが有効です。
ポールトゥウィンのソフトウェアテストサービスは、確かなスキルと豊富なプロダクト実績を持ち、お客様の環境・納期・規模に応じて柔軟に対応いたします。テストカバレッジの計測から、効果的なテスト戦略の立案まで、品質向上のあらゆる場面でお手伝いさせていただきます。
テスト品質の向上でお困りの際は、ぜひお気軽にお問い合わせください。
