戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2019年 秋期 午前(科目A)49


問題文

単一の入り口をもち、入力項目を用いた複数の判断を含むプログラムのテストケースを設計する。命令網羅と判定条件網羅の関係のうち、適切なものはどれか。

選択肢

判定条件網羅を満足しても、命令網羅を満足しない場合がある。
判定条件網羅を満足するならば、命令網羅も満足する。(正解)
命令網羅を満足しなくても、判定条件網羅を満足する場合がある。
命令網羅を満足するならば、判定条件網羅も満足する。

命令網羅と判定条件網羅の関係【午前2 解説】

要点まとめ

  • 結論→判定条件網羅を満たすとは各原子条件を真偽ともに評価し、判定の両結果も出すことを要求し、その過程で対応する命令経路が実行されるため命令網羅も満たされます。
  • 根拠→命令網羅は「各命令を少なくとも1回実行する」こと、判定条件網羅はそれより強い要求(各条件の真偽と判定結果の両方を網羅)であり強制的に命令実行を包含します。
  • 差がつくポイント→「判定」「条件」「判定条件」の違いを正確に理解し、命令網羅が弱い基準であることを踏まえて反例を考えられるかが得点差を生みます。

正解の理由

正解:
判定条件網羅は、各原子条件(例えば A, B)をそれぞれ真と偽の両方で評価することと、各判定(複数条件からなる式)の両方の結果(真・偽)を少なくとも1回は出すことを要求します。これにより、判定に対応する制御経路や分岐の少なくとも一方は必ず通るため、プログラム内の命令(ステートメント)は結果的に少なくとも一度は実行されます。命令網羅(statement coverage)は「各命令を1回実行する」だけの弱い基準なので、判定条件網羅を満たすならば必然的に命令網羅も満たされます。

よくある誤解

  • 判定網羅(decision coverage)と判定条件網羅を混同し、「どちらも同じ強さ」と誤解する。判定条件網羅は条件ごとの真偽も要求するためより強い場合が多いです。
  • 命令網羅=十分なテストだと安直に考える。命令網羅は弱い基準でバグを見逃す可能性が高いです。
  • 網羅基準は「到達可能なコード」に対して評価される点を忘れ、到達不能コードを理由に反例を主張する。

解法ステップ

  1. 各用語の定義を確認する:命令網羅(statement coverage)と判定条件網羅(各原子条件の真偽と判定結果の網羅)。
  2. 各網羅の要求がどちらが強いか(包含関係)を考える:強い基準は弱い基準を満たす。
  3. 選択肢を論理的に検証する:判定条件網羅が強い基準であることを示して「判定条件網羅を満たす→命令網羅を満たす」を選ぶ。
  4. 反例があるかどうかを検討し、他の選択肢が矛盾することを確認する。

選択肢別の誤答解説

  • ア: 「判定条件網羅を満足しても、命令網羅を満足しない場合がある。」
    → 誤り。判定条件網羅は命令の実行経路を包含するため、命令網羅を満たさない状況は原則想定できません(到達不能コードを除く)。
  • イ: (正解)
    → 判定条件網羅が命令網羅より強い基準であるため、判定条件網羅を満たせば命令網羅も満たされます。
  • ウ: 「命令網羅を満足しなくても、判定条件網羅を満足する場合がある。」
    → 誤り。判定条件網羅は命令網羅の上位概念なので、命令網羅を満たしていないのに判定条件網羅を満たすことは基本的にありえません。
  • エ: 「命令網羅を満足するならば、判定条件網羅も満足する。」
    → 誤り。命令網羅は弱い基準なので、単に全命令を1回実行しただけでは原子条件の真偽の両方を検査していないことが多く、判定条件網羅を満たすとは限りません。

補足コラム

小さな例でイメージすると分かりやすいです。次の擬似コードを考えます。
# 例: 2つの条件を持つ判定
if A and B:
    do_X()
else:
    do_Y()
  • 命令網羅を満たすためには、do_X() と do_Y() の両方を少なくとも一度実行すればよい(例: テスト (A=True,B=True) と (A=False,B=False))。
  • 判定条件網羅では、A と B がそれぞれ真と偽の両方を取ること、かつ判定(A and B)の真・偽両方を出すことが要求されます。最小テストセットの一例は (A=True,B=True)、(A=True,B=False)、(A=False,B=True) の3ケースで、各条件が真偽ともに評価され判定の両結果も得られます。これらのテストにより do_X() と do_Y() は両方実行されるため命令網羅も満たされます。
注意点:到達不能コード(例: 常に偽の条件で囲まれた命令)はどの網羅基準でもカバーできないため評価対象外にする扱いがあります。

FAQ

Q1: 判定網羅(decision coverage)と判定条件網羅はどう違いますか?
A1: 判定網羅は各判定(if 文など)が真と偽の両方を取ることを要求する。一方、判定条件網羅は判定を構成する各原子条件もそれぞれ真と偽の両方を取ることを追加で要求します。後者の方が強い(より多くのテストが必要)です。
Q2: 命令網羅だけで十分ですか?
A2: 多くのバグは命令網羅で発見できません。条件や判定の組合せに依るバグを検出するには判定条件網羅など強い基準が有効です。
Q3: 到達不能コードがあると網羅評価はどうなる?
A3: 到達不能コードは実行によってカバーできないため、通常は評価対象外とするか、設計段階で除去・リファクタリングが推奨されます。

関連キーワード: 命令網羅、判定条件網羅、条件網羅、判定網羅、ホワイトボックステスト、網羅基準、テスト設計、分岐網羅、単体テスト、テストカバレッジ
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について