トレンド情報 / 記事を探すCOLUMN

ホワイトボックステストの必須知識! コードカバレッジをご紹介!

更新日|2018.06.29

Qbook編集部

ホワイトボックステストの必須知識! コードカバレッジをご紹介!

ソフトウェア開発において、プログラミングが終わった直後に実施する単体テストの時点で品質を担保することによって、不要な手戻りを防ぎ、工数増加を抑えることができます。そのテストケースを考える際、ホワイトボックステストの考え方のひとつである「カバレッジ(網羅率)」を計測することで、テストの品質を定量的に評価することが可能になります。

今回はテストケース作成技法のホワイトボックステストと、そこで使用される「コードカバレッジ」についてご紹介します。

ホワイトボックステストとカバレッジ

8607-00008-02

ホワイトボックステストは、ソフトウェアのプログラムを理解した上で、その論理構造が正しいかどうかを解析しテストケースを作成する技法です。ソフトウェアの設計や実装内容から論理構造を網羅するようにテストケースを作成します。

ホワイトボックステストの基本に関してはこちらをご参照ください。

ソフトウェアテストにおいて、対象のプログラムがテストによってどこまで実施されたのか網羅する割合を「カバレッジ(網羅率)」と言います。

テストケースのカバレッジを計測することにより、テストの抜け・漏れを把握することができ、テスト対象の潜在的な不具合の発見にもつながります。

例えば、単体テストではモジュール内部のソースコードを元に、命令文や条件判定を行うテストコードを作成します。このソースコードがテストされた割合を「コードカバレッジ」と呼びます。コードカバレッジは、命令文や判定条件を網羅する度合いにより、いくつか種類が存在します。

代表的なコードカバレッジの種類

主要なコードカバレッジ3つをご紹介します。

【1】ステートメントカバレッジ(C0命令網羅)

コードカバレッジの中で最も基本的なカバレッジです。

テスト対象となるソースコードのうち、実行可能なステートメント(命令)がテストで実行されたかをカバレッジ基準として評価します。

簡単に計測できるステートメントカバレッジは、コードの網羅性が低く、カバレッジ基準の強度は最も低いと言われています。

【2】ブランチカバレッジ(C1条件網羅)

テスト対象となるソースコードのうち、分岐の真/偽が各1回は出現するよう実行された割合です。

ブランチカバレッジはステートメントカバレッジよりも強い評価基準となり、ブランチカバレッジが100%の場合は、必然的にステートメントカバレッジも100%を満たします。

しかし、プログラム中の分岐が論理和(OR)/論理積(AND)を含む複合条件の場合、各条件式の組み合わせは考慮されないため、ブランチカバレッジでは判定式内にある不具合を検出できないケースがあります。

【3】マルチコンディションカバレッジ(C2複合条件網羅)

テスト対象となるプログラム中のブランチが複合条件の場合、各条件の組み合わせをどれくらい実施したのかを表す割合のことです。

ブランチカバレッジとステートメントカバレッジの関係同様、マルチコンディションカバレッジが100%の場合は、ブランチカバレッジ、ステートメントカバレッジも100%となります。

したがって、網羅性で言えば非常に高く、カバレッジ強度も強いのですが、複合条件の組み合わせの分、必要なテストケースも増大するデメリットもあります。

上記のように、テスト対象をどこまで網羅したかを評価する基準はさまざまなものがあります。その網羅度を算出する式を「カバレッジ基準」と呼び、そのカバレッジ基準に基づき、実際に網羅した結果を「カバレッジ」と呼びます。

網に例える場合、カバレッジ率は網がテスト対象を覆っている広さを示し、カバレッジ基準は網目の細かさと言えます。

ホワイトボックステストとカバレッジを活用しよう!

漏れなくテストケースを設計できる

カバレッジ基準を設定することで、目標に沿って、漏れなくテストケースを設計することができます。

テストを実施してカバレッジを測定し、そのカバレッジが基準に満たされなければ、それはテストに実施漏れがあることが分かります。実施漏れがあるということは、テスト設計に漏れがあるということになります。なぜテスト設計に漏れが生じたのかを分析してテストをやり直すことで、網羅性を高めることができます。

コードを実行できないバグを発見できる

8607-00008-03

どんなにテスト項目を費やしたとしても、プログラム中にバグがあるためカバレッジが目標に届かないことがあります。例えば、条件分岐が常に真・偽のどちらかに固定される形になっていたり、冗長なコードがあったりするケースがあります。

このように、カバレッジを計測することで検出につながるバグもあるのです。

コードカバレッジの達成を目的にしてはならない

より厳しいカバレッジ基準で、より高いカバレッジを目標に置いてテストの網羅性を高くするようにすれば、検出できる欠陥は増加しますが、必要なテスト工数も増加します。カバレッジ基準とカバレッジ率、テスト工数は一方を追求すればもう一方を犠牲にしなければならないトレードオフの関係にあるため、バランスのとれたテスト戦略が必要です。

不必要に厳しいカバレッジ基準を追求したり、むやみにカバレッジ率100%を目指したりすると、品質が成熟していてバグの検出が見込まれないと思われる部分も数多くテストしなければならないことにつながり、大きな無駄が生じてしまいます。

また、カバレッジはテスト対象の品質やテストの終了条件などの判断基準としても利用できますが、コードカバレッジだけではテストの網羅性を十分に測ることはできないので、カバレッジを過信しないように注意する必要があります。

例えば、同値分割・境界値分析などの技法を使わず、場当たり的なテストデータを使ってテストしても、カバレッジの値は高くはなりますがバグを見過ごしてしまうことが十分に考えられます。

そのカバレッジの意味するところを見極め、総合的にテストを考えて行うことが非常に重要です。

おわりに

テストケース作成技法の1つであるホワイトボックステストはカバレッジと組み合わせることで効率よくテストを進めることが可能です。しかし、コードカバレッジは、カバレッジ基準を厳しくすれば検出できる欠陥の種類は増加しますが、必要なテスト工数も増加します。カバレッジ基準やカバレッジ率を見極め、他のテストやレビューとの併用も含め総合的にテストを考え、実行することが大切です。

本稿は、ホワイトボックステストのコードカバレッジについてご紹介しました。

ホワイトボックステストのコラムと合わせてご参照ください。

資料ダウンロード

ライター:Qbook編集部

ライター

バルテス株式会社 Qbook編集部。 ソフトウェアテストや品質向上に関する記事を執筆しています。