開発したシステムのテストを行う際、機能仕様を把握してからテストケースを作ることが重要です。
しかし、システムの規模によっては、入出力のパターンが膨大で条件分岐や組み合わせが複雑化すると、テストケースに抜け漏れが生じて全体的なテストを網羅出来ない可能性があります。
そうしたテストの抜け漏れを防止するために効果的なのが、デシジョンテーブル(決定表)の作成です。今回は、デシジョンテーブルについてご紹介します。
デシジョンテーブルとは?

デシジョンテーブル(決定表)とは、システムの様々な入力条件に対してどのような出力結果が返ってくるかを一覧でまとめた表を指します。
複数の条件や組み合わせで複雑化するシステムでは、仕様の正確な把握が重要です。デシジョンテーブルで入出力結果を明確にすることで仕様を整理でき、テストケースが作成しやすくなります。
どのようなシステムであっても、条件判定や分岐によって出力結果が変動する機能がある場合はデシジョンテーブルを活用して組み合わせ、整理することが可能です。
デシジョンテーブルテストとは?
入力条件・出力結果を整理したデシジョンテーブルをもとに行うテストを「デシジョンテーブルテスト」と呼びます。
入力条件によって出力結果が複数に及ぶテストに効果的な手法です。デシジョンテーブルを作ることで、テストをする必要がない組み合わせも把握でき、テストケースを効率化できます。
デシジョンテーブルテストのテストレベル
デシジョンテーブルテストの実施にテストレベルは問いません。テストレベルとは、系統的にまとめてマネジメントするテストの活動グループのことです。
条件の組み合わせが複雑かつ適切に整理してソフトウェアテストを実行する必要がある際に行われるます。また、必要であれば単体の機能のみをテストする「単体テスト」の段階で行われるケースも少なくありません。
デシジョンテーブルを作成する3つのメリット

デシジョンテーブルを作成するメリットとして、次の3つが挙げられます。
- 様々な条件や制約があるソフトウェア仕様を整理できる
- 漏れなくすべての組み合わせをチェックできる
- 可視化されるため他者に説明しやすい
それぞれの詳しい内容をみていきましょう。
1.様々な条件や制約があるソフトウェア仕様を整理できる
ソフトウェアによってはさまざな条件や制約があり、テストケースの作成が複雑な場合も少なくありません。
そこで、デシジョンテーブルを作成すれば、入出力の組み合わせの条件や扱うデータによる動作の制約などの仕様を可視化できます。
2.漏れなくすべての組み合わせをチェックできる
複雑な条件を可視化して整理することで、組み合わせを漏れなく洗い出せます。
また、テストの前に表としてまとめれば、仕様の認識漏れがないかの再確認も可能です。仕様の認識漏れをなくすことで追加テストや再テストの防止にもつながり、コスト削減につながります。
コスト削減の重要性やポイントについては、こちらの記事でも詳しく紹介しているのでぜひご確認ください。
3.可視化されるため他者に説明しやすい
デシジョンテーブルでは、仕様の複雑な条件や制約がすべて可視化されるため、他者にも説明しやすいです。
例えば、テスト方針についてクライアント側とも打ち合せる場合、デシジョンテーブルをもとに説明を行うことで打ち合わせを円滑に進められます。
デシジョンテーブルを作成する2つのデメリット

デシジョンテーブルは作成することでメリットが多いものではありますが、いくつかデメリットも挙げられます。主なデメリットは次の2つです。
- 複雑な条件の場合、作成に時間がかかる
- すべての組み合わせをチェックしようとするとパターンが多くなる
それぞれの詳しい内容を解説します。
1.複雑な条件の場合、作成に時間がかかる
条件が複雑化している場合は、そもそもデシジョンテーブルの作成に時間が掛かります。
条件自体に抜け漏れがあってはならないため、対象システムの機能と照らし合わせながら、考えうる条件はすべて洗い出さなければならないからです。
そのため、ある程度システムの仕様について理解している開発者がデシジョンテーブルを作成することを推奨します。
2.すべての組み合わせをチェックしようとするとパターンが多くなる
すべての組み合わせをチェックしようとすると、機能によってはパターンが膨大となります。
条件を1つ増やすだけで組み合わせの数が一気に増えて、テスト数も同じく増えてしまいます。
条件的に同じものであり、片方のテストを行うだけで結果が担保されるような場合はデシジョンテーブルに書かないようにしましょう。
どんな条件でもデシジョンテーブルにただ書くと、複雑なテストケースを作り出してしまう場合もあります。
デシジョンテーブルの作成方法

デシジョンテーブルの作成方法についてご紹介します。
ここでは、上記画像のように年齢やクーポンの有無によって入場料が変動する「施設の入場チケット発券システム」を例に挙げて説明します。
1. 条件を整理し、上部に記述する
まずは、機能の条件について整理して左上部の条件記述部の部分へ記述します。
例えば、入場料割引の対象となる条件(入力条件)を「20歳未満」や「クーポン有り」とする場合、条件記述部にはこの2つの条件を記述します。
条件記述部には、考えうるすべての入力条件を書き出すのがポイントです。
2. 動作を明確にし、下部に記述する
次に、左下部の動作記述部に条件によって起こる動作(出力結果)を記述します。
今回は年齢やクーポンの有無という条件をもとに起こる動作は入場料の割引となるため「20%オフ」「30%オフ」「50%オフ」の3つを記述します。
動作記述部には、考えうるすべての出力結果を書き出すのがポイントです。
3. 条件の組み合わせを行う
条件記述部と動作記述部の記述を終えたら、次は右上部の条件指定部に条件の組み合わせを記述します。
今回の例では「20歳未満」と「クーポン有り」の2つの条件が指定されます。そのため、この2つの条件を「満たす」or「満たさない」の組み合わせである次の4通りの結果を記述します。
- 20歳未満でなく、クーポンなし
- 20歳未満であり、クーポンなし
- 20歳未満でなく、クーポンあり
- 20歳未満であり、クーポンあり
ここでは、それぞれの条件を満たすものを「Y」、満たさないものを「N」と記述しています。
4. 各条件の組み合わせに動作を指定する
条件指定部への記述を終えたら、それぞれの条件の組み合わせに対応した動作を右下部の動作指定部へ記述します。
今回の条件に伴う割引時の動作として次を想定します。
- 20歳未満であれば、20%オフ
- クーポンがあれば、30%オフ
- 20歳未満かつ、クーポンがあれば50%オフ
いずれも、該当する部分にチェックを入れていきます。今回は、該当する部分へのチェックとして「X」、該当しない部分には「ハイフン」を入れます。
YやN、Xやハイフンといった記述については、語句やコードなどそれぞれの入力条件や出力結果に合った記述に適宜変更してください。
5. 各組み合わせを整理する
条件と動作を一通り表に記述出来たら、それぞれの組み合わせを整理してみましょう。
例えば、条件に関わらず同じ動作になる組み合わせが複数ある場合や条件記述部と動作記述部でそれぞれ矛盾する組み合わせが見つかった場合は表から除外するなどして、考慮が必要な条件のみを残して不要なものは削除しましょう。
また、組み合わせが膨大となる場合は表を1つだけでまとめようとせず、分けて作成した方が整理しやすい場合もあります。
【まとめ】デシジョンテーブルを活用しよう
デシジョンテーブルの作成は、システム内で複雑になる入力条件と出力結果の組み合わせを整理するための効果的な手段です。
適切に作成して利用することで、テスト漏れのリスクを軽減できます。デシジョンテーブルを活用し、効率の良いテストを目指しましょう。