Skip to content

問題20

フードオーダーシナリオをユースケーステストで検証します。

メインシナリオ(正常フロー)

Section titled “メインシナリオ(正常フロー)”
ステップ説明
1顧客がアプリを開いてログインする
2顧客がメニューを閲覧し、注文する商品を選ぶ
3顧客が選んだ商品をカートに追加する
4顧客がチェックアウトに進む
5アプリが注文サマリー(商品・数量・合計金額)を表示する
6顧客が注文を確定する
7アプリが保存済み支払い方法を使うか確認する
8顧客が保存済み支払い方法を確認する
9アプリが支払いを処理する
10アプリが顧客に確認通知を送る
11アプリが注文をレストランに転送する
12アプリが注文ステータスを「確認済み」に更新する
ID発生ステップ内容
4A4顧客がメニュー閲覧に戻る → ステップ2に戻る
6A6顧客がメニュー閲覧に戻る → ステップ2に戻る
7A7支払い方法が未登録 → システムがクレジットカード情報を要求 → 顧客が入力 → ステップ9へ
7B7支払い方法が複数登録済み → システムが選択を促す → 顧客が選択 → ステップ9へ
ID発生ステップ内容
9A9支払い処理が失敗 → システムがエラーを通知 → ユースケース終了
  • メインシナリオ・すべての代替シナリオ・すべての例外シナリオをテストする
  • 1つのテストケースに複数の代替シナリオを含めることができる
  • 例外が発生するテストケースには、代替シナリオを含めることができない

このユースケースのすべてのシナリオをカバーするために必要な最小テストケース数はいくつか?

  • a) 2
  • b) 3
  • c) 4
  • d) 5

以下の6つのシナリオをすべてカバーする必要があります。

シナリオ種類発生ステップ
メインシナリオメイン1〜12(全完了)
4A代替4
6A代替6
7A代替7
7B代替7
9A例外9

制約1:9A(例外)は単独テストケースが必要

Section titled “制約1:9A(例外)は単独テストケースが必要”

例外が発生するテストケースには代替シナリオを含めることができません。9A はステップ9で失敗してユースケースが終了するため、他の代替シナリオ(4A、6A、7A、7B)とは別のテストケースが必要です。

7A と 7B はどちらもステップ7で発生しますが、システムの状態(登録済み支払い方法の数) によって決まります。

状態実行されるシナリオ
支払い方法 = 0件7A
支払い方法 = 1件メインシナリオのステップ7→8
支払い方法 ≥ 2件7B

7A と 7B は同じテストケースで同時に発生させることができません。

制約3:メインシナリオは独立したカバレッジが必要

Section titled “制約3:メインシナリオは独立したカバレッジが必要”

メインシナリオではステップ7→8(保存済み1件の支払い方法を確認)とステップ9→12(支払い成功・通知・転送・ステータス更新)がすべて完了する必要があります。9A テストケースはステップ9で失敗するためステップ10〜12に到達できず、メインシナリオを代替できません。

上記の制約から、ステップ7での分岐(メイン・7A・7B)がそれぞれ別テストケースを必要とするボトルネックになります。

テストケースカバーするシナリオテスト経路
TC1メイン(+4A+6A)1→2→3→4→(4A)→2→3→4→5→6→(6A)→2→3→4→5→6→7→8→9→10→11→12
TC27A1→2→3→4→5→6→7→(7A:カード入力)→9→10→11→12
TC37B1→2→3→4→5→6→7→(7B:支払い方法選択)→9→10→11→12
TC49A(例外)1→2→3→4→5→6→7→8→9→(9A:失敗)

TC1 に代替シナリオ 4A・6A を組み込むことで、4つのテストケースで全6シナリオをカバーできます。

シナリオTC1TC2TC3TC4
メインシナリオ
4A
6A
7A
7B
9A

3件に減らすには、いずれか2つのテストケースを統合する必要があります。

統合の試み結果
TC1(メイン)+ TC2(7A)✗ ステップ7での分岐が排他で不可
TC1(メイン)+ TC3(7B)✗ ステップ7での分岐が排他で不可
TC2(7A)+ TC3(7B)✗ ステップ7での分岐が排他で不可
TC1〜TC3 のいずれか + TC4(9A)✗ 代替シナリオと例外の共存が禁止

すべての統合パターンが制約に違反するため、3件以下にはできません


c) 4


ボトルネックとなる「排他的分岐」を探す

Section titled “ボトルネックとなる「排他的分岐」を探す”

テストケース数の下限は、排他的に発生するシナリオの数によって決まります。この問題ではステップ7に3つの排他的な分岐(メイン・7A・7B)があり、これらは必ず別々のテストケースになります。さらに9A(例外)が加わり、最小4件となります。

代替シナリオの効率的な組み合わせ

Section titled “代替シナリオの効率的な組み合わせ”

代替シナリオ 4A・6A はどのテストケースにも組み込める柔軟性があります。TC1 に 4A と 6A を両方含めることで、余分なテストケースの追加なしに全代替シナリオをカバーできます。

9A はステップ9で強制終了するため、後続ステップ(10〜12)のカバレッジに貢献しません。例外テストケースは「エラーが正しく通知されるか」を確認する目的に特化し、正常系のカバレッジは別途確保する必要があります。