応用情報技術者 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と、複合判定内の各原子条件の真偽を一覧表(真理表)にして、必要最小のパターンを選ぶと効率的です。
関連キーワード: 分岐網羅、条件網羅、判定網羅、ブランチカバレッジ、テスト設計、真理表、制御フローテスト

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

