応用情報技術者 2022年 春期 午前2 問47
問題文
次の流れ図において、判定条件網羅 (分岐網羅) を満たす最少のテストケースの組みはどれか。

選択肢
ア:(1) A=0, B=0 (2) A=1, B=1
イ:(1) A=1, B=0 (2) A=1, B=1(正解)
ウ:(1) A=0, B=0 (2) A=1, B=1 (3) A=1, B=0
エ:(1) A=0, B=0 (2) A=0, B=1 (3) A=1, B=0
🔒 解説は解答すると表示されます
判定条件網羅【午前2解説】
正解の理由
判定(分岐)網羅は、各判定(複合式全体)が「真」と「偽」の両方の評価を少なくとも一度は取ることを要求します。本問題の流れ図には2つの判定があり、それぞれの「真/偽」をテストセット全体で取得する必要があります。
選択肢のうち、イの組合せ((1) A=1, B=0 と (2) A=1, B=1)は、
- 第1判定「A>0 かつ B=0」に対して (1) で真、(2) で偽 を与え、
- 第2判定「A>0 かつ C=1」に対して (1) で真、(2) で偽 を与えます。
したがって、両判定について真・偽の両方が出力され、判定(分岐)網羅を満たします。
ここで重要なのは、判定網羅が「各原子条件を両方の真偽で評価すること(条件網羅)」を要求するわけではない点です。本例では A>0 が両ケースとも真(A=1)でも判定全体の真偽が両方出ているため、判定(分岐)網羅は満たされます。
解法ステップ
- 流れ図から判定点を洗い出す。ここでは
- D1: 「A>0 かつ B=0」
- D2: 「A>0 かつ C=1」
- 各判定について、「真」と「偽」を少なくとも一度は出すことを目標にする(判定=複合式全体の真偽)。
- パス上の代入文が判定の評価に与える影響を整理する。
- 最初の四角で (1→C)。
- D1 が No の場合は 2→C により 。
- D1 が Yes の場合は A×C→C により(直前の を用いて)。
- D2 を真にするためには「A>0 かつ C=1」になることが必要。D1 Yes のとき なので D2 が真になる条件は かつ 、すなわち 。
- 以上より、1つのケースで D1=真かつD2=真(例:A=1,B=0)、もう1つのケースで D1=偽かつD2=偽(例:A=1,B=1)を用意すれば良い。これで各判定の両方の評価を得られるため最少は2ケースとなる。
選択肢別の誤答解説
- ア: (1) A=0, B=0 (2) A=1, B=1
(1) は D1偽、D2偽。 (2) は D1偽、D2偽。どちらも D1 が一度も真にならず、判定網羅を満たさない。 - イ: (1) A=1, B=0 (2) A=1, B=1
先述の通り、D1 は (1) で真、(2) で偽。D2 も (1) で真、(2) で偽。両判定の真・偽を網羅する最小の組合せである。 - ウ: (1) A=0, B=0 (2) A=1, B=1 (3) A=1, B=0
D1・D2は網羅できるが、ケース数が3で冗長。最少を問う設問には適さない。 - エ: (1) A=0, B=0 (2) A=0, B=1 (3) A=1, B=0
これも D1・D2 は網羅できるが、ケース数が3で最少ではない(A=1 が1回しかなく冗長な組合せを含む)。
よくある誤解
- 「判定網羅=条件網羅」と混同する
- 判定(分岐)網羅は「複合判定そのものの真偽を両方出す」こと。条件網羅は「各原子条件を両方の真偽にする」こと。どちらか一方を満たしても必ずしも他方を満たすとは限らない。
- C を固定の入力だと誤認する
- 図中の 1→C や 2→C、A×C→C、C²→C は変数 C の代入であり、判定の真偽はこれらの代入結果によって変わる。テストケース間で C の値が異なることを意識する必要がある。
- 「各判定の原子条件を個別に真偽させる必要がある」と考え、不要にケースを増やす
- 判定網羅では不要にケースを増やさず、判定全体の真偽を満たせばよい。
補足コラム
最小性の簡単な証明:少なくとも1つの判定(ここでは D1)を真と偽の両方にする必要があるため、テストケースは最低2つ必要です。2つで可能かどうかは、パスごとの代入が判定評価にどう影響するかを考えればよく、本問題では上で示した通り2つで十分です。
また、さらに厳密な網羅基準として「判定と条件の両方を満たす基準(condition+decision coverage)」や「MC/DC(修飾条件-判定網羅)」があります。これらは原子条件と判定全体の組合せや独立性を要求するため、今回の最少2ケースより多くのケースが必要となることが多い点に注意してください。
FAQ
Q. なぜ A=0 のケースは必要ないのですか?
A. 判定(分岐)網羅は複合判定の真偽を両方出すことが目的であり、本問題では A=1 の組合せだけで両判定の真偽を確保できるため、A=0 を含める必要はありません(条件網羅を要求されていれば別ですが)。
A. 判定(分岐)網羅は複合判定の真偽を両方出すことが目的であり、本問題では A=1 の組合せだけで両判定の真偽を確保できるため、A=0 を含める必要はありません(条件網羅を要求されていれば別ですが)。
Q. 第2判定で C=1 を得るにはどういう場合か?
A. 初期で に設定され、D1 が Yes のときに A×C→C が実行されるため、その結果は になる。従って D2 が真になるには(D1 Yes の場合) を満たす必要があります。D1 No の場合は となるため D2 は偽になります。
A. 初期で に設定され、D1 が Yes のときに A×C→C が実行されるため、その結果は になる。従って D2 が真になるには(D1 Yes の場合) を満たす必要があります。D1 No の場合は となるため D2 は偽になります。
関連キーワード: 構造的テスト、分岐網羅、条件網羅、判定網羅、MC/DC

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

