ソフトウェアテストで用いられる「カバレッジ(網羅率)」とは対象のプログラム全体のうち、どこまでテストが実施(網羅)されたかを示す割合のことです。
テストを実施する際にカバレッジを測定/分析することでソフトウェアの品質を定量的に評価することができます。
今回はテストにおける「カバレッジ」とは何かと、コードカバレッジの種類についてご紹介します。
さらには、カバレッジを設定する利点や注意点についても解説しますので、ぜひ最後までご覧ください。
- もくじ
1.カバレッジ(網羅率)とは|テストがどこまで実行されたかの割合
カバレッジ(網羅率)とは、対象のプログラムがどこまでテスト実施されたのかの割合のことを指します。
ソフトウェアテストにおいては、内部構造をテストするホワイトボックステストで用いられる考え方です。
ソフトウェアの品質を向上させるためには、テストを実施する際にカバレッジを設定することが重要になります。
なぜなら、カバレッジを測定し分析することで、ソフトウェアの品質を数値で測ることができるからです。
また、テストの抜け・漏れを把握することができるため、対象の潜在的な不具合の発見にもつながります。
やみくもにテストをするのではなく、カバレッジを分析し、短い時間で効率的にテストを行うことが大切です。
▼ホワイトボックステストについてはこちら
2.コードカバレッジの代表的な3種類(C0, C1, C2)
ソフトウェアテストにおいて「カバレッジを測る」といえば、一般的に「コードカバレッジを測定する」ことを意味します。
「コードカバレッジ」とは、テスト対象のソースコード全体に対して、どこまでテストされたのかを示す割合のことです。
コードカバレッジは、命令文や判定条件を網羅する度合いにより、いくつか種類が存在します。
この章では、コードカバレッジの代表的な3つ種類と特徴について解説します。
網羅率 | カバレッジ基準 | 説明 |
---|---|---|
高 | マルチコンディションカバレッジ(C2/複合条件網羅) | 条件に含まれるすべての分岐の組み合わせが正常に実行されることをテストする |
| | ブランチカバレッジ(C1/条件網羅) | すべての分岐条件が正常に実行されることをテストする |
低 | ステートメントカバレッジ(C0/命令網羅) | すべての命令文が正常に実行されることをテストする |
ステートメントカバレッジ(C0/命令網羅)
コードカバレッジの中で最も基本的なカバレッジです。
テスト対象となるソースコードのうち、実行可能なステートメント(命令)がテストで実行されたかをカバレッジ基準として評価します。
簡単に計測できるステートメントカバレッジは、コードの網羅性が低く、カバレッジ基準の強度は最も低いと言われています。
ブランチカバレッジ(C1/条件網羅)
テスト対象となるソースコードのうち、分岐の真/偽が各1回は出現するよう実行された割合です。
ブランチカバレッジはステートメントカバレッジよりも強い評価基準となり、ブランチカバレッジが100%の場合は、必然的にステートメントカバレッジも100%を満たします。
しかし、プログラム中の分岐が論理和(OR)/論理積(AND)を含む複合条件の場合、各条件式の組み合わせは考慮されないため、ブランチカバレッジでは判定式内にある不具合を検出できないケースがあります。
マルチコンディションカバレッジ(C2/複合条件網羅)
テスト対象となるプログラム中のブランチが複合条件の場合、各条件の組み合わせをどれくらい実施したのかを表す割合のことです。複合条件カバレッジとも呼びます。
ブランチカバレッジとステートメントカバレッジの関係同様、マルチコンディションカバレッジが100%の場合は、ブランチカバレッジ、ステートメントカバレッジも100%となります。
したがって、網羅性で言えば非常に高く、カバレッジ強度も強いのですが、複合条件の組み合わせの分、必要なテストケースも増大するデメリットもあります。
上記のように、テスト対象をどこまで網羅したかを評価する基準はさまざまなものがあります。
その網羅度を算出する式を「カバレッジ基準」と呼び、そのカバレッジ基準に基づき、実際に網羅した結果を「カバレッジ」と呼びます。
網に例える場合、カバレッジ率は網がテスト対象を覆っている広さを示し、カバレッジ基準は網目の細かさと言えます。
3.カバレッジを設定する2つの利点
カバレッジを設定することで、主に2つの利点があります。それぞれ解説していきます。
漏れなくテストケースを設計できる
カバレッジ基準を設定することで、目標に沿って、漏れなくテストケースを設計することができます。
テストを実施してカバレッジを測定し、そのカバレッジが基準に満たされなければ、それはテストに実施漏れがあることが分かります。
実施漏れがあるということは、テスト設計に漏れがあるということです。
なぜテスト設計に漏れが生じたのかを分析してテストをやり直すことで、網羅性を高めることができます。
コードを実行できないバグを発見できる
どんなにテスト項目を費やしたとしても、プログラム中にバグがあるためカバレッジが目標に届かないことがあります。
例えば、条件分岐が常に真・偽のどちらかに固定される形になっていたり、冗長なコードがあったりするケースです。
このように、カバレッジを計測することで検出につながるバグもあるのです。
4.注意!コードカバレッジの達成を目的するのはNG
テストの網羅性を上げることは重要ですが、それを目的としてはいけません。
なぜなら、より高い基準・目標を達成しようとすると、見つかる欠陥が増える分、必要なテスト工数も増加してしまうからです。
カバレッジ基準とカバレッジ率、テスト工数は一方を追求すればもう一方を犠牲にしなければならないトレードオフの関係にあるため、バランスのとれたテスト戦略が必要です。
不必要に厳しいカバレッジ基準を追求したり、むやみにカバレッジ率100%を目指したりすると、大きな無駄につながることもあるので、注意しましょう。
また、カバレッジはテスト対象の品質やテストの終了条件などの判断基準としても利用できますが、コードカバレッジだけではテストの網羅性を十分に測ることはできません。
例えば、同値分割・境界値分析などの技法を使わず、場当たり的なテストデータを使ってテストしても、カバレッジの値は高くはなりますがバグを見過ごしてしまうことが十分に考えられます。
そのため、カバレッジを過信しすぎず、総合的にテストを考えて行うことが非常に重要です。
まとめ
カバレッジ(網羅率)とは、テスト対象のプログラムがどこまでテスト実施されたのかの割合を表すものです。
テストケース作成技法の1つであるホワイトボックステストはカバレッジと組み合わせることで効率よくテストを進めることができます。
しかし、コードカバレッジは、カバレッジ基準を厳しくすれば検出できる欠陥の種類は増加しますが、必要なテスト工数も増加します。
カバレッジ基準やカバレッジ率を見極め、他のテストやレビューとの併用も含め総合的にテストを考え、実行することが大切です。
本稿は、カバレッジ(網羅率)と、コードカバレッジについてご紹介しました。
▼コードカバレッジについてはこちらの記事もご覧ください。