カバレッジとは
カバレッジとは、「網羅率」と訳される英単語です。
対象範囲においてどれほどを網羅しているかの割合のことを指しています。
ほかの業界でも使われる用語ですが、ソフトウェアテストにおけるカバレッジとは、どの程度コードや機能がテストされているかを示す指標のことです。
カバレッジは基本的に割合(%)で表現されるので定量的に表される指標になります。論理構造が把握できるホワイトボックステストで用いられる考え方です。
ソフトウェアの品質を高めるためにカバレッジを設定することは重要です。
カバレッジは定量的な指標であるため、ソフトウェアの品質を数値で表すことができます。
また、テストの網羅性を評価し、見落としや欠陥を減らすための重要な手段として利用されます。
3つの代表的なコードカバレッジ
コードカバレッジとは、ソースコードレベルでテストがどの程度実行されたかを示す指標です。
コードカバレッジは、命令文や判定文をどのように網羅したかで種類がいくつか存在します。
ここでは、代表的な3つのコードカバレッジを紹介します。
- ステートメントカバレッジ
- デシジョンカバレッジ
- 複合条件カバレッジ
ステートメントカバレッジ(略称C0)
ステートメントカバレッジとは、テストで実行されたコード行の割合のことで、全コード行の何%がテストされたかを示します。
定義としては、コード内のすべての命令文(ステートメント)が少なくとも1回実行された割合、となります。
別名で、命令網羅率ともいいます。
計算方法は以下です。
ステートメントカバレッジ(%) = 実行済みステートメント数 / (全ステートメント数) × 100
ステートメントカバレッジは、実質的な網羅性、カバレッジ基準のテスト強度は低くなります。
なぜなら、条件文を満たす方にだけ命令文がある場合には、条件を満たす場合のみテストすることになり、条件を満たさないルートにある不具合は発見できなくなるからです。
デシジョンカバレッジ(略称C1)
デシジョンカバレッジとは、条件文の結果(true または false)に基づくすべての分岐がどれほどカバーされているかを示す割合のことです。
分岐条件や真/偽の経路を各1回は通るようにテストします。
条件文としての成立と不成立の両方に着目してカバレッジを判断しています。
計算方法は以下です。
デシジョンカバレッジ(%) = (実行された分岐数) / (全分岐数) × 100
ステートメントカバレッジで網羅しなかった、条件を満たさない場合も経路としてテストするので、ステートメントカバレッジよりも網羅性・カバレッジ基準のテスト強度が強くなるので、デシジョンカバレッジが確保されていればステートメントカバレッジも確保されます。
しかし、複数の条件を組み合わせてテストを行うわけではありません。
それで、プログラム中の分岐に、複数の条件を組み合わせた複合条件が登場する場合、複合条件の判定式の不具合を検出することができません。
なお、複合条件は論理和(OR)や論理積(AND)などの論理演算で表現されます。
複合条件カバレッジ(略称C2)
複合条件カバレッジは、条件式内のすべての単一の条件の組み合わせを網羅することを目指します。
条件式が複数の条件(例えば、論理和(OR)や論理積(AND) を使用した条件)を含んでいる場合、それぞれの条件がtrueまたはfalseとなるすべての組み合わせをテストします。
計算方法は以下です。
複合条件カバレッジ(%) = (テストされた組み合わせ数) / (全組み合わせ数) × 100
すべての条件を満たすようにテストを行うので、網羅性、カバレッジ基準のテスト強度はデシジョンカバレッジよりも非常に強く、複合条件カバレッジが確保されていれば、より下位のデシジョンカバレッジとステートメントカバレッジは確保されます。
しかしながら、複合条件の組合せの分、テストケースは増大します。
カバレッジを設定する利点
ここでは、カバレッジを設定する利点を3つ紹介します。
まず、テストの抜け漏れを防止することができます。
カバレッジ基準を設定すれば、漏れなくテストケースを設計することができます。
テストを実施し、測定したカバレッジが基準を満たしていなければ、テストされていないコードや機能があるということがわかります。
これにより、重要なコードがテスト対象外になっているリスクを低減できます。
また、バグの削減を促進することができます。
テスト未実施部分が減ることで、未発見のバグを防止する可能性が高まります。
また、テスト項目を増やしてもカバレッジが基準に満たない場合には、コードが冗長であったり、条件が回帰している部分を発見することができるかもしれません。
また、カバレッジを設定し、テスト工程で測定していくなら、テスト作業の進行状況を可視化できます。
これにより、テストがどれほどの範囲に及んでいるか、またテストの実施漏れがないかを客観的に確認することができます。
カバレッジ計測時の注意点
前述したようにテストの網羅性をあげて、高いカバレッジを求めることは重要ですが、高いカバレッジであれば、ソフトウェアテストの品質が高くなるわけではありません。
高いカバレッジを求めれば求めるほど、見つかる欠陥も増える分、必要なテスト工数も多くなります。
むやみにカバレッジ率100%を目指しても、大きな無駄になってしまうことがありますので注意しましょう。
また、重要な機能やリスクの高い部分に重点を置き、全体的なカバレッジだけでなく、テストケースの質にも注力するようにしましょう。
誤作動防止用のソースコードなど通常はあまり使われないような部分ではなく、よく使われる機能や顧客が最も必要としている機能などに絞ってテストしていきましょう。
カバレッジを過信せず、総合的なテスト設計を行えば高い品質の検証を行えるはずです。