令和3年度 春期 応用情報技術者試験 午前 問48

あるプログラムについて,流れ図で示される部分に関するテストを,命令網羅で実施する場合,最小のテストケース数は幾つか。ここで,各判定条件は流れ図に示された部分の先行する命令の結果から影響を受けないものとする。

プログラムの流れ図
図の説明テキスト

プログラムの流れ図。上から下へ処理が進む。
3つの判定(ひし形)が直列に連結されている。

  • 1つ目の判定は左・中央・右の3方向に分岐し、それぞれに処理(長方形)が1つずつあり、下部で合流する。
  • 2つ目の判定は左右の2方向に分岐し、それぞれに処理(長方形)が1つずつあり、下部で合流する。
  • 3つ目の判定は左・中央・右の3方向に分岐し、それぞれに処理(長方形)が1つずつあり、下部で合流する。
    すべての図形(ひし形および長方形)の中は空欄であり、テキストや条件式などは記述されていない。
解答・解説

正解: ア. 3

命令網羅(ステートメントカバレッジ)とは、プログラム中のすべての命令(処理)を少なくとも1回は実行するようにテストケースを設計する手法です。

この問題の流れ図では、3つの判定(ひし形)が直列に並んでおり、それぞれの判定の後に処理(長方形の箱)が存在します。すべての処理(長方形)を少なくとも1回通るために必要な最小のテストケース数を考えます。

流れ図の分析

流れ図は上から下へ、次のような構成になっています。

  1. 1つ目の判定: 3つの分岐があり、それぞれに処理が1つずつあります。これらの3つの処理すべてを実行するには、少なくとも 3つ のテストケース(ルート)が必要です。
  2. 2つ目の判定: 2つの分岐があり、それぞれに処理が1つずつあります。これらの2つの処理すべてを実行するには、少なくとも 2つ のテストケースが必要です。
  3. 3つ目の判定: 3つの分岐があり、それぞれに処理が1つずつあります。これらの3つの処理すべてを実行するには、少なくとも 3つ のテストケースが必要です。

最小テストケース数の計算

各判定条件は先行する結果の影響を受けず独立しているため、1回のテスト実行(上から下へ抜ける1つのルート)の中で、それぞれの判定において任意の分岐を選ぶことができます。

すべての命令を網羅するためには、最も分岐が多く、処理の数が多い判定に合わせる必要があります。
今回の流れ図では、1つ目と3つ目の判定で3つの処理に分岐するため、それらをすべて通るには最低でも 3回 テストを実行しなければなりません。

例えば、次のような3つのテストケースを用意することで、すべての処理を網羅できます。

  • テストケース1: 1つ目の左の処理 → 2つ目の左の処理 → 3つ目の左の処理
  • テストケース2: 1つ目の中央の処理 → 2つ目の右の処理 → 3つ目の中央の処理
  • テストケース3: 1つ目の右の処理 → 2つ目の左(または右)の処理 → 3つ目の右の処理

このように、3回のテストですべての長方形の箱(処理)を少なくとも1回は通過できるため、最小テストケース数は 3 となります。
よって、正解は ア です。

各選択肢の解説

  • ア: 正解です。最も分岐が多い判定の分岐数(3)が、命令網羅に必要な最小テストケース数となります。
  • イ: 誤りです。命令網羅では1回のテストケースで各判定の処理を1つずつ通過できるので、最も分岐の多い判定の分岐数(3)を超えるテストケースは要りません。
  • ウ: 誤りです。図中のすべての処理の合計数(3+2+3=83 + 2 + 3 = 8)ですが、1回のテストケースで各判定の処理を1つずつ通過できるため、8回は要りません。
  • エ: すべての経路の組み合わせを網羅する「複数条件網羅(経路網羅)」を行う場合のテストケース数です(3×2×3=183 \times 2 \times 3 = 18 通り)。命令網羅の最小テストケース数ではありません。

Spineチーム