問題10:デシジョンテーブルテスト(1)支払いオプションのレビュー
問題 #10
Section titled “問題 #10”ビジネスアナリストから、インターネットストアの支払いオプションについて以下の仕様が提供されました。
「顧客は登録時にインターネットストアへクレジットカードの詳細(有効期限を含む)を提供しなければならない。顧客は、クレジットカード、即時振込(instant transfer)、および口座引き落とし(direct debit payment)の3つの支払いオプションのいずれかを使用できる。口座引き落としは、購入金額が500ユーロ以下の場合にのみ利用可能である。未登録の顧客に対して許可されている支払いオプションは即時振込のみである。」
テストアナリストは、考えられる組み合わせのルールを含む以下の「圧縮されたデシジョンテーブル」を設計しました。
| ID | 条件 (Conditions) | R1 | R2 | R3 | R4 |
|---|---|---|---|---|---|
| C1 | 登録済みの顧客 | T | T | T | F |
| C2 | クレジットカードの有効期限切れ | F | T | - | - |
| C3 | 購入金額 <= 500ユーロ | T | T | F | - |
| アクション (Actions) | |||||
| A1 | クレジットカードオプションの提示 | Y | N | Y | N |
| A2 | 即時振込オプションの提示 | Y | Y | Y | Y |
| A3 | 口座引き落としオプションの提示 | Y | Y | N | N |
あなたは、完全性、正確性、一貫性についてこのデシジョンテーブルをレビューしています。以下の指摘(ファインディング)のうち、正しいものはどれですか? (※2つ選択してください)
- a) 3つのブール条件には 2^3 = 8 個のルールが必要であるため、このテーブルは不完全である。
- b) ルールR3は、クレジットカードの有効期限が切れている登録済み顧客に対してもクレジットカードオプションを提示する可能性があるため、正しくない。
- c) 未登録の顧客に関するクレジットカード情報をシステムは持っていないため、ルールR4の条件C2の値「-(気にしない)」は、むしろ「N/A(該当なし)」とするべきである。
- d) ルールR4の条件C3の値「-(気にしない)」は正しくない。なぜなら、金額が500ユーロ以下(True)の場合、口座引き落としが提示されるべきだからである。
- e) クレジットカードの有効期限が切れており、購入金額が500ユーロを超える登録済みの顧客の場合、ルールR2とR3の両方が適用されてしまうため、テーブルに一貫性がない。
b, c
デシジョンテーブルのレビューにおいて、「圧縮(簡略化)」によって生じた論理的な矛盾や不備を見つけ出す問題です。
- 指摘 b が正しい理由: ルールR3は「購入金額 > 500ユーロ(C3=F)」のケースです。このルールでは条件C2(有効期限切れ)が「-(気にしない/どちらでもよい)」となっているにもかかわらず、アクションA1(クレジットカードの提示)が「Y」になっています。これは、「有効期限が切れている場合(C2=T)でもクレジットカードを提示してしまう」ことを意味しており、仕様違反(正しくない)となります。
- 指摘 c が正しい理由: ルールR4は「未登録の顧客(C1=F)」のケースです。仕様上、未登録の顧客はシステムにクレジットカード情報を提供していません。したがって、条件C2(有効期限が切れているか)を判定すること自体が不可能です。このような場合は、論理的に「-(気にしない)」ではなく「N/A(該当なし/適用不可)」を使用するのが正確な記述方法です。
他の選択肢が誤りである理由:
- a) 圧縮されたデシジョンテーブルでは、結果に影響を与えない条件をまとめる(「-」を使用する)ため、必ずしも 2^3 = 8 個のルールをすべて個別に列挙する必要はありません。
- d) 仕様に「未登録の顧客に対して許可されている支払いオプションは即時振込のみ」とあるため、金額(C3)がいくらであろうと口座引き落とし(A3)は提示されません(N)。したがって、C3を「-(気にしない)」としているR4の記述は正しいです。
- e) ルールR2は「C3=T(500ユーロ以下)」、ルールR3は「C3=F(500ユーロ超)」を前提としています。これらは互いに排他的な条件であるため、1つのトランザクションに対してR2とR3が同時に適用されることはなく、一貫性は保たれています。
現場での仕様レビューやテスト設計において、デシジョンテーブルの「-(Don’t care:気にしない)」は非常に便利な反面、バグの温床になりやすい危険な記号でもあります。
テストアナリストはテーブルをレビューする際、以下の視点を持つことが重要です。
- 「-」の中に致命的な条件が隠れていないか?(今回のR3のように、Trueになると結果を変えてしまう条件が含まれていないか)
- 「-(どちらでもよい)」と「N/A(前提条件としてあり得ない)」が混同されていないか?(今回のR4のように、前提が崩れているものはN/Aとして明確に弾くべきです)