カバレッジ


Coverageという言葉自体は、「どれ位のモノや範囲をカバーしているか」という程度を表すことに用います。 身近なものとして無線の例をあげますと、携帯電話や業務用無線において1つの無線 基地局がカバーする地理的な範囲のことを「カバレッジエリア」と言います。 ソフトウェア開発の世界でカバレッジというと、ソフトウェアコード(パス)に対して「どの程度テストを実施したか」というテストの消化具合を表すために使用します。ここでミソとなるのは「どの程度」をどう定義するのかということです。ソフトウェアテストを実施する為に、どれ位の網を掛けるかと言い換えることもできるでしょう。このため、もし何の定義もせず「100%のカバレッジにてテストを完了した」と言 い切ってしまうと、全てのエラーを排除できた。つまり完璧なテストを実施したという全く夢物語のようなことを意味してしまいます。完璧なテストがどうして「夢物語」なのかは以下のカバレッジの説明から理解してく ださい。

では、よく使われる定義から説明していきましょう。 まずは、C0,C1,C2というのがあります。

  • C0:命令網羅率(ステートメントカバレッジ):コード内の全てのステートメントを 少なくとも1回は実行
  • C1:分岐網羅率(ブランチカバレッジ)コード内の全てのブランチを少なくとも1回は実行
  • C2:条件網羅率(コンディションカバレッジ):コード内のすべての条件を少なくと も1回は実行

カバレッジの定義については、1970年代中盤から使われていたようですが、C0,C1と言 い出したのはエド・ミラー:Ed Millerさんで、1976年位のことです。この定義はほぼ時を同じくして、ご本人から我が国のエンジニアに伝えられたそうです。

テストの終了判定に用いるという意味においては、テストの設計度合いを示すものと実行度合いを示すカバレッジに分けて考えられます。 設計カバレッジ:設計するべきテストケースをきちんと設計したかを示す 実行カバレッジ:実行するべきテストケースをきちんと実行したかを示す パスカバレッジを用いるC0,C1,C2基準は後者に当たります。 では、どれ位テストを実施すればよいかといえば、C0やC1については、単体テスト/ ホワイトボックステストレベルで100% 網羅するべきです。しかしながらカバレッジ測定を人間がするとなると大変な手間がかかることは想像に難くありません。 メジャーなプログラミング言語には大抵 無料/有料のカバレッジ測定ツールがあり ますので、いろいろと試してみると良いでしょう。 統合テストやシステムテストといったプラックボックステストにおいて、C0,C1 100 %というのは現実的に不可能です。  理由は簡単で、コードの中身を知らずに全ての命令/分岐を通るようなテスト設計す ることは出来ないからです。 そこでブラックボックステスト手法では、ドメインテストや境界値分析などといった テクニックを用いてテスト設計することにより、要件に対するカバレッジを確保します。

カバレッジ定義には他にもいろいろとあります。以下はそれらの一部です。 いろいろあると、どの定義を使用すべきか悩むかもしれませんが、大切なのは、何のためにテストを実施するのかを見極めた上で、テスト設計することです。C0,C1カバレッジが100%だったとしても、単にプログラムが異常終了しなかったことを証明したに過ぎません。仕様と合致しているかや、エラー処理がきちんと組み込まれているかま では検証できないことを理解しておきましょう。

その他のカバレッジ>

  • Modified Condition/Decision (MC/DC) Coverage
  • Data Flow Coverage
  • Loop Coverage etc.