デシジョンテーブルとは
デシジョンテーブルの構成

デシジョンテーブルは、想定されるすべての条件と、それに対して実行すべき動作を整理した表のことです。
行方向に条件と動作、列方向にルールの組合せをし、プログラムの処理条件やポリシーなどをわかりやすく表現します。また、ソフトウェアのテスト条件を整理するためにも利用されます。
活用例について詳細はこちらをご覧ください。
テストケースの作り方|記載すべき項目や網羅するための方法を解説!
仕様ベースのブラックボックス技法のひとつとして、仕様の論理関係、論理的条件の組み合わせを表にまとめ、論理検証の網羅性を高める方法としてよく利用されています。
例:とある健康ランドの精算システムにおける「割引サービス」に関する仕様

上の表は、とある健康ランドの精算システムにおける「割引サービス」に関する仕様をデシジョンテーブルで表したものです。
「平日18時以降」は10%の割引が、「クーポンあり」だと20%の割引が適用され、割引率の高い方が優先されます。
デシジョンテーブルでは、基本として「条件」の部分に「Y(Yes)」と「N(No)」の組み合わせをすべて書き出します。
まず「ルール1」を見てみましょう。“平日/18時以降”という2つの条件が「Y」で、“クーポンあり”が「N」となっており、10%の割引が適用されるので、「割引率」部分の「10%OFF」のところに「X(execute)」を記入します。「X」は、列に指定された条件・原因の真偽値に全て適合する場合に、行に対する動作・結果が生じることを表します。
このように、すべての条件の組み合わせをわかりやすく整理することができるのがデシジョンテーブルです。文字で書かれた仕様よりもデシジョンテーブルで表現することにより、すっきりとして見通しが良くなります。
デシジョンテーブルを活用するメリット

デシジョンテーブルを活用するメリットは以下の2つが挙げられます。
- 事前にトラブルを防ぐことができる
- バグ発生のパターンを学習できる
次項で詳しくそれぞれ解説します。
事前にトラブルを防ぐことができる
条件とアクションの関係性が表に整理されていることで、システムのどのあたりに問題があるのか発見しやすくなります。不具合の検知スピードや確実性が上がるので、事前にトラブルを防ぎやすいという利点があります。
また、複数機能であるものや同時動作など複雑な条件を整理することができるので、複数条件の組合せを漏れなく洗い出すことも可能です。
そのため、テスト漏れによる追加テスト・再テスト実施を防ぐことができ、コストやスケジュールの遅延を防止することにつながります。
バグ発生のパターンを学習できる
デシジョンテーブルを使い、条件をすべて列記することで、不良発生時に不具合が発生した条件の組合せと同じパターンを探し出して学習することができます。
不良発生時に原因箇所を特定しやすいということも大きなメリットです。
デシジョンテーブルを使用した方が良いケース
デシジョンテーブルは、複雑な条件分岐を整理し、可視化するための有効なツールですが、全ての場面で最適な選択肢とは限りません。ここでは、デシジョンテーブルの使用が特に推奨されるケースについて解説します。
1. 複雑な条件分岐が存在する場合
複数の条件が組み合わさり、それぞれ異なる結果をもたらすような複雑な条件分岐が存在する場合、デシジョンテーブルはその力を最大限に発揮します。
例
- 料金プランの算出: 契約期間、データ使用量、オプションサービスの有無など、複数の条件に基づいて料金が変動する場合
- 承認フロー: 申請者の役職、申請金額、申請内容など、複数の条件に基づいて承認ルートが変化する場合
このような複雑な条件分岐を、デシジョンテーブルを用いることで、網羅的に整理し、テストケースの抜け漏れを防ぐことができます。
2. 条件間の依存関係が明確な場合
条件間の依存関係が明確な場合、デシジョンテーブルを用いることで、条件の組み合わせと結果の対応関係を明確にすることができます。
例
- 会員ランクの判定: 購入金額、購入回数、会員期間など、複数の条件が組み合わさり、会員ランクが決定される場合
- 割引率の算出: 購入金額、購入商品、キャンペーン期間など、複数の条件が組み合わさり、割引率が決定される場合
このような場合、デシジョンテーブルを用いることで、条件の組み合わせと結果の対応関係を可視化し、システムの動作を正確に理解することができます。
3. テストケースの網羅性を確保したい場合
テストケースの網羅性を確保したい場合、デシジョンテーブルを用いることで、条件の全ての組み合わせを網羅したテストケースを効率的に作成することができます。
例
- システムテスト: 複数の条件が組み合わさった複雑なシステムのテストケースを作成する場合
- ユーザー受け入れテスト: ユーザーが実際に利用する様々なシナリオを想定したテストケースを作成する場合
このような場合、デシジョンテーブルを用いることで、テストケースの抜け漏れを防ぎ、システムの品質を向上させることができます。
4. 関係者間の共通認識を形成したい場合
関係者間でシステムの動作について共通認識を形成したい場合、デシジョンテーブルは有効なコミュニケーションツールとなります。
例
- 要件定義: システムの要件を関係者間で合意形成する場面
- 設計レビュー: システムの設計を関係者間でレビューする場面
このような場合、デシジョンテーブルを用いることで、システムの動作を視覚的に表現し、関係者間の認識の齟齬を防ぐことができます。
これらのケースに該当する場合、デシジョンテーブルの導入を検討することで、システムの品質向上や開発効率の向上に貢献できるでしょう。
デシジョンテーブルの作成方法
デシジョンテーブルの例

