ITパスポート 2013年 春期 問37
問題文
ホワイトボックステストのテストケース作成に関する記述のうち、適切なものはどれか。
選択肢
ア:入力条件が数値である項目に対して、文字データを設定してテストケースを作成する。
イ:入力データと出力データを関係グラフで表現し、その有効な組合せをテストケースとして作成する。
ウ:人の体重を入力するテストで、上限値を300kg、下限値を500gと設定してテストケースを作成する。
エ:プログラムの全ての分岐経路を少なくとも1回実行するようにテストケースを作成する。(正解)
🔒 解説は解答すると表示されます
経路網羅【ITパスポート解説】
正解の理由
選択肢エは、プログラムの「全ての分岐経路を少なくとも1回実行するようにテストケースを作成する」という記述です。これは経路網羅(けいろもうら、path coverage:プログラムの可能な実行経路を網羅するテスト設計手法)に当たります。ホワイトボックステスト(内部構造を見るテスト、white-box testing)はプログラムの制御構造や分岐を利用してテストケースを作る手法なので、内部の「分岐経路」を意識して網羅するという考え方は適切です。したがって選択肢エが正解です。
解法ステップ
- 問題文で「ホワイトボックステスト(内部構造を基にテストする手法)」を確認する。
- ホワイトボックスで代表的な設計視点を思い浮かべる:文網羅(statement coverage)、分岐網羅(branch coverage)、経路網羅(path coverage)など。
- 各選択肢がホワイトボックスに合うかどうかを判定する。内部構造(分岐・条件)を基にしているものが正しい候補。
- 候補の中で用語の意味や現実性をチェックして最も適切なものを選ぶ(ここでは経路網羅を示すエ)。
選択肢別の誤答解説
- ア: 入力条件が数値の項目に文字データを入れる。
- これは不正入力テストやバリデーション(入力チェック)を確認する「ブラックボックス的」または例外処理の確認に近い手法です。ホワイトボックスでは主にプログラムの内部分岐・条件を基にケースを作るので、この記述はホワイトボックスの代表的な説明とは言えません。また、実行時に型エラーや入力拒否でそもそも対象コードまで到達しない場合もあります。
- イ: 入力データと出力データを関係グラフで表現し、その組合せをテストケースにする。
- これは因果表や関係(関係グラフ)を使ったテスト設計で、ブラックボックステスト(仕様や入力・出力の関係を見る)に近い手法です。ホワイトボックスは内部の条件や分岐を基にするため、この説明は該当しません。
- ウ: 人の体重の上限を300kg、下限を500gに設定する。
- 具体値の設定として「現実性や単位の確認が必要」です。500g(0.5kg)は通常の人間の体重として現実的ではなく、テスト設計として妥当性に疑問があります。さらに、この選択肢はホワイトボックスの手法(内部分岐の網羅)を示すものではありません。
- エ: プログラムの全ての分岐経路を少なくとも1回実行するようにテストケースを作成する。
- これは経路網羅(path coverage)を表し、ホワイトボックステストの考え方に合致します。よって正解です。
よくある誤解
- 経路網羅と分岐網羅を同じものと考える誤解
- 分岐網羅(branch coverage、ブランチカバレッジ)は「各分岐(if 文など)のそれぞれの結果(真/偽)を少なくとも1回実行する」ことです。一方、経路網羅(path coverage)は「開始から終了までの可能な実行経路を全て(または規定の範囲で)実行する」ことです。複数の分岐が組み合わさると経路は指数的に増え、分岐網羅を満たしていても経路網羅を満たしていない場合が多くあります。
- 経路網羅は常に実現可能と考える誤解
- ループや多数の条件があると可能な経路は非常に多く(理論上は無限になることも)、実用的には全経路を取るのは困難です。ループ回数に上限を設けるなどの工夫が必要です。
- 不正入力テストはホワイトボックスの専売特許と誤解すること
- 不正入力(例:数値項目に文字を入れる)は主にブラックボックスでのバリデーション確認で使われます。ホワイトボックスは内部の条件分岐や処理フローに着目します。
補足コラム
- カバレッジの種類(簡潔まとめ)
- 文網羅(statement coverage):各文(コード行)を少なくとも1回実行する。
- 分岐網羅(branch coverage / ブランチカバレッジ):各分岐の結果(true/false)を少なくとも1回実行する。
- 条件網羅(condition coverage):複合条件の個々の部分が真/偽になる組合せを確認する。
- 経路網羅(path coverage / パスカバレッジ):開始から終了までの実行経路をすべて(または定義された範囲で)実行する。
- 例(簡単な擬似コードで差を確認)
# A: if x>0: # do1() # if y>0: # do2()- 分岐網羅:x>0 の真・偽、y>0 の真・偽をそれぞれ実行すればOK(例:(x>0,y>0)=(T,F) と (F,T) などで達成)。
- 経路網羅:上の組合せすべて((T,T),(T,F),(F,T),(F,F))を少なくとも1回ずつ実行する必要がある。分岐網羅より厳しい。
- 実務では分岐網羅を目標にし、重要箇所で条件網羅や経路網羅を追加する、という使い分けが多いです。
FAQ
Q1: 経路網羅はいつ使うべきですか?
A1: 重要度が高く、バグが致命的になり得る機能や、分岐が少ない小さなモジュールでは有効です。分岐が多い大規模コードでは現実的でないため、分岐網羅や条件網羅を優先します。
A1: 重要度が高く、バグが致命的になり得る機能や、分岐が少ない小さなモジュールでは有効です。分岐が多い大規模コードでは現実的でないため、分岐網羅や条件網羅を優先します。
Q2: ループがあると経路網羅はどうなる?
A2: ループ回数に応じて経路数が増えるため、実務では「ループ0回・1回・複数回」など代表的なケースに限定して試験することが多いです(ループ制限を設ける)。
A2: ループ回数に応じて経路数が増えるため、実務では「ループ0回・1回・複数回」など代表的なケースに限定して試験することが多いです(ループ制限を設ける)。
Q3: 分岐網羅と経路網羅の違いを一言で言うと?
A3: 分岐網羅は「各分岐の両方(真/偽)を通る」、経路網羅は「開始から終了までのすべての通り道を通る」です。
A3: 分岐網羅は「各分岐の両方(真/偽)を通る」、経路網羅は「開始から終了までのすべての通り道を通る」です。
関連キーワード: ホワイトボックステスト、経路網羅、分岐網羅、ブランチカバレッジ、パスカバレッジ、テスト設計

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

