はじめに
ここでは、ホワイトボックステストにおける重要な設計技法についてやっていきます。この知識は『ソフトウェア開発プロセスの効率性と品質を向上させ、リスクやコストを軽減すること』役立ちます。逆を言えば、この知識がないと無駄なリスクやコストを垂れ流し続けてしまう恐れがあります。
そうならないように、ここでは試験でも頻出する5つのホワイトボックステストにおける重要な設計技法を解説していきます。
また、似たような単語ばかりで紛らわしいですが、ある部分に注目すると一発で違いが明確になります。以下では、その着眼点も紹介していきます。
【今回扱う5つの用語】
()括弧はどのように役立つかを示しています。
- 命令網羅(プログラム内の全ての命令をテストすることで、全体の動作を確認。)
- 条件網羅(条件式を真偽の両方でテストし、条件分岐の正確性を確認。)
- 分岐網羅(すべての条件分岐をテストし、プログラムのすべての動作パスを確認。)
- 複数条件網羅(複数の条件の組み合わせをテストし、特定の条件組み合わせでの動作を確認。)
- 判定条件/条件網羅(各条件が正しく判定されるかを確認し、プログラムの条件処理の正確性を確認。)
命令網羅
- 命令網羅(Statement Coverage)は、プログラム内のすべての命令が少なくとも1回は実行されることを確認するテスト技法です。
- 命令網羅はプログラム内のすべての命令をテストすることで、プログラム全体の正確性を確認する手法です。
たとえ:命令網羅
def calculate_sum(a, b):
result = a + b
print("計算結果:", result)
return result
このプログラムでは、calculate_sum
関数が定義されています。この場合、命令網羅を行うためには、関数内のすべての命令が実行されるようにテストする必要があります。
命令網羅を行うためには、たとえば以下のようなテストケースを作成します。
calculate_sum(2, 3)
:関数内のすべての命令が実行されるcalculate_sum(0, 0)
:同様に、関数内のすべての命令が実行される
このように、すべての命令を少なくとも1回は実行するテストケースを用意することで、命令網羅を達成します。命令網羅を行うことで、プログラムのすべての部分が正しく動作するかどうかを確認し、バグを見つけることができます。
条件網羅
- 条件網羅(Condition Coverage)は、プログラム内の個々の条件が真と偽の両方の場合をテストするテスト技法です。
- 条件網羅では、各条件が独立してテストされるのが特徴です。
たとえ:条件網羅
x > 5 と y < 10のように2つの条件を持つif文の場合:
if x > 5 and y < 10:
print("条件が成立しました")
else:
print("条件が成立しません")
条件網羅では、x > 5
と y < 10
の真偽の組み合わせは考慮しない。あくまでも、個々の条件に焦点をあててTrueとFalseを満たすことを確認する。
分岐網羅(判定条件網羅)
- 分岐網羅(Branch Coverage)は、プログラムの中で条件分岐がある場合に、それらの条件分岐がすべてテストされることを確認するテスト技法です。
- 分岐網羅では、プログラム全体の動作を確認するため、各条件の影響だけでなく、それらがどのように組み合わさるかも考慮されます。
- 分岐網羅は判定条件網羅とも呼ばれる
*条件分岐:プログラムは、ある条件が真であるか偽であるかに応じて、異なる命令や処理を実行することがあります。これが条件分岐です。
たとえ:分岐網羅
x > 5 と y < 10のように2つの条件を持つif文の場合:
if x > 5 and y < 10:
print("条件が成立しました")
else:
print("条件が成立しません")
分岐網羅では、条件1つ1つの真偽というよりも、結果として出力される真と偽に焦点を当てる。
複数条件網羅
- 複数条件網羅(Multiple Condition Coverage)は、プログラムの中で複数の条件が組み合わさった場合に、すべての条件の組み合わせをテストすることを目指すテスト技法です。
- 複数条件網羅はユーザーがソフトウェアを使用する際に予期せぬ問題やエラーが発生する可能性が低くなり、よりスムーズなエクスペリエンスを提供できます。(=ユーザーエクスペリエンスの向上)
たとえ:複数条件網羅
x > 5 と y < 10のように2つの条件を持つif文の場合:
if x > 5 and y < 10:
print("条件が成立しました")
else:
print("条件が成立しません")
複数条件網羅では、出力結果には焦点を当てず、内部の条件の組み合わせのみに焦点を当てる。
→x > 5
かつ y < 10
の両方が同時に満たされる場合と、片方または両方が満たされない場合の組み合わせをテストします。
判定条件/条件網羅
- 判定条件/条件網羅はプログラム内の条件文がすべて正しく機能するかを確認するテスト手法です。
- 判定条件/条件網羅は分岐網羅(判定条件網羅)と条件網羅をあわせたもの
たとえ:判定条件/条件網羅
以下のプログラムは、ユーザーの年齢をチェックし、18歳以上の場合に「アクセスを許可します」と表示し、18歳未満の場合に「アクセスを拒否します」と表示します。
def check_age(age):
if age >= 18:
print("アクセスを許可します")
else:
print("アクセスを拒否します")
# テストケース1:年齢が18歳以上の場合
check_age(20)
# テストケース2:年齢が18歳未満の場合
check_age(15)
このプログラムでは、check_age
関数が定義されています。条件文 if age >= 18
が18歳以上かどうかを判断し、それに応じてメッセージを表示します。
上記のプログラムでは、2つの異なる年齢のテストケースを作成しています。
- テストケース1では、年齢が20歳であり、18歳以上のため「アクセスを許可します」と表示されます。
- テストケース2では、年齢が15歳であり、18歳未満のため「アクセスを拒否します」と表示されます。
これにより、プログラム内の条件文が正しく動作するかどうかを確認することができます。判定条件/条件網羅を行うことで、年齢に関する条件処理が正確に行われているかを確認できます。
条件網羅と判定条件/条件網羅の違い
条件網羅は、プログラム内のすべての条件が正しく動作するかを確認するテスト方法です。つまり、条件文が「真」と「偽」の両方でテストされます。例えば、ある条件が「x > 5」であれば、「x」が5より大きい場合と5以下の場合の両方をテストします。
一方、判定条件/条件網羅は、プログラム内の条件文が正しく判定されるかを確認するテスト方法です。つまり、条件文が正しく判断されるかどうかを確認します。例えば、ある条件が「x > 5」であれば、「x」が5より大きい場合に正しく「真」と判定され、5以下の場合に正しく「偽」と判定されるかどうかをテストします。
まとめ
- 命令網羅とはプログラム内の全ての命令をテストすることで、全体の動作を確認するもの
- 条件網羅とは条件式を真偽の両方でテストし、条件分岐の正確性を確認するもの
(出力結果よりも個々のTrue/False入力に焦点を当てるを当てる) - 分岐網羅とはすべての条件分岐をテストし、プログラムのすべての動作パスを確認。
(個々のTrue/False入力条件よりも、出力結果のTrue/Falseに焦点を当てる) - 複数条件網羅とは複数の条件の組み合わせをテストし、特定の条件組み合わせでの動作を確認。
(個々のTrue/False入力条件ではなく、それぞれの条件の組み合わせに焦点を当てる) - 判定条件/条件網羅:各条件が正しく判定されるかを確認し、プログラムの条件処理の正確性を確認
(個々のTrue/False入力条件に焦点を当てつつも、出力結果のTrue/Falseにも焦点を当てる)
要するに、見分け方としては【条件の内部に焦点を当てるのか/内部の組み合わせに焦点を当てるのか/出力に焦点を当てるのか】ということを意識すれば、おのずと違いが明確になります。
おわりに
今回は命令網羅(判定条件網羅)、条件網羅、分岐網羅、複数条件網羅、判定条件/条件網羅の○○網羅について5つ学習してきました。
一見すると違いがあいまいに見えますが、焦点を当てる場所に気を付ければ意外と理解できますよね。もし、この記事を通してあなたの苦手意識が小さくなったなら幸いです。
では、今日はこの辺でお別れとさせていただきます。ありがとうございました!さらばじゃ!(笑)
【この記事も一緒に読まれています】