テストを実施する際には、システムの仕様を正確に把握する必要があります。しかし、仕様が複雑になると、条件の考慮漏れが起きやすくなります。そのようなときに活用したいのがデシジョンテーブルです。
今回は、複雑な仕様を整理して条件漏れを防ぐ、デシジョンテーブルについてご紹介します。
「デシジョンテーブル」の概要
デシジョンテーブルは、さまざまな条件(入力)で、どのようにソフトウェアが動作(出力)するのかを、表形式で整理したもので、ソフトウェアの機能仕様を表すのに用いるものです。
例を見てみましょう。
タクシーの割増料金の仕様が、以下のように定義されていたとします。
・月曜~金曜は通常料金、土日および祝祭日は割増料金
・7:00~21:59は通常料金、それ以外(深夜・早朝)は割増
これをデシジョンテーブルの形で表すと、以下のようになります。
このように、デシジョンテーブルを用いると、曜日と時間という条件の組み合わせごとに、料金が通常料金なのか割増料金なのかが明確に分かるようになります。
ここで解説したデシジョンテーブルでは、条件欄に記入する値はY/Nの2値でしたが、3値以上の答えを持つ条件を採用した場合でも、同値クラスの考え方を用いてルールをまとめることで、デシジョンテーブルを見やすくすることが可能です。
このデシジョンテーブルを活用するテストを「デシジョンテーブルテスト」と言います。デシジョンテーブルで洗い出した条件とアクションについての組み合わせは、テストケースに横展開しやすく網羅性も高いため、デシジョンテーブルテストはあらゆるパターンを確認したい際に有効な手法です。
デシジョンテーブルの作成手順
デシジョンテーブルの構造を整理すると、以下のようになります。
デシジョンテーブルは、一般的には以下の手順を踏んで作成します。
【1】条件とアクションをまとめる
分析対象のシステムで起こりうる条件を「条件記述部」に、取りうるアクションを「動作指定部」に記入します。
【2】条件の組み合わせを記入する
すべての条件の組み合わせを考え、条件に当てはまる場合は「Y」(Yes)またはT(True)、当てはまらない場合は「N」(No)または「F」(False)を「条件指定部」に記入します。また、表の上端の行にはルール名(条件の組み合わせとそれに対応するアクションをルールと呼びます)を記入します。
【3】動作指定部を記入する
【2】で記入した条件の組み合わせに対応して、どのようなアクションが起きるかを「動作指定部」に記入(アクションが起きる場合は「Y」、起きない場合は「-」)します。
デシジョンテーブルが大きくなってしまったら
デシジョンテーブルの目的の一つは「複雑な仕様を分かりやすく整理すること」です。
デシジョンテーブルのサイズが大きくなってしまったら、以下のように工夫することで見やすくなります。
1.矛盾している条件を削除する
デシジョンテーブルを作成し、論理的に矛盾している条件の組み合わせが生じた場合、その条件を削除することで、テーブルの項目を減らすことができます。
例えば、ある携帯電話事業者は子供・シニア割引を実施しており、15歳以下または60歳以上の利用者には割引料金が適用されるとします。
このとき「15歳以下」「60歳以上」を条件、「割引料金が適用」をアクションとして、デシジョンテーブルを作成した場合、
「15歳以下」「60歳以上」がともにYというケースはあり得ないため、この条件を省くことができます。
2.表を簡略化する
デシジョンテーブルを見やすくするために、複数のルールをまとめて簡略化を図ることもできます。
例えば、ある遊園地ではゴーカートに乗るためには小学校3年生以上かつ身長140cm以上でなければならないという規則を設けているとします。
「小学校3年生以上」「身長140cm以上」を条件、「ゴーカート乗車」をアクションとして、デシジョンテーブルを作成した場合、
「小学校3年生以上」がN、「身長140cm以上」がY、「ゴーカート乗車」がNというルールと、「小学校3年生以上」がN、「身長140cm以上」がN、「ゴーカート乗車」がNというルールを、「小学校3年生以上」がN、「身長140cm以上」が「-」(Y/Nの意味)、「ゴーカート乗車」がNという1つのルールにまとめることができます。
3.表を分割する
他の条件との関連性が低い条件(独立性の高い条件)がある場合、表の分割が効果的です。元の表から独立性の高い条件を除いて作成した表と、独立性の高い条件のみで作成した表の2つに分割することによって、表が見やすくなります。
デシジョンテーブルは他にも使える
【活用法1】発見した欠陥の原因を分析する
デシジョンテーブルテストを実施して欠陥が見つかった場合、その欠陥が発生する条件と類似の条件をデシジョンテーブルから探し出し、その差異を調べて欠陥のありそうな条件を特定できます。
条件とアクションの関係性が表に整理されていることで、不具合結果の出方からシステムのどのあたりに問題があるのかあたりをつけやすくなり、不具合の検知スピードや確実性が上がるというメリットがあります。
【活用法2】仕様の漏れ抜け・曖昧な箇所を見つける
ソフトウェアを動作させずに開発仕様書に誤りや不備がないことを確認することを静的テストと呼びますが、デシジョンテーブルはこの静的テストで活用できます。
デシジョンテーブルで条件の組み合わせを全て洗い出し、個々に期待されるアクションを割り振る作業をする中で、「この条件ではどのようにアクションすべきか、仕様書に書かれていない、又は曖昧である」箇所を見つけ出すことができます。
仕様に定義漏れや曖昧な箇所があれば、それは不具合に直結します。このような不具合を、仕様定義や設計段階といった、テストを実施する前に見つけ出して対処すれば、結果的にテストで見つけられるバグは少なくなって、テストの実施効率向上・テスト時間圧縮・品質の安定化に繋がります。
まとめ
今回は、デシジョンテーブルの使い方についてご紹介しました。デシジョンテーブルは複雑な条件を整理してテスト漏れを予防したり、不具合の原因箇所を特定したりすることに役立ちます。システムの品質向上やテストスケジュールの遅延を防ぐためにも、デシジョンテーブルを活用してみてはいかがでしょうか。