デシジョンテーブルとは? 概要や活用方法、作り方をわかりやすく解説

システムの仕様が複雑になるほど、仕様の理解やテストケースの作成に多くの時間がかかります。しかし、時間を削減しようとするあまり経験や勘に頼ってテストケースを作成すると、テストケースに抜け漏れが生じ、システムトラブルや手戻りが発生する可能性が高くなります。テストケース作成の効率を上げ、かつ抜け漏れを防ぐために有効なのが、デシジョンテーブルの活用です。本記事では、デシジョンテーブルの概要や活用方法、作成時のポイントについて詳しくご紹介します。
デシジョンテーブル(決定表)とは
デシジョンテーブルとは、複数の条件とそれに対応する結果を体系的に整理したマトリクス形式の表です。ソフトウェアテストでは、ブラックボックステスト技法の一つとして活用されています。複雑な分岐ロジックを可視化することで、考慮すべき仕様の漏れや判断ミスを防ぎ、テストの精度を上げることが可能です。テスト設計やシステム開発を効率化するとともに、システムの信頼性向上にもつなげられます。
デシジョンテーブルは日本産業規格のJIS X 0125:1986において「決定表」として定義されており、信頼性の高い仕様記述方法として広く利用されています。ロジックの明確化やテストケースの最適化を図りたい場面で重宝されているアプローチです。
デシジョンテーブルテストの概要
デシジョンテーブルテストは、条件の組み合わせごとに動作が変わる機能に対し、想定されるパターンを整理することでテストケースを網羅するブラックボックステスト技法です。
条件が多くなると組み合わせが急激に増加するため、経験や勘に頼ったテスト設計では抜け漏れが発生しがちです。デシジョンテーブルテストでは、どの条件が結果にどう影響するのかを整理・把握できるため、複雑なロジックを持つ機能の品質保証に役立ちます。また、テスターが仕様を深く理解できるだけでなく、開発者やビジネス担当者との認識合わせにも活用できます。要件の曖昧さや矛盾を早期に発見しやすくなる点も特徴の一つです。
分岐の多い業務システムや例外処理を含む機能において、精度の高いテスト設計を進めるための信頼できる手法として活用されています。
デシジョンテーブルの主な活用方法
デシジョンテーブルは、「複雑なシステム設計を整理する」「考慮すべき仕様の抜け漏れを防止する」「テストケースの作成を効率化する」といった目的で利用されています。
複雑な条件が絡み合うシステム設計において、デシジョンテーブルはシステムの仕様を論理的に整理し、条件と動作の関係を容易に把握できるようにする効果があります。テスト実行前の段階で仕様の曖昧さや不備に気づきやすく、テストのやり直しを減らすことにもつながります。仮にテスト工程で不具合が発生した場合は、どの条件の組み合わせが正常で、どの条件の組み合わせが問題なのかをすぐに明らかにできるため、素早い対応が可能です。
さらに、テストケースの作成時には、条件に基づいたテストケースを容易に作成できるため、作業効率が大幅に向上します。仕様変更があった場合でも、デシジョンテーブルを修正するだけで影響範囲を特定し、関連するテストケースの迅速な更新が可能です。
デシジョンテーブルの作り方
デシジョンテーブルは、「条件記述部」「動作記述部」「条件指定部」「動作指定部」の4つの項目を組み合わせて構成されています。ここでは、これらの項目にどのように入力するのかを図を用いてご紹介します。
今回は「入場料がいくらになるか」を例に作成します。
【前提条件】
- 通常入場料:4,000円
- 15歳以下:通常入場料から1,000円割引
- 65歳以上:通常入場料から500円割引
- 500円引きクーポンあり:年齢による割引後、さらに500円割引
1.条件の特定
まず、判断に使う条件をすべて洗い出し、「条件記述部」に記入します。今回の例では、次の3つの条件を入力します。
- 15歳以下かどうか
- 65歳以上かどうか
- 500円引きクーポンを持っているかどうか

2.動作の特定
次に、条件によって変化する動作を「動作記述部」に記入します。今回の例で想定される動作(入場料)は以下の4通りです。
-
2,500円
-
3,000円
-
3,500円
-
4,000円

3.条件の組み合わせをすべて指定
条件の組み合わせを「条件指定部」にすべて列挙します。
- 条件が真である:Y(Tや1と記載することもある)
- 条件が偽である:N(Fや0と記載することもある)
- 条件は考慮しない:-(Y/Nという意味を持つ)

【条件指定部の記入ルール】

1行目:行の半分に「Y」、残り半分に「N」を記入します。 2行目:行を4分割し、1/4に「Y」、次の1/4に「N」を交互に記入します。 3行目:行を8分割し、1/8に「Y」、次の1/8に「N」を交互に記入します。 4行目:行を16分割し…
このように、下の行に進むごとに上の行の区切りをさらに半分にして「Y」「N」を交互に記入することで、迷わず入力することが可能です。
4.条件の組み合わせに対応する動作をすべて指定
条件の組み合わせに対応する動作を「動作指定部」に記入します。
- 動作が発生する:X(YやT、1、〇で記載することもある)
- 動作が発生しない:-(N、F、0、空白で記載することもある)
- 動作を実施しない:N/A ※存在しない組み合わせ

例:(規則3) 15歳以下かつ500円引きクーポンあり→3,000円-500円=2,500円
5.規則の取捨選択
デシジョンテーブルを作成すると、条件上は存在するものの、実際の仕様としては成立しない組み合わせが現れることがあります。そのような「実際には起こらない」「仕様に反している」といった規則は、テーブルの視認性を高めるために削除するのが望ましいです。
例:(削除するケース) 今回の入場料の例では、「15歳以下」と「65歳以上」という条件を同時に満たすことはあり得ません。このような規則は削除します。

また、複数のルールを統合してテーブルを簡略化することも大切です。
例:(統合するケース) 配送料を算出するテーブルで、「急ぎ配送が優先される」という仕様がある場合、注文金額や会員かどうかに関係なく、急ぎ配送希望があるときは「急ぎ配送」を行います。この場合、条件指定部は「急ぎ配送希望=Y」、そのほかは「-(条件は考慮しない)」、動作指定部は「急ぎ配送=X」、そのほかは「-(動作が発生しない)」という1つの規則に統合できます。

このような取捨選択により、テスト対象を現実的な範囲に絞り込み、テスト効率を向上させることが可能です。今回の例では規則数が少ないですが、条件が増えると規則数は指数関数的に増加します。従って、不要な組み合わせの削除や統合は、現実的な規則数に収めるために欠かせない工程といえます。
デシジョンテーブルを作成する際のポイント
デシジョンテーブルを正しく作成するには、条件や動作の記述に漏れや矛盾がないかを確認する必要があります。そのためには、これからご紹介する4つのポイントを押さえておくことが大切です。
1.条件記述部にすべての条件を書き出す
条件記述部には、仕様に記載されているすべての条件を記述する必要があります。条件の書き出しが不十分だと、テスト漏れにつながり、システムの不具合やリリースの遅延の原因となります。新しい条件を追加する場合も、追加した条件だけでなく既存の条件まで漏れなく記載されているかを確認することが大切です。
2.動作記述部にすべての動作を書き出す
テスト漏れを防ぐために、動作記述部に想定される動作をすべて書き出します。特に複雑な分岐や多数の条件がある場合、条件と動作の関係を可視化し整理することが重要です。テストケースを網羅することが、堅牢なシステムの設計につながります。
3.条件記述部・動作記述部の矛盾している条件は削除する
デシジョンテーブルには、現実的に発生しない条件の組み合わせが含まれる場合があります。例えば、「15歳以下」と「65歳以上」を同時に満たすことは不可能です。このような論理的に矛盾する組み合わせは削除し、規則数を減らすことで、テスト作成の効率化とテーブルの可読性向上につなげられます。
4.条件の組み合わせが多い場合はデシジョンテーブルを分ける
条件の組み合わせが多い場合、デシジョンテーブルを分割して読みやすさを保つことが重要です。特に、独立性の高い条件のみで作成した表は複雑になりやすいため、それぞれを別のデシジョンテーブルに分けると整理しやすくなります。
条件が増えると組み合わせが爆発的に増加するため、現実的な規則数に絞り込む工夫も必要です。また、システム変更に合わせてテーブルを最新状態に保つメンテナンスを欠かさないことで、テストの正確性とシステムの信頼性が向上します。
まとめ
本記事では、デシジョンテーブルとそれを活用したデシジョンテーブルテストについてご紹介しました。デシジョンテーブルをうまく活用することで、考慮するべき仕様の抜け漏れや矛盾する仕様の組み合わせを発見しやすくなるとともに、テストケースの作成を効率化できます。また、不具合が発生した条件の特定も容易になり、原因究明や再発防止に役立ちます。テストの効率化やシステムの品質向上のために、ぜひデシジョンテーブルを活用しみてください。