ソフトウェアの仕様が複雑で、いろいろな条件によって処理結果が異なることも少なくありません。ソフトウェアテストを実行する際は、そういった場合でもテストが必要な部分を漏れなく網羅する必要があります。その上で、テストの条件が複雑になると考えられる場合に役立つのがデシジョンテーブルやデシジョンテーブルテストです。この記事ではデシジョンテーブル・デシジョンテーブルテストとは何かやそのメリットについて、具体例を交えて分かりやすく解説します。

デシジョンテーブルとは

デシジョンテーブルとは、考えうる条件の組み合わせでソフトウェアがそれぞれどのように動作するかを整理した表です。ソフトウェアの各機能は、入力する内容や条件の組み合わせによって処理の結果が異なります。

その全てのパターンを開発者やテスト担当者の頭の中だけで整理するのは現実的ではありません。一方、デシジョンテーブルを使えば、比較的簡単にそれらを整理してまとめられます。

デシジョンテーブルの例

以下、デシジョンテーブルについてより深く理解できるように、1つ例をとってみましょう。RPGゲームで登場するモンスターの種類により、以下のように急所をつける呪文の種類が異なるとします。

例:
・植物タイプのモンスターには炎の呪文で急所をつける。それ以外の呪文は効果がない。
・水タイプのモンスターには雷の呪文で急所をつける。それ以外の呪文は効果がない。
・ノーマルタイプのモンスターは炎・雷どちらの呪文でも倒せる。
・植物と水の混合タイプのモンスターには、炎と雷の呪文を一緒に使えば倒せる。それ以外は効果がない。

この条件をまとめたデシジョンテーブルが以下の通りです。

ご覧のように条件の組み合わせを表にまとめることで、それぞれの処理結果をわかりやすく一覧化できるのです。

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


上記表をもとに、デシジョンテーブルがどのように構成されるかを解説します。以下、構成内容を1つずつみていきましょう。

・条件記述部

動作や処理を発生させるための条件について記述します。(「炎の呪文を使う」などをまとめた箇所)

・条件指定部

各条件の判定結果の組み合わせを記述します。上記表でY・Nが記述された部分です。「Y」であれば条件が適用されていること、「N」であれば未適用であることを示しています。Y・N以外に「真・偽」「T・F」「1・0」などが使われることもありますが、意味は同じです。

・動作記述部

指定された条件を満たした際の動作・処理内容をまとめて記載します。(「植物タイプのモンスターを倒す」などをまとめた部分)

・動作指定部

動作・処理の結果を指定する箇所です。上記例では、「x」の場合に動作・処理が行われること、「‐」は反対に行われないことを示しています。

デシジョンテーブルテストとは

デシジョンテーブルテストとは、デシジョンテーブルで整理した条件通りに処理が行われるかテストするソフトウェアテストの技法です。ソフトウェアでは、条件の組み合わせによって処理内容が変わります。

そのパターンが、この記事で紹介した例の何倍も複雑になることも少なくありません。そういった際にデシジョンテーブルによって条件の組み合わせを整理し、デシジョンテーブルテストを行うことを決定するわけです。

デシジョンテーブルテストのテストレベル

デシジョンテーブルテストはテストレベル※を問いません。どのテストレベルでも行われることがあります。条件の組み合わせが複雑で、適切に整理してソフトウェアテストを実行する必要がある際に行われるわけです。必要であれば、単体の機能のみをテストする「単体テスト」の段階で行われることもあります。


開発の各段階に応じ、実施されるソフトウェアテストの段階がかわります。この段階がテストレベルです。

デシジョンテーブルテストのカバレッジ

ソフトウェアテストにおいては、全ての機能について考えうる全パターンのテストが行われるわけではありません。予算や納期とあわせ、求められるクオリティなどを考慮して、テストを実行する範囲が決められるわけです。ソフトウェアテストにおけるカバレッジとは、このようにテストを実行する(実行した)範囲・割合を指します。

デシジョンテーブルテストにおけるカバレッジを測るのは、テーブルにまとめられた列の数です。デシジョンテーブルテストでは、全ての列に関するテストを最低1回ずつ行い、全パターンを網羅するのが理想ではあります。

けれど実際にはパターンの数が膨大になることも少なくはなく、全てをこなすのは必ずしも現実的ではありません。そこで予算・納期・クオリティのバランスをみて、何がしかの判断基準によってパターンを間引いて実施するのが一般的です。

デシジョンテーブルを作るメリット

条件の組み合わせが複雑であると、テストの組み合わせやパターンも多くなると想定されます。ソフトウェアテストを実行する際は、これらの組み合わせ・パターンを整理しなくてはなりません。

その点、デシジョンテーブルを作ることで、処理の条件が複雑でも考えうるテストの組み合わせ・パターンを漏れなく整理できます。また整理した内容を見渡して、テストが不要と考えられる組み合わせ・パターンを除外しやすい点もメリットです。

まとめ

デシジョンテーブルとは、ソフトウェアが動作する条件と処理結果の組み合わせを網羅した表です。一方、デシジョンテーブルテストは、デシジョンテーブルを基に行うソフトウェアテストの技法を指します。デシジョンテーブルを使うことで、ソフトウェアが動作する条件が複雑でも、もれなく整理することが可能です。デシジョンテーブルテストは、ソフトウェアの仕様が複雑で適切に条件を整理する必要がある際にテストレベルを問わず行われます。