応用情報技術者 2017年 春期 午前2 問48
問題文
流れ図において、分岐網羅を満たし、かつ、条件網羅を満たすテストデータの組みはどれか。


選択肢
ア:
イ:
ウ:
エ:(正解)
🔒 解説は解答すると表示されます
分岐網羅と条件網羅【午前2解説】
正解の理由
選択肢エのテスト集合 {(x=1,y=2), (x=0,y=1), (x=0,y=2)} は、フローチャート上のすべての判定の両方の分岐(True/False)を実行するとともに、複合判定の各原子条件がそれぞれTrue/Falseを少なくとも一度はとるため、分岐網羅と条件網羅の両方を満たします。
具体的には:
- 第一判定D1: x ≥ 1 or y = 1
- Trueを与えるケース: (1,2)(x ≥ 1)および (0,1)(y = 1)
- Falseを与えるケース: (0,2)(x < 1かつy ≠ 1)
- よってD1の両分岐が実行される
- D1の原子条件
- x ≥ 1は (1,2) でTrue、(0,1)/(0,2) でFalse → 条件網羅を満たす
- y = 1は (0,1) でTrue、(1,2)/(0,2) でFalse → 条件網羅を満たす
- 第二判定D2: y > 1(D1の結果に関わらず後続処理として評価される構造)
- Trueを与えるケース: (1,2) と (0,2)
- Falseを与えるケース: (0,1)
- よってD2の両分岐およびその条件のTrue/Falseが確認できる
以上から、選択肢エが要件を満たします。
解法ステップ
- フローチャートの判定ノードを抽出する(ここではD1: x ≥ 1 or y = 1、D2: y > 1)。
- 各判定について「TrueとFalseの両方」を実行する必要がある(分岐網羅)。
- 複合判定(論理和など)は原子条件ごとにTrue/False両方を取らせる(条件網羅)。
- 各テストデータがどの判定をどの結果にするかを列挙し、上記要件を満たすか確認する。
- 要件を満たす最小集合または与えられた選択肢のうち要件を満たすものを選ぶ。
短く言えば、「判定ごとのTrue/False」と「複合判定の各原子条件のTrue/False」をテスト集合全体で網羅できているかをチェックします。
選択肢別の誤答解説
- ア((2,2), (1,2))
- D1は両ケースともTrue(x ≥ 1が真)であり、D1のFalseが未カバー。さらにy = 1が一度もTrueにならないため条件網羅を満たさない。D2は両方ともy>1でTrueのみでFalseが足りない。
- イ((1,2), (0,0))
- D1のTrue(1,2)とFalse(0,0)は確かにカバーされ、D2のTrue/Falseもカバーされるが、原子条件y = 1が一度もTrueになっていないため条件網羅を満たさない。
- ウ((1,2), (1,1), (0,1))
- 一見y>1のケース(1,2)を含むためD2のTrueは存在し、D2のFalseも (1,1)/(0,1) で得られる。しかし本集合はD1のFalse(x < 1かつy ≠ 1)をまったく含んでおらず、D1のFalse分岐が未カバーであるため分岐網羅を満たしません。
※以前の説明で「ウにはy>1の真のケースがない」とする記述がありましたが誤りです。(ウ には (1,2) が含まれておりy>1が真となるデータは存在します。)実際の不備は第一判定D1のNo(例: x=0, y=2のようなケース)が欠けている点であり、これにより分岐網羅が達成されていません。
- 一見y>1のケース(1,2)を含むためD2のTrueは存在し、D2のFalseも (1,1)/(0,1) で得られる。しかし本集合はD1のFalse(x < 1かつy ≠ 1)をまったく含んでおらず、D1のFalse分岐が未カバーであるため分岐網羅を満たしません。
- エ((1,2), (0,1), (0,2))
- 上記「正解の理由」で示した通り、D1・D2の両分岐およびD1の原子条件(x ≥ 1, y = 1)それぞれのTrue/Falseがすべてカバーされるため、条件網羅かつ分岐網羅を満たす。
よくある誤解
- 「あるテストデータにy>1が含まれていればその判定は評価される」と考える誤り
- 流れが分岐している場合、あるデータが含まれていてもそのデータにより判定が短絡的に処理される(またはその分岐で別経路に入る)と、後続の判定が期待どおり評価されないことがある。設問の図ではD1のYes/Noの後に再合流してD2が評価されるかどうかを読み取ることが重要。フローチャートの制御フロー(矢印)を正しく追ってください。
- 条件網羅と分岐網羅を混同する
- 分岐網羅(判定ごとのTrue/Falseを実行)と条件網羅(複合判定内の各原子条件がTrue/Falseをとる)は別の目的。両方必要な場合は、両方の基準を満たすテスト集合を意識する必要がある。
補足コラム
- 定義の確認
- 分岐網羅(ブランチカバレッジ): 各判定のTrue/Falseの両方が実行されること。
- 条件網羅(コンディションカバレッジ): 複合判定を構成する各原子条件(例: x ≥ 1、y = 1)がそれぞれTrueとFalseを少なくとも一度取ること。
- 本問題の最小代表集合例
- 与えられた正解エ の集合は最小の典型例です。同等に機能する別の集合例として {(1,2), (0,1), (0,0)} なども、条件・分岐を満たす場合があります(目的に応じて最小化や冗長除去を行ってください)。
FAQ
Q. D1がTrueのときはD2を評価しないのでは?
A. フローチャートの矢印を見てください。本図ではD1のYes/Noの後に再合流して次の判定D2に進む形になっており、D2は各テストで評価されます(図の制御フローが鍵です)。コードの短絡評価(OR の短絡など)と混同しないこと。
A. フローチャートの矢印を見てください。本図ではD1のYes/Noの後に再合流して次の判定D2に進む形になっており、D2は各テストで評価されます(図の制御フローが鍵です)。コードの短絡評価(OR の短絡など)と混同しないこと。
Q. 条件網羅だけで十分ですか?
A. 条件網羅は原子条件の真偽を網羅しますが、判定自体のTrue/Falseが別途必要である場合(分岐網羅)もあります。設問で「分岐網羅を満たし、かつ、条件網羅を満たす」とある場合は両方を同時に満たす必要があります。
A. 条件網羅は原子条件の真偽を網羅しますが、判定自体のTrue/Falseが別途必要である場合(分岐網羅)もあります。設問で「分岐網羅を満たし、かつ、条件網羅を満たす」とある場合は両方を同時に満たす必要があります。
Q. 同じ分量のテストデータで複数の網羅を満たすコツは?
A. 各判定のTrue/Falseと、複合判定内の各原子条件の真偽を一覧表(真理表)にして、必要最小のパターンを選ぶと効率的です。
A. 各判定のTrue/Falseと、複合判定内の各原子条件の真偽を一覧表(真理表)にして、必要最小のパターンを選ぶと効率的です。
関連キーワード: 分岐網羅、条件網羅、判定網羅、ブランチカバレッジ、テスト設計、真理表、制御フローテスト

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

