単体テストとは何か、なぜ必要なのか【後編】はじめての単体テスト(3/4 ページ)

» 2021年09月22日 06時00分 公開

5.3 ホワイトボックステストとは

5.3.1 概要

 ホワイトボックステストは、ソフトウェアの内部構造に着目し、テストケースを設計するテスト手法です。

 ホワイトボックステストでは、ソフトウェアの内部構造を網羅するようなテストケースを作成し、作成したテストケースがプログラムをどのくらい実行(網羅)できているかのテスト品質指標としてカバレッジ(網羅率)を計測します。ブラックボックステストと違い、関数の仕様を理解していなくてもカバレッジを100%にすることが可能なため、比較的簡単に取り組むことができるテストといえます。

 時折、「自社ではカバレッジを100%にしているので何も問題ない」というお客さまの声を耳にすることがありますが、カバレッジ100%=不具合0ということではないため、この点には注意が必要です。カバレッジが100%というのは、あくまでもテスト対象関数の全ての命令を実行した、という事実でしかないからです。カバレッジの網羅は、実行されないデッドコードの発見や永久ループの発見にはつながりますが、たとえカバレッジが100%であっても、それが仕様通りであって不具合がないと判断できるかといえば、それは全く別の話となります。そのため、ブラックボックステストで仕様通りに実装できていることを確認し、かつ、ホワイトボックステストでカバレッジを計測しつつ、その過程で不具合を発見し、プログラムの堅牢性を確認するといった両立が必要となります。

5.3.2 カバレッジ(網羅性)について

5.3.2.1 概要

 ホワイトボックステストでは、主にソースコードの命令文や分岐条件の実行有無を計測しますが、特にこのソースコードがテストされた割合のことをコードカバレッジと呼びます。コードカバレッジにはいくつかの基準があります。

より厳格なカバレッジ基準を目指せば、その分、テスト設計に必要な工数も増えていくため、そのプログラムがシステムに与える影響度合いによって適切なカバレッジ基準を選び、テストを実施することが重要となります。以下に、代表的なコードカバレッジ基準をいくつかご紹介します。

5.3.2.2 ステートメントカバレッジ(命令網羅/C0)

 ステートメントカバレッジは、日本語で「命令網羅」と呼ばれるように、ソースコードの実行可能な命令文全体のうち、テストでどのくらい実行したかを評価します。

 ステートメントカバレッジでは、条件分岐があった場合、いずれかの条件のパスを通って命令が1回実行されると、その時点でカバレッジが達成されたと見なすため、コードの網羅性が低いカバレッジ基準であるといえます。

図9:ステートメントカバレッジ(クリックして拡大) 出典:ベクター・ジャパン

5.3.2.3 ブランチカバレッジ(分岐網羅/C1)

 ブランチカバレッジは、日本語で「分岐網羅」と呼ばれるように、ソースコードの判定条件(if文など)の真偽を、テストでどのくらい実行したかを評価します。

 ブランチカバレッジでは、真偽の両方を評価するため、ステートメントカバレッジよりも網羅性の高いカバレッジ基準であるといえます。ただし、ブランチカバレッジでは、判定条件内のANDやORを含む複合条件の組み合わせまでは考慮しないため、全ての条件の組み合わせを網羅できるわけではありません。ブランチカバレッジが100%網羅されているのであれば、同時にステートメントカバレッジも100%を達成できます。

図10:ブランチカバレッジ(クリックして拡大) 出典:ベクター・ジャパン

Copyright © ITmedia, Inc. All Rights Reserved.