基本情報技術者 2018年 春期 午前(科目A) 問49
問題文
プログラムの流れ図で示される部分に関するテストデータを、判定条件網羅(decision coverage)によって設定した。このテストデータを複数条件網羅(multiple condition coverage)による設定に変更するとき、加えるべきテストデータのうち、適切なものはどれか。ここで、( )で囲んだ部分は、一組みのテストデータを表すものとする。

選択肢
ア:(A=3, B=0)、 (A=7, B=2)
イ:(A=3, B=2)、 (A=8, B=0)
ウ:(A=4, B=0)、 (A=8, B=0)
エ:(A=7, B=0)、 (A=8, B=2)(正解)
🔒 解説は解答すると表示されます
判定条件網羅と複数条件網羅【午前解説】
正解の理由
与えられた判定は「A>6 or B=0」で,原子条件は C1: A>6,C2: B=0 の2つです。複数条件網羅ではこれらの真偽の全組合せ (T,T),(T,F),(F,T),(F,F) を少なくとも1回ずつ実行する必要があります。問題の判定条件網羅の既存データ (A=4,B=1) は (F,F),(A=5,B=0) は (F,T) をカバーしています。従って残りは (T,F) と (T,T) で,選択肢エの (A=7,B=0) が (T,T),(A=8,B=2) が (T,F) を与えるため,両方を追加すれば4通りすべてを満たします。よって正解は エ です。
解法ステップ
- 判定式を分解して原子条件を列挙する:C1 = (A>6), C2 = (B=0)。
- 原子条件の真偽の全組合せ数を計算する: 通り。
- 既存テストがどの組合せをカバーしているかを判定する:
- (A=4,B=1) → (F,F)
- (A=5,B=0) → (F,T)
- 足りない組合せを特定する:(T,F) と (T,T)。
- それらを満たす具体的な入力を選ぶ(A>6 を満たす値として A=7 または 8,B=0 の真偽は 0 または 2 など):(A=7,B=0) が (T,T),(A=8,B=2) が (T,F)。
- 選択肢の中から両方の組合せを同時に追加できるペアを選ぶ(エが該当)。
選択肢別の誤答解説
正解は エ です。以下は各選択肢が追加する組合せと不足点です。
-
ア: (A=3,B=0)、(A=7,B=2)
- (A=3,B=0) → (F,T)(既に存在)
- (A=7,B=2) → (T,F)(これは必要だが,(T,T) が欠ける)
- 不足:(T,T) をカバーしないため複数条件網羅未達成。
-
イ: (A=3,B=2)、(A=8,B=0)
- (A=3,B=2) → (F,F)(既に存在)
- (A=8,B=0) → (T,T)(これは必要だが,(T,F) が欠ける)
- 不足:(T,F) をカバーしないため複数条件網羅未達成。
-
ウ: (A=4,B=0)、(A=8,B=0)
- (A=4,B=0) → (F,T)(既に存在)
- (A=8,B=0) → (T,T)(必要)
- 不足:(T,F) が欠けるため未達成。
-
エ: (A=7,B=0)、(A=8,B=2) ← 正解
- (A=7,B=0) → (T,T)
- (A=8,B=2) → (T,F)
- これにより (F,F),(F,T),(T,F),(T,T) の4通りすべてがカバーされ,複数条件網羅を満たします。
よくある誤解
- 「判定条件網羅と複数条件網羅は同じ」と考える誤り:判定条件網羅は判定全体の真・偽を2値でカバーするだけで,原子条件の組合せはカバーしません。
- 「A>6 の '真' を A=6 より小さな値で代用できる」と考える誤り:境界値の扱いを誤ると真偽の組合せが変わるため,A=7 や A=8 のように明確に A>6 を満たす値を使う必要があります。
- 「短絡評価の振る舞いを元にテストを省略できる」と考える誤り:短絡評価は実行時の効率であり,網羅基準の組合せ列挙を免除する根拠にはなりません。
補足コラム
- 組合せ数の増加:原子条件が n 個になると検討すべき組合せは に増えます。条件数が多い場合は全組合せを設計するコストが膨大になるため,実務では判定条件網羅や条件網羅とのトレードオフを検討します。
- 境界値設計:今回のように不等式を含む場合は境界(A=6, A=7)を明確に扱うことが重要です。実際のテストでは境界直前・境界・境界直後の値も別途検討します。
- 短絡評価と網羅基準:短絡評価によりある条件が評価されない場合でも,複数条件網羅の観点ではその条件が真偽それぞれで評価されるテストを用意する必要があります(実装依存の副作用を考慮する場合は特に注意)。
FAQ
Q1. 判定条件網羅(decision coverage)と条件網羅(condition coverage)の違いは?
A1. 判定条件網羅は判定(複合式)の結果(真・偽)を両方実行することを要求します。一方、条件網羅は各原子条件が真と偽の両方になることをカバーします(ただし全組合せは要求しない)。複数条件網羅は条件網羅の最強形で全組合せを要求します。
A1. 判定条件網羅は判定(複合式)の結果(真・偽)を両方実行することを要求します。一方、条件網羅は各原子条件が真と偽の両方になることをカバーします(ただし全組合せは要求しない)。複数条件網羅は条件網羅の最強形で全組合せを要求します。
Q2. 原子条件が3つなら何通りの組合せを考える必要がありますか?
A2. 通りです。実務ではコストが高くなるため,必要性に応じて部分的な組合せ選択やリスクベースの絞り込みを行います。
A2. 通りです。実務ではコストが高くなるため,必要性に応じて部分的な組合せ選択やリスクベースの絞り込みを行います。
Q3. 同じ判定でも実装で短絡評価があると網羅に影響しますか?
A3. 短絡評価は実行時の評価順序に影響しますが,網羅基準は論理的な真偽の組合せを基準にするため,短絡評価を理由にテストを省くべきではありません。副作用がある式の場合は特に注意が必要です。
A3. 短絡評価は実行時の評価順序に影響しますが,網羅基準は論理的な真偽の組合せを基準にするため,短絡評価を理由にテストを省くべきではありません。副作用がある式の場合は特に注意が必要です。
関連キーワード: 判定条件網羅、複数条件網羅、multiple condition coverage、決定論理、テスト設計、網羅基準、境界値分析、条件組合せ、短絡評価、テストデータ設計

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

