問題12
問題 #12
Section titled “問題 #12”コード複雑度評価システムは、2つの整数を入力として受け取ります。
- CC:サイクロマティック複雑度(Cyclomatic Complexity)
- VAR:コード内の変数の数
システムは以下のモデルに基づいてコードが複雑かどうかを判定します。
IF (CC ≥ 10) AND (VAR ≥ 8) THEN RETURN "the code is complex"この2つの境界(CC = 10 と VAR = 8)の交差によって定義されるドメインは、整数座標(CC, VAR)の2次元空間上の点の集合です。
ドメインテストを用いてこのドメインの実装の正確性を検証します。
簡略化ドメインカバレッジ(Simplified Domain Coverage) を適用した場合、このドメインの正確性を検証できるテスト点の集合はどれか?
- a) (12, 7), (12, 8), (9, 10), (10, 10)
- b) (6, 5), (10, 8), (13, 10)
- c) (11, 8), (11, 9), (9, 11), (10, 11)
- d) (10, 10), (12, 8), (15, 11)
ドメインの確認
Section titled “ドメインの確認”ドメインは CC ≥ 10 かつ VAR ≥ 8 を満たす領域です。
VAR ↑10 | ████████████ 9 | ████████████ 8 | ████████████ ← 境界:VAR = 8 7 | ・ ・ ・ ・ ・ ・ 6 | ・ ・ ・ ・ ・ ・ +--+--+--+--+--+--+--→ CC 7 8 9 10 11 12 ↑ 境界:CC = 10ドメインの境界は2本です。
- 境界1:CC = 10(CC ≥ 10 の左端)
- 境界2:VAR = 8(VAR ≥ 8 の下端)
簡略化ドメインカバレッジとは
Section titled “簡略化ドメインカバレッジとは”簡略化ドメインカバレッジでは、各境界に対して以下の2種類のテスト点を配置します。
| 点の種類 | 位置 | 目的 |
|---|---|---|
| ON点 | 境界上(ドメイン内の端) | 境界条件が正しく含まれているかを確認 |
| OFF点 | 境界のすぐ外側(ドメイン外) | 境界条件が正しく除外されているかを確認 |
2本の境界それぞれに ON点と OFF点が必要なため、最低でも4点が必要です。
各境界で必要なテスト点
Section titled “各境界で必要なテスト点”| 境界 | 点の種類 | 条件 | 例 |
|---|---|---|---|
| CC = 10 | ON点 | CC = 10, VAR ≥ 8 | (10, 10) |
| CC = 10 | OFF点 | CC = 9, VAR ≥ 8 | (9, 10) |
| VAR = 8 | ON点 | CC ≥ 10, VAR = 8 | (12, 8) |
| VAR = 8 | OFF点 | CC ≥ 10, VAR = 7 | (12, 7) |
各選択肢の分析
Section titled “各選択肢の分析”a) (12, 7), (12, 8), (9, 10), (10, 10) ✓
Section titled “a) (12, 7), (12, 8), (9, 10), (10, 10) ✓”| テスト点 | CC | VAR | ドメイン内外 | 役割 |
|---|---|---|---|---|
| (12, 7) | 12 ≥ 10 ✓ | 7 < 8 ✗ | ドメイン外 | VAR = 8 境界の OFF点 ✓ |
| (12, 8) | 12 ≥ 10 ✓ | 8 ≥ 8 ✓ | ドメイン内 | VAR = 8 境界の ON点 ✓ |
| (9, 10) | 9 < 10 ✗ | 10 ≥ 8 ✓ | ドメイン外 | CC = 10 境界の OFF点 ✓ |
| (10, 10) | 10 ≥ 10 ✓ | 10 ≥ 8 ✓ | ドメイン内 | CC = 10 境界の ON点 ✓ |
2本の境界それぞれに ON点と OFF点が揃っています。✓ 正しい
b) (6, 5), (10, 8), (13, 10) ✗
Section titled “b) (6, 5), (10, 8), (13, 10) ✗”| テスト点 | CC | VAR | ドメイン内外 | 役割 |
|---|---|---|---|---|
| (6, 5) | 6 < 10 ✗ | 5 < 8 ✗ | ドメイン外 | 両境界から遠く、境界テストにならない |
| (10, 8) | 10 ≥ 10 ✓ | 8 ≥ 8 ✓ | ドメイン内 | コーナー点(両境界の交点)のみ |
| (13, 10) | 13 ≥ 10 ✓ | 10 ≥ 8 ✓ | ドメイン内 | ドメイン内部の点 |
CC 境界の OFF点、VAR 境界の OFF点がいずれも存在しません。✗ 不適切
c) (11, 8), (11, 9), (9, 11), (10, 11) ✗
Section titled “c) (11, 8), (11, 9), (9, 11), (10, 11) ✗”| テスト点 | CC | VAR | ドメイン内外 | 役割 |
|---|---|---|---|---|
| (11, 8) | 11 ≥ 10 ✓ | 8 ≥ 8 ✓ | ドメイン内 | VAR = 8 境界の ON点 ✓ |
| (11, 9) | 11 ≥ 10 ✓ | 9 > 8 ✓ | ドメイン内 | ドメイン内部の点(VAR境界から離れている) |
| (9, 11) | 9 < 10 ✗ | 11 ≥ 8 ✓ | ドメイン外 | CC = 10 境界の OFF点 ✓ |
| (10, 11) | 10 ≥ 10 ✓ | 11 ≥ 8 ✓ | ドメイン内 | CC = 10 境界の ON点 ✓ |
VAR = 8 境界の OFF点(例:CC ≥ 10 かつ VAR = 7 となる点)が存在しません。✗ 不適切
d) (10, 10), (12, 8), (15, 11) ✗
Section titled “d) (10, 10), (12, 8), (15, 11) ✗”| テスト点 | CC | VAR | ドメイン内外 | 役割 |
|---|---|---|---|---|
| (10, 10) | 10 ≥ 10 ✓ | 10 ≥ 8 ✓ | ドメイン内 | CC = 10 境界の ON点 ✓ |
| (12, 8) | 12 ≥ 10 ✓ | 8 ≥ 8 ✓ | ドメイン内 | VAR = 8 境界の ON点 ✓ |
| (15, 11) | 15 ≥ 10 ✓ | 11 ≥ 8 ✓ | ドメイン内 | ドメイン内部の点 |
CC = 10 境界と VAR = 8 境界の OFF点がどちらも存在しません。✗ 不適切
a) (12, 7), (12, 8), (9, 10), (10, 10)
| 境界 | ON点 | OFF点 |
|---|---|---|
| CC = 10 | (10, 10) | (9, 10) |
| VAR = 8 | (12, 8) | (12, 7) |
ON点とOFF点の配置ルール
Section titled “ON点とOFF点の配置ルール”OFF点は「境界のすぐ外側」に配置します。整数座標の場合、境界値から1だけ外側の値を使います。
- CC = 10 の境界 → OFF点は CC = 9(10 - 1)
- VAR = 8 の境界 → OFF点は VAR = 7(8 - 1)
OFF点を配置する際、他の条件は境界内の値を使うことで、確認したい境界だけを外側にします。例えば CC 境界の OFF点 (9, 10) では、VAR = 10 ≥ 8 としてVARの条件は満たしたまま、CCだけ境界外にしています。
簡略化ドメインカバレッジで必要な点数
Section titled “簡略化ドメインカバレッジで必要な点数”境界の数を n とすると、各境界に ON点1つ・OFF点1つが必要なため、最低 2n 点が必要です。この問題では境界が2本なので最低 4点必要です。
- 選択肢 b)、d) は3点のみ → 境界ごとの ON/OFF を網羅できない
- 選択肢 c) は4点あるが VAR境界の OFF点が欠如している
ドメイン外の点の役割
Section titled “ドメイン外の点の役割”OFF点は「ドメイン外に出たとたんに結果が変わる」ことを確認するためのテスト点です。OFF点でシステムが誤って "the code is complex" を返した場合、境界条件の実装に誤り(> と ≥ の混同など)があることを検出できます。