ここで、デシジョンテーブルの作成方法を紹介します。下記の手順に沿って行うのが基本的な作成手順です。
1.条件・動作を書き出す
分析対象のシステムで起こりうる「条件」を条件欄に、取りうる「動作(アクション)」を下部の動作欄に記入します。
冒頭の図解を例に挙げると、
- 条件は「平日/18時以降/クーポンあり」
- 動作は「10%OFF/20%OFF」
となります。
2.書き出した条件と動作を表にまとめる
すべての条件の組み合わせを考え、条件に当てはまる場合は「Y」、当てはまらない場合は「N」を条件欄に記入します。また、最上部の行にはルール名(条件の組み合わせとそれに対応するアクションをルールと呼ぶ)を記入します。
例の表では、「1/2/3…」と番号を入力しています。
3.条件を満たす・満たさない、動作が適用する・しないを埋める
【2】で記入した条件の組み合わせに対応して、どのような動作が起きるかを動作欄に記入します。動作が発生する場合は「X」(「Y」と入力するケースもある)、起きない場合は「-」または「/」などを記入します。
デシジョンテーブルを使用する際の注意点
デシジョンテーブルは、複雑な条件分岐を整理し、可視化するための強力なツールですが、効果的に活用するためにはいくつかの注意点があります。
1. 条件と行動の網羅性
デシジョンテーブルを作成する上で最も重要なのは、条件と行動の網羅性を確保することです。条件の組み合わせや、それに対する行動が漏れていると、テストケースの不足やシステムの不具合につながる可能性があります。
条件の洗い出し:
関連する全ての条件を洗い出し、抜け漏れがないか確認しましょう。
条件の組み合わせ:
条件の全ての組み合わせを考慮し、網羅的なテストケースを作成しましょう。
行動の定義:
各条件の組み合わせに対して、適切な行動を明確に定義しましょう。
2. テーブルの複雑化
条件や行動が増えるにつれて、デシジョンテーブルは複雑化し、可読性が低下する可能性があります。テーブルが複雑になりすぎると、メンテナンスやテストが困難になるため、適切な対策が必要です。
テーブルの分割:
テーブルが大きくなりすぎる場合は、複数のテーブルに分割することを検討しましょう。
条件の整理:
条件を整理し、共通の条件をまとめることで、テーブルを簡潔にすることができます。
表記の工夫:
記号や色分けなどを活用し、テーブルを見やすく工夫しましょう。
3. 条件の優先順位
条件に優先順位がある場合、デシジョンテーブルだけでは表現が難しいことがあります。優先順位を考慮したテストケースを作成するには、他のテスト手法との組み合わせも検討する必要があります。
優先順位の明記:
条件の優先順位をテーブル内に明記するか、別途ドキュメントに記載しましょう。
テスト手法の組み合わせ:
優先順位を考慮したテストケースを作成するために、状態遷移図やフローチャートなどのテスト手法を組み合わせることを検討しましょう。
4. メンテナンス性
デシジョンテーブルは、システムの変更に合わせて常に最新の状態に保つ必要があります。メンテナンスを怠ると、テストケースの陳腐化やシステムの不具合につながる可能性があります。
変更管理:
システムの変更が発生した場合は、デシジョンテーブルも適切に変更しましょう。
レビュー:
定期的にデシジョンテーブルをレビューし、不要な条件や行動を削除したり、必要な条件や行動を追加したりしましょう。
これらの注意点を踏まえ、デシジョンテーブルを適切に活用することで、テストの効率性と品質を向上させ、システムの信頼性を高めることができるでしょう。
まとめ
今回は、デシジョンテーブルの使い方についてご紹介しました。
デシジョンテーブルを使用することで、条件の組合せ漏れがなくテストパターンを作成することが可能になります。システムの品質向上やテストスケジュールの遅延を防ぐことに非常に有効です。
コストやスケジュールのバランスを考慮しつつ、デシジョンテーブルを活用してみてはいかがでしょうか。