ITパスポート 2014年 春期 問35
問題文
ソフトウェアのテストで使用するブラックボックステストにおけるテストケースの作り方として、適切なものはどれか。
選択肢
ア:全ての分岐が少なくとも1回は実行されるようにテストデータを選ぶ。
イ:全ての分岐条件の組合せが実行されるようにテストデータを選ぶ。
ウ:全ての命令が少なくとも1回は実行されるようにテストデータを選ぶ。
エ:正常ケースやエラーケースなど、起こり得る事象を幾つかのグループに分けて、各グループが1回は実行されるようにテストデータを選ぶ。(正解)
🔒 解説は解答すると表示されます
ソフトウェアのテスト(ブラックボックステストのテストケース作成)【ITパスポート 解説】
正解の理由
ブラックボックステスト(black-box testing:内部のコードや構造を見ずに、入力と出力の振る舞いだけで検証する方法)では、実際に起こり得る事象を「グループ(等価な入力のまとまり)」に分けて、それぞれから代表的なケースを選ぶ手法が有効です。選択肢の中では、エの「正常ケースやエラーケースなど、起こり得る事象を幾つかのグループに分けて、各グループが1回は実行されるようにテストデータを選ぶ。」が、まさに等価クラス分割(equivalence partitioning:入力を似た性質ごとにまとめる)やエラーパスの確認といったブラックボックスの考え方に合致します。
他の選択肢(ア・イ・ウ)は、分岐網羅や命令網羅などコードの内部構造を意識して「全ての分岐」「全ての命令」「分岐条件の組合せ」を網羅する考え方です。これらはホワイトボックステスト(white-box testing:内部構造を見て設計する方法)に該当するため、ブラックボックスのテストケース作成方法としては不適切です。
解法ステップ
- 仕様書や要求を読む(入力値、出力、例外条件を把握)。
- 入力範囲や条件を「等価クラス」に分ける(正常系/異常系、境界を含む)。
- 各等価クラスから代表値を1つ選ぶ(代表値テスト)。
- 境界値(boundary value analysis:境界値分析)も追加で選ぶ(境界の前後や境界そのものを検証)。
- エラーケース(無効入力、空入力、形式不正など)を含める。
- 優先度(頻度や影響度)をつけて実行順を決める。
- 実行結果を仕様と照合し、期待結果と異なれば不具合報告を行う。
短い例:
- 仕様:年齢入力は整数で 0〜120 の範囲
- 等価クラス:負の数、0〜120 の有効値、121以上、空入力(4つ)
- 代表値:-1、25、121、空
- 境界値追加:0、1、119、120
選択肢別の誤答解説
-
ア: 「全ての分岐が少なくとも1回は実行されるようにテストデータを選ぶ。」
→ これは分岐網羅(branch coverage)と呼ばれる手法で、コード内部の分岐(if 文など)を基にテストを作ります。内部構造の把握が必要なのでブラックボックスの定義に合いません。 -
イ: 「全ての分岐条件の組合せが実行されるようにテストデータを選ぶ。」
→ すべての条件組合せを試すのは条件網羅(condition combination coverage)に相当します。条件が多いと組合せが爆発的に増える(combinatorial explosion)ため現実的でないことが多く、やはりホワイトボックス向けです。 -
ウ: 「全ての命令が少なくとも1回は実行されるようにテストデータを選ぶ。」
→ これは命令網羅(statement coverage)で、ソースコード中の全命令を実行することを目標にします。内部の命令構造が分かっていないと設計できません。 -
エ: 「正常ケースやエラーケースなど…各グループが1回は実行されるようにテストデータを選ぶ。」
→ 仕様や外部から見た動作(入力と出力)に基づいてグループ化するため、ブラックボックステストの基本的かつ効率的なやり方です。よって正しい選択肢です。
よくある誤解
-
誤解1: 「ブラックボックスは正常系だけでよい」
→ 実際はエラー系(不正入力、異常値)も重要です。正常系だけでは現実の障害を見つけられません。 -
誤解2: 「分岐や命令網羅はブラックボックスでもできる」
→ 分岐網羅や命令網羅はソースコードを基にテスト設計するホワイトボックス手法です。ブラックボックスでは仕様に基づいた等価クラスや境界値を優先します。 -
誤解3: 「等価クラスは適当にまとめてよい」
→ まとめ方が誤っていると代表値で不具合を見逃します。仕様で区切りが明示されている場合は、それに沿って正確に分けることが重要です。
補足コラム
-
等価クラス分割(equivalence partitioning)
→ 入力空間を「同じ振る舞いが期待できるまとまり」に分けます。たとえば「0〜120」「負の数」「121以上」など。各クラスから1つ代表値を選べば、同じクラスの他の値は同様の結果になると仮定します。 -
境界値分析(boundary value analysis)
→ バグはしばしば境界付近で起こるため、境界そのものとその直前・直後を重点的にテストします。上の例なら 0、1、119、120、-1、121 などをチェックします。 -
決定表テスト(decision table testing)
→ 条件が複数あるとき、条件の組合せを整理して重要な組を選ぶ手法です。全組合せを試すのは難しいので、代表的な組合せを抜き出します(ブラックボックスで使えることもあります)。
FAQ
Q1: ブラックボックスとホワイトボックス、どちらが優先ですか?
A1: 目的によります。機能の正しさを確認するならブラックボックスが基本です。コードの品質や実装漏れを確認するならホワイトボックスを使います。実務では両方併用することが多いです。
A1: 目的によります。機能の正しさを確認するならブラックボックスが基本です。コードの品質や実装漏れを確認するならホワイトボックスを使います。実務では両方併用することが多いです。
Q2: 等価クラスはいくつ作れば十分ですか?
A2: 仕様に基づき「意味のある区分」を作ることが重要です。無理に増やすより、正常系・代表値・境界値・主要な異常系を確実にカバーするほうが実用的です。
A2: 仕様に基づき「意味のある区分」を作ることが重要です。無理に増やすより、正常系・代表値・境界値・主要な異常系を確実にカバーするほうが実用的です。
Q3: テストケースは何件必要か?
A3: 完全網羅は現実的でないことが多いです。頻度・影響度・実行コストを考え、優先度をつけて重要なケースから実行します。
A3: 完全網羅は現実的でないことが多いです。頻度・影響度・実行コストを考え、優先度をつけて重要なケースから実行します。
関連キーワード: テスト設計、等価クラス分割、境界値分析、決定表、分岐網羅、命令網羅、ブラックボックステスト(black-box testing)

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

