基本情報技術者 2016年 春期 午前(科目A) 問49
問題文
流れ図で表される部分を命令網羅によってテストするとき、テストケースは少なくとも幾つ用意する必要があるか。

選択肢
ア:2(正解)
イ:3
ウ:4
エ:5
🔒 解説は解答すると表示されます
命令網羅テストの最小ケース数【午前解説】
正解の理由
正解は ア です。
命令網羅(ステートメントカバレッジ)は「プログラム中の全ての命令(処理ノード)を少なくとも1回実行する」ことを要求します。本図では処理ノードが x = 1, x = 2, y = 1, y = 2 の4つあります。1つの実行(1テストケース)は上段の判定でどちらか一方の x を、下段の判定でどちらか一方の y を必ず実行するため、1件のテストで2つの処理命令が実行されます。したがって、4つの命令を網羅するために必要な最小テスト数は で十分です。具体例として (a=0,b=0) と (a≠0,b≠0) の2パターンで x=1,x=2,y=1,y=2 を全て実行できます。
命令網羅(ステートメントカバレッジ)は「プログラム中の全ての命令(処理ノード)を少なくとも1回実行する」ことを要求します。本図では処理ノードが x = 1, x = 2, y = 1, y = 2 の4つあります。1つの実行(1テストケース)は上段の判定でどちらか一方の x を、下段の判定でどちらか一方の y を必ず実行するため、1件のテストで2つの処理命令が実行されます。したがって、4つの命令を網羅するために必要な最小テスト数は で十分です。具体例として (a=0,b=0) と (a≠0,b≠0) の2パターンで x=1,x=2,y=1,y=2 を全て実行できます。
解法ステップ
- フローチャートの処理ノード(命令)を数える:x=1, x=2, y=1, y=2 → 合計4件。
- 1実行で実行される命令数を確認する:上段でxのどちらか1つ、下段でyのどちらか1つ→合計2命令/テスト。
- 最小テスト数を算出:。
- 具体テストを設計:例として (a=0,b=0) → x=1,y=1、(a≠0,b≠0) → x=2,y=2。これで全命令を実行できる。
選択肢別の誤答解説
- ア: 正解。上記の通り、2件で全命令を網羅可能です。
- イ(3): 不要に多い。3件あれば確実ですが「最小」ではありません。2件で十分なので誤りです。
- ウ(4): これは全パス(パス網羅)の場合の数で、各判定の組合せ4通りをすべて実行する必要があるときの数です。命令網羅の要件より厳しいため過剰です。
- エ(5): 完全に過剰です。命令網羅の最小要件とは無関係に不必要なテスト数になります。
よくある誤解
- 「判定ごとの全組み合わせ(全パス)を網羅しなければならない」と考える誤り:パス網羅は4件必要ですが命令網羅は異なります。
- 「命令網羅=判定網羅だ」と混同する誤り:判定網羅は各判定の両側(Yes/No)を少なくとも1回実行することですが、この図では2件で達成可能でも定義は別です。
- 「1件で全部カバーできる」との誤り:1件ではx系・y系のうち片方ずつしか実行されず、残りの命令が未実行になります。
補足コラム
- 命令網羅(ステートメントカバレッジ)はテスト基準として最も基本的で、実行効率が高い反面、分岐や条件の網羅性は保証しません。品質向上を図るなら判定網羅/条件網羅/パス網羅など、より厳しい基準へ拡張する必要があります。
- 本図のように独立した判定が直列に並ぶ場合、多くは命令網羅と判定網羅で必要な最小テスト数が同じになることがありますが、一般論として基準は区別して扱ってください。
FAQ
Q: なぜ1件ではダメなのか?
A: 1件の実行では上段のxはどちらか一方、下段のyもどちらか一方しか実行されず、計4命令のうち2命令が未実行となるためです。
A: 1件の実行では上段のxはどちらか一方、下段のyもどちらか一方しか実行されず、計4命令のうち2命令が未実行となるためです。
Q: 判定網羅(判定の両側を実行)なら何件必要ですか?
A: この図では判定ごとにYes/No両方を実行すればよく、設計次第では2件で両判定の両側をカバーできます(例:a=0,b=0 と a≠0,b≠0)。
A: この図では判定ごとにYes/No両方を実行すればよく、設計次第では2件で両判定の両側をカバーできます(例:a=0,b=0 と a≠0,b≠0)。
Q: パス網羅だとどうなる?
A: 上段×下段で4通りの経路があり、パス網羅は4件必要です。
A: 上段×下段で4通りの経路があり、パス網羅は4件必要です。
関連キーワード: 命令網羅、ステートメントカバレッジ、判定網羅、パス網羅、テストケース設計

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

