デシジョンテーブルとは
デシジョンテーブルの構成
デシジョンテーブルは、想定されるすべての条件と、それに対して実行すべき動作を整理した表のことです。
行方向に条件と動作、列方向にルールの組合せをし、プログラムの処理条件やポリシーなどをわかりやすく表現します。また、ソフトウェアのテスト条件を整理するためにも利用されます。
仕様ベースのブラックボックス技法のひとつとして、仕様の論理関係、論理的条件の組み合わせを表にまとめ、論理検証の網羅性を高める方法としてよく利用されています。
例:とある健康ランドの精算システムにおける「割引サービス」に関する仕様
上の表は、とある健康ランドの精算システムにおける「割引サービス」に関する仕様をデシジョンテーブルで表したものです。
「平日18時以降」は10%の割引が、「クーポンあり」だと20%の割引が適用され、割引率の高い方が優先されます。
デシジョンテーブルでは、基本として「条件」の部分に「Y(Yes)」と「N(No)」の組み合わせをすべて書き出します。
まず「ルール1」を見てみましょう。“平日/18時以降”という2つの条件が「Y」で、“クーポンあり”が「N」となっており、10%の割引が適用されるので、「割引率」部分の「10%OFF」のところに「X(execute)」を記入します。「X」は、列に指定された条件・原因の真偽値に全て適合する場合に、行に対する動作・結果が生じることを表します。
このように、すべての条件の組み合わせをわかりやすく整理することができるのがデシジョンテーブルです。文字で書かれた仕様よりもデシジョンテーブルで表現することにより、すっきりとして見通しが良くなります。
デシジョンテーブルを活用するメリット
デシジョンテーブルを活用するメリットは以下の2つが挙げられます。
- 事前にトラブルを防ぐことができる
- バグ発生のパターンを学習できる
次項で詳しくそれぞれ解説します。
事前にトラブルを防ぐことができる
条件とアクションの関係性が表に整理されていることで、システムのどのあたりに問題があるのか発見しやすくなります。不具合の検知スピードや確実性が上がるので、事前にトラブルを防ぎやすいという利点があります。
また、複数機能であるものや同時動作など複雑な条件を整理することができるので、複数条件の組合せを漏れなく洗い出すことも可能です。
そのため、テスト漏れによる追加テスト・再テスト実施を防ぐことができ、コストやスケジュールの遅延を防止することにつながります。
バグ発生のパターンを学習できる
デシジョンテーブルを使い、条件をすべて列記することで、不良発生時に不具合が発生した条件の組合せと同じパターンを探し出して学習することができます。
不良発生時に原因箇所を特定しやすいということも大きなメリットです。
デシジョンテーブルを使用した方が良いケース
開発内容の規模が小さい場合は、テストケースを考える事はそう難しくはありません。
しかしながら、開発の規模自体が大きく、ひとつの処理結果を得るためにも複数の条件が存在する事が多々あります。
複数の条件の組み合わせがある際に「必ずデシジョンテーブルを使用しなくてはならない」という決まりはありませんが、複雑な条件を整理できるということは、デシジョンテーブルの大きなメリットです。
テストケースを並べて見た時に、「網羅できているか(抜け・漏れがないか)」「省略したテストは適切なのか」が瞬時に判断出来ない時は、デシジョンテーブルをぜひ活用してみてください。
デシジョンテーブルの作成方法
デシジョンテーブルの例
ここで、デシジョンテーブルの作成方法を紹介します。
- 条件・動作を書き出す
分析対象のシステムで起こりうる「条件」を条件欄に、取りうる「動作(アクション)」を下部の動作欄に記入します。
冒頭の図解を例に挙げると、
- 条件は「平日/18時以降/クーポンあり」
- 動作は「10%OFF/20%OFF」
となります。
- 書き出した条件と動作を表にまとめる
すべての条件の組み合わせを考え、条件に当てはまる場合は「Y」、当てはまらない場合は「N」を条件欄に記入します。また、最上部の行にはルール名(条件の組み合わせとそれに対応するアクションをルールと呼ぶ)を記入します。
例の表では、「1/2/3…」と番号を入力しています。
- 条件を満たす・満たさない、動作が適用する・しないを埋める
【2】で記入した条件の組み合わせに対応して、どのような動作が起きるかを動作欄に記入します。動作が発生する場合は「X」(「Y」と入力するケースもある)、起きない場合は「-」または「/」などを記入します。
デシジョンテーブルを使用する際の注意点
デシジョンテーブルを使用する際、注意するべきことが2つあります。
- 使い回しはNG
- 表サイズが大きくなりやすい
次項でひとつずつ詳しく解説します。
使い回しはNG
デシジョンテーブルを活用して欠陥が見つかった場合、その欠陥が発生する条件と類似の条件をデシジョンテーブルから探し出し、その差異を調べて欠陥のありそうな条件を特定することができます。
しかし、デシジョンテーブルの使い回しは避けた方が無難です。デシジョンテーブルは、条件自体に誤りや抜け・漏れがあるとまったく意味がありません。きちんと条件や動作に漏れがないかを確認しつつ、新規で作成することをおすすめします。
表サイズが大きくなりやすい
デシジョンテーブルは、条件をひとつ増やすだけで組合せ数が跳ね上がり、表サイズが大きくなりすぎて収拾がつかなくなることがあります。
そうならないためにも、以下のとおり対処しましょう。
- 矛盾している条件がないか探す・削除する
デシジョンテーブルを作成し、論理的に矛盾している条件の組み合わせが生じた場合、その条件を削除しましょう。テーブルの項目を減らすことで、無駄に表が膨大になるのを防ぎます。
- まとめられる箇所はまとめて簡素化する
デシジョンテーブルを見やすくするために、複数のルールをまとめて簡略化を図ることもできます。
冒頭の表を例に挙げると、「クーポンがあれば他の条件がどうであろうと20%OFF適用」という条件があるので、「平日」「18時以降」という条件をともに「-」(Y/Nの意味)として、「ルール2」「ルール4」はひとつのルールにまとめることができます。
- 表を分割する
他の条件との関連性が低い条件(独立性の高い条件)がある場合、表を分割させると良いでしょう。
独立性の高い条件を除いて作成した表と、独立性の高い条件のみで作成した表の2つに分割することによって、表が見やすくなります。
まとめ
今回は、デシジョンテーブルの使い方についてご紹介しました。
デシジョンテーブルを使用することで、条件の組合せ漏れがなくテストパターンを作成することが可能になります。システムの品質向上やテストスケジュールの遅延を防ぐことに非常に有効です。
コストやスケジュールのバランスを考慮しつつ、デシジョンテーブルを活用してみてはいかがでしょうか。