応用情報技術者 2021年 春期 午前2 問48
問題文
あるプログラムについて、流れ図で示される部分に関するテストを、命令網羅で実施する場合、最小のテストケース数は幾つか。ここで、各判定条件は流れ図に示された部分の先行する命令の結果から影響を受けないものとする。

選択肢
ア:3(正解)
イ:6
ウ:8
エ:18
🔒 解説は解答すると表示されます
命令網羅の最小ケース数【午前2解説】
正解の理由
この問題は各矩形(命令)を少なくとも一度は実行する「命令網羅(ステートメントカバレッジ)」を満たすための最小テスト数を問うています。各判断ノードの出次数(分岐数)は上から順に です。各テストケースは各判断でちょうど一つの分岐を通るため、ある判断ノードのすべての分岐(例えば3つ)を実行するには最低でもその分だけのテストが必要です。したがって下界は です。
一方、独立性の条件(「各判定条件は流れ図に示された部分の先行する命令の結果から影響を受けない」)により、各判断の分岐選択は互いに任意に組み合わせ可能です。これを利用して3つのテストケースで、出次数が3の判断(上段と下段)の3つずつの分岐をそれぞれ網羅しつつ、出次数が2の判断の2分岐も3ケースの中で埋められます。つまり下界の を達成可能です。以上より正解は ア(3)です。
解法ステップ
- 流れ図中の判断ノードごとに「出次数(分岐の数)」を数える → 上段:3、中段:2、下段:3。
- 命令網羅の要件は「各矩形(命令)を少なくとも一度は実行すること」。各矩形はそれぞれ判断の各分岐を通らないと到達できないため、ある判断の出次数が k ならその判断のすべての矩形を実行するには最低 k ケースが必要になる(あるテストで同一判断の複数分岐は同時に実行できないため)。
- テストの組合せは独立に選べるので、複数の判断の分岐を同じテストケースで同時に埋められる。従って最小必要数は各判断の出次数の最大値、すなわち 。
- 実際のテスト例(1〜3の3ケース)を構成すれば各矩形が少なくとも一度実行されることが確認できる(例を以下に示す)。
例(各判断での選択を表記: 上段・中段・下段)
- テスト1: 左・左・左
- テスト2: 中・右・中
- テスト3: 右・左・右
この3ケースでそれぞれの判断の全分岐(上段: 左・中・右、 中段: 左・右、 下段: 左・中・右)が網羅される。
選択肢別の誤答解説
- ア(3): 正しい。上記の通り、各判断の出次数の最大値が最小テスト数になるため到達可能であり下界でもある。
- イ(6): 誤り。3×2=6 を根拠にした考え方(上段と中段のみの組合せを考え、下段を忘れる等)や、部分的な掛け合わせの誤適用に基づく結果ですが、問題では3つの判断すべてが存在し、また独立性により3ケースで十分に網羅可能です。
- ウ(8): 誤り。3+2+3=8 として「各分岐を別個に実行すればよい」という単純和を取る誤解に基づく値です。1つのテストケースは複数の判断で同時に分岐を実行できるため、単純和は最小値にはならないことが多いです。
- エ(18): 誤り。3×2×3=18 はすべての分岐の組合せ(完全なパスの直積)を網羅する場合の数で、決定条件が互いに独立に制御できない場合やパス網羅を要求する場合には成り立ちます。しかし本問は「命令網羅」であり、また各判定条件は独立(任意に組み合わせ可能)と明記されているため、18は過大です。
よくある誤解
- 命令網羅(ステートメントカバレッジ)と分岐網羅・パス網羅を混同する。命令網羅は「各命令を一度実行すればよい」ため、パスの全組合せまでは不要。
- 「判断ノードの数=必要テスト数」と考える誤り。必要数は判断の個数ではなく、各判断の出次数の最大値が鍵になる。
- 独立性を無視して積(直積)を取る誤り。判定が前の命令に影響されないという条件があると、分岐の選択を組み合わせて少ないケースで網羅できる。
補足コラム
一般化すると、ある部分の判断ノードがそれぞれ出次数 を持ち、各判断の分岐選択が互いに独立に指定可能なとき、命令網羅の最小テスト数は
です。一方、判断の結果が互いに制約されており任意に組み合わせできない場合や「各分岐到達に特定の前提が必要」な場合は、より多くのテスト(最悪 )が必要になることがあります。テスト設計ではこの独立性の有無を明確にすることが重要です。
FAQ
Q1: なぜ「最大値」になるのですか?
A1: ある判断の出次数が k なら1テストでその判断の複数分岐を同時に通ることはできません。したがってその判断だけを見ると最低 k ケースが必要です。同時に他の判断の分岐は同じテストで埋められるため、全体の必要数は各判断の要求の最大値に落ち着きます。
A1: ある判断の出次数が k なら1テストでその判断の複数分岐を同時に通ることはできません。したがってその判断だけを見ると最低 k ケースが必要です。同時に他の判断の分岐は同じテストで埋められるため、全体の必要数は各判断の要求の最大値に落ち着きます。
Q2: もし判定条件が先行命令に影響されるなら?
A2: その場合、判定間で任意に組み合わせが作れない可能性があり、必要なテスト数は増えることがあります。最悪ケースではすべての組合せ()を試す必要が出ます。
A2: その場合、判定間で任意に組み合わせが作れない可能性があり、必要なテスト数は増えることがあります。最悪ケースではすべての組合せ()を試す必要が出ます。
Q3: 分岐網羅やパス網羅と比べて命令網羅は安全か?
A3: 命令網羅は最低限のカバレッジで、分岐網羅や条件網羅に比べて不十分なことが多い。重要な欠陥を見逃す可能性があるため、実務では目的に応じて分岐網羅や条件網羅と組み合わせることが多いです。
A3: 命令網羅は最低限のカバレッジで、分岐網羅や条件網羅に比べて不十分なことが多い。重要な欠陥を見逃す可能性があるため、実務では目的に応じて分岐網羅や条件網羅と組み合わせることが多いです。
関連キーワード: 命令網羅、ステートメントカバレッジ、出次数、分岐網羅、パス網羅、テストケース設計、組合せ爆発、判定独立性

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

