テスト手法(黒箱、白箱、灰箱)
はじめに
ソフトウェアテストには様々な手法や技法がありますが、今回はブラックボックステストとホワイトボックステストについて、JSTQBのシラバスの内容を参考に紹介します。
ブラックボックステスト
ブラックボックステストは、ソフトウェアの内部構造を参照することなく、ユーザーの視点で期待通りに動作するか確認します。
要件や仕様に基づき、機能の正確性や品質を評価するテストです。
実装方法とは無関係のため、実装が変わっても動作が同じであればテストケースは変わりません。
以下の手法があります。
同値分割法
同値分割法では、同じ動作となるテストデータを同値と見なし、テストデータを有効値/無効値などのパーティションに分割します。
各パーティションに対して、少なくとも1つのテストケースが必要です。
例えば有効文字数が4〜8文字までの項目では、以下3つのテストケースを作成します。
- 最小未満の無効なケース:3文字以下
- 有効な文字数のケース:4〜8文字
- 最大超過の無効なケース:9文字以上
境界値分析
境界値分析は、同値分割したパーティションの境界(最小値/最大値など)をテストする手法です。
例えば有効文字数が4〜8文字までの項目では、以下のテストケースを作成します。
- 最小未満の無効なケース:3文字
- 有効な最小文字数のケース:4文字
- 有効な最大文字数のケース:8文字
- 最大超過の無効なケース:9文字以上
デシジョンテーブルテスト
デシジョンテーブルテストは、複数の条件が組み合わさった場合のテストケースを設計する手法です。
入力値や条件を表形式でまとめ、各条件の組み合わせに対してテストします。
例えば有効文字数があり英数字のみ許可する項目では、以下のテストケースを作成します。
文字数 | 英数字のみ使用 | 英数字以外も使用 |
---|---|---|
最小未満の文字数 | × | × |
有効な文字数 | ○ | × |
最大超過の文字数 | × | × |
状態遷移テスト
状態遷移テストは、システムの状態と遷移を図や表で表し、テストケースを設計します。
遷移はイベントで開始し、イベントに条件や遷移後のアクションが関連付けられることもあります。
ホワイトボックステスト
ホワイトボックステストはソフトウェアの内部構造や実装コードをもとに、各処理が期待通りに動作するか網羅的に評価します。
内部の仕組みを知っていることが前提となり、実装の変更がテストケースに影響しやすいです。
ホワイトボックステスト
ステートメントテスト
ステートメントテストは、プログラムの各処理がすべて実行されることを目標とするテストです。
ステートメントカバレッジは、テストによって通過した処理数を、総処理数で割ったパーセンテージで示します。
但し、カバレッジは100%でもエラーが潜在することがあります。
例えば以下コードは「a=0」の場合にエラーになりますが、「a=1」のテストでカバレッジ100%になります。
def sample(a: float) -> float:
b = 0
if a != 0:
b = 1
return a / b
ブランチテスト
ブランチテストは、プログラムの条件分岐がすべて実行されることを目標とするテストです。
条件分岐が複数ある場合も、すべての分岐を通過するテストケースを作成します。
但し、ステートメントテストと同様にカバレッジは100%でも、エラーが潜在することがあります。
グレーボックステスト
JSTQBのシラバスには定義されていませんが、グレーボックステストも紹介します。
グレーボックステストは、ブラックボックステストとホワイトボックステストの中間に位置します。
内部構造の知識を活用してテストケースを設計したり、内部構造の知識から焦点を絞りユーザー視点のテストを実施します。
おわりに
テストには他にも様々な手法や技法がありますが、
目的に合わせて選択や組み合わせることが大事ですね。
他のテスト手法なども、また調べて記事にまとめたいと思います。
Discussion