問題21
問題 #21
Section titled “問題 #21”以下のアクティビティ図を考えます。

このアクティビティ図が定義するすべてのシナリオを実行するために必要な最小テストケース数はいくつか?
- a) 2
- b) 3
- c) 6
- d) 4
アクティビティ図の構造分析
Section titled “アクティビティ図の構造分析”この図には以下の要素が含まれています。
| 要素 | 説明 |
|---|---|
| 開始ノード ● | フロー開始 |
| Receive order | 注文を受け付ける |
| フォーク(Fork) 太線バー | 2つのフローを並行して開始する(両方が同時に実行される) |
| 左フロー | Fill order → 決定ノード → 配送手配 |
| 右フロー | Send invoice → Receive payment |
| 決定ノード ◇ | [priority] または [regular] のいずれかに分岐 |
| ジョイン(Join) 太線バー | 両フローが完了するまで待機してから次へ進む |
| 終了ノード ◉ | フロー終了 |
フォークとジョインの意味
Section titled “フォークとジョインの意味”フォーク(Fork) は、1つのフローを複数の並行フローに分割します。分割されたすべてのフローは同時に実行されます。
ジョイン(Join) は、すべての並行フローが完了するまで待機し、その後に続きを実行します。
シナリオの列挙
Section titled “シナリオの列挙”このアクティビティ図でのシナリオ数は、各フローにおける独立した経路の数の積で求められます。
| フロー | 経路 | 経路数 |
|---|---|---|
| 左フロー | Fill order → [priority] → Arrange priority delivery | 2 |
| Fill order → [regular] → Arrange regular delivery | ||
| 右フロー | Send invoice → Receive payment | 1 |
シナリオ数 = 左フローの経路数 × 右フローの経路数 = 2 × 1 = 22つのシナリオ
Section titled “2つのシナリオ”シナリオ1:優先配送(priority)
Receive order ├─ Fill order → [priority] → Arrange priority delivery └─ Send invoice → Receive payment→ (両フロー完了)→ 終了シナリオ2:通常配送(regular)
Receive order ├─ Fill order → [regular] → Arrange regular delivery └─ Send invoice → Receive payment→ (両フロー完了)→ 終了右フロー(Send invoice → Receive payment)は両シナリオで同じ経路を通るため、左フローの分岐が唯一のバリエーションです。
各選択肢の検討
Section titled “各選択肢の検討”| 選択肢 | 件数 | 検討 |
|---|---|---|
| a) | 2 | シナリオ数(2)と一致 ✓ |
| b) | 3 | 右フローに分岐がないため3通りにはならない ✗ |
| c) | 6 | 過剰。決定ノードの分岐は2つのみ ✗ |
| d) | 4 | 過剰。並行フローの組み合わせは 2×1=2 ✗ |
a) 2
並行フロー(フォーク)はシナリオを増やさない
Section titled “並行フロー(フォーク)はシナリオを増やさない”フォークで分割された並行フローは両方が必ず実行されます。どちらかを「実行しない」という選択肢はありません。シナリオ数に影響するのは決定ノード(分岐)の数と選択肢のみです。
並行フローが2つある場合のシナリオ数の計算:
シナリオ数 = フロー1の経路数 × フロー2の経路数 × ...決定ノードの分岐がシナリオを決める
Section titled “決定ノードの分岐がシナリオを決める”この図では決定ノードが1つあり、2つの経路([priority]・[regular])を持ちます。すべてのシナリオをカバーするには、各経路を少なくとも1回実行するテストケースが必要です。
| 決定ノードの数 | 各ノードの分岐数 | シナリオ数(上限) |
|---|---|---|
| 1個 | 2分岐 | 2 |
| 2個(独立) | 各2分岐 | 4 |
| 2個(直列) | 各2分岐 | 4 |
ジョインとテスト設計
Section titled “ジョインとテスト設計”ジョインが存在する場合、テストでは両フローが正しく同期して終了するかも確認します。どちらかのフローが完了しない場合にジョインでブロックされるケースは、別途障害テストとして設計する対象になります。