決定表(デシジョンテーブル)とは何か?作成方法から実例まで徹底解説
決定表とは
決定表は複数の条件と、それによって決定づけられる動作(行動)を整理するためのツールです。別名「デシジョンテーブル(Decision tables)」とも呼ばれています。
システム開発の現場において、決定表は以下のような用途で使われています。
- システムの仕様を考える際に、内部の処理条件を整理する。
- 完成したシステムが仕様書通りに動くかどうかテストする場合、試験パターン(テストケース)を作成する。
決定表は「JIS X 0125」において形式や記述方法が規格化されています。
システム設計の上流工程にて、決定表を用いてシステムの動きをまとめておくことにより、その後の開発やテストなどがスムーズに進行しやすくなります。
決定表(デシジョンテーブル)の構成
決定表は、主に以下の5つの構成で成り立っています。
- 条件一覧(条件記述部)
- 結果一覧(動作記述部)
- 条件の組み合わせ(条件指定部)
- 組み合わせに対応する結果(動作指定部)
- 規則
その他、決定表を補完するものとして、「表見出し」「初期化部」「条件」「動作」があります。
表見出し(table heading)
決定表の内容や用途、説明を記載します。
初期化部(initialization section)
対象となる条件を全て記載するために実行するべき動作を記載します。記載は任意です。
条件(condition)
条件を列挙する「条件記述部」と条件の組み合わせを記載する「条件指定部」を総括して「条件」と定義します。
条件記述部(condition stub)
入力条件や入力データといった、考慮するべき全ての条件を列挙します。
制限指定と拡張指定があり、制限指定では記述した語句が真か偽かが明確になるように命題形式記述し、拡張指定では記述した語句が数値や複数の選択肢を持つことが分かるように変数形式で記述します。
条件指定部(condition entry)
条件と規則との関連付けを行います。条件を満たす場合は「Y(Yes)」、条件を満たさない場合は「N(No)」といった特定の値で指定します。条件指定部には、以下の表のような記述を行います。
表記 | ルールで関連付ける意味 | CEGTest表記 |
---|---|---|
Y (Yes) | この行に対応する条件、原因が真であること意味します。 | T、t |
N (No) | この行に対応する条件、原因が偽であることを意味します。 | F、f |
値、語句 | この行に対応する条件、原因が記述される値、語句を満たすことを意味します。 | |
-、# | この行に対応する条件、原因が無関係であることを意味します。また、他の条件、原因の組み合せによって、この行に対応する条件が起こり得ないことを「#」で表記します。 |
動作(action)
条件の結果を記載する「動作記述部」と条件の組み合わせに対応する結果を記述する「動作指定部」を総括して「動作」と定義します。
動作記述部(action stub)
条件に対して実行されるべき動作を記述します。制限指定の場合は記述した動作が実行される、実行されない(真か偽か)が明確になるように命題形式で記述し、拡張指定の場合は動作そのものや結果を記述します。
動作指定部(action entry)
動作と特定の規則との関連付けを行います。動作する場合は「X(execute)」を記述し、動作しない場合は「-」を記述します。動作指定部には、以下の表のような記述を行います。
表記 | ルールで関連付ける意味 | CEGTest表記 |
---|---|---|
X (execute) | この列に指定された条件、原因の真偽値にすべて適合する場合、この行に対応する動作、結果が生じることを意味します。 | T、t |
- | この列に指定された条件、原因の真偽値にすべて適合する場合、この行に対応する動作、結果が生じないことを意味します。 | F、f |
値、語句 | この列に指定された条件、原因の真偽値にすべて適合する場合、この行に対応する動作、結果が記述された値、語句を満たすことを意味します。 |
決定表(デシジョンテーブル)の作り方
決定表を使用して論理的な条件を網羅し、入出力の組み合わせを元にテストケースを導き出すことを「デシジョンテーブルテスト」といいます。
条件(入力)と動作(出力)が複数存在し、条件によって動作が変化する場合はテストケースとして羅列していくだけでは網羅的に全ての組み合わせを出すのは難しくなりますが、決定表を使って整理することで網羅性の高いテストケースを作成しやすくなります。実際にサンプル例を当てはめながらデシジョンテーブルテストのテストケースを作成してみましょう。
サンプル例
あるテーマパークの割引料金に関する仕様が以下の通りで定義されていたとします。
- 大学生、高校生は、学生割引が適用される(割引率:10%)
- 中学生以下は、子ども割引が適用される(割引率:50%)
- 女性の方はレディース割引が適用される(割引率:5%)
- 複数の割引条件が重なる場合は、割引率が最も高いものが適用される
各記号は以下のことを示しています。
条件
- Y:条件が真(true)であること
- N:条件が偽(false)であること
- -:条件が動作に影響しない ※N/Aと表すこともあり
動作
- X:条件に対して動作が発生する
- -:条件に対して動作が発生しない ※空白で表すこともあり
たとえば、「規則1」の場合では、「大学生もしくは高校生」であり、かつ「女性」であることが条件となります。
「大学生もしくは高校生」の割引率は10%、「女性」の割引率は5%と定められておりますが、仕様として「複数の割引条件が重なる場合は、割引率が最も高いものが適用」となるため、最も割引率の高い「10%」が該当します。
このように、仕様をデシジョンテーブルテストとして表すことで、テストケースを作成することができます。
ちなみに、条件として「大学生、高校生」「中学生以下」「女性」の全てが該当(Y)となる条件については、「大学生、高校生」と「中学生以下」が相反するためテストケースからは外れています。
決定表の実例 ―ITパスポート試験の出題よりー
決定表の実例を、ITパスポート試験の過去問題で見てみましょう。
問
業務の改善提案に対する報奨を次の行に基づいて決めるとき、改善額が200万円で、かつ、期間短縮が3日の改善提案に対する報奨は何円になるか。ここで表は、条件が成立の場合は Y を、不成立の場合は N を記入し、これらの条件に対応した時の報奨を○で表してある。引用:ITパスポート平成22年春期 問79
ア 5,000 イ 10,000 ウ 15,000 エ 30,000
決定表の読み方
上述のとおり、決定表は、条件を記述する「条件記述部」と、動作を記述する「動作記述部」に分かれます。
この問題の例では「条件」の2行が「条件記述部」、「報奨」の4行が「動作記述部」に相当します。
条件について
「条件記述部」の右の欄(条件指定部)には条件のパターンを記載します。条件が成立する場合はYesの頭文字である「Y」、条件が成立しない場合はNoの頭文字である「N」を記入します。
考えられる「Y」と「N」の組み合わせを全て作成し、列として追加します。
動作について
「動作記述部」の右の欄(動作指定部)では、指定した条件によって決定する動作を指定します。
該当する箇所に「〇」や「X(エックス)」などの記号を記入します。
決定表問題の解き方
問題文に「改善額が200万円」とありますので、「改善額100万円未満」の条件指定部は「N(成立しない)」となります。
また「期間短縮が3日」とありますので、「期間短縮1週間未満」の条件指定部は「Y(成立する)」となります。
これら2つの条件に当てはまるものは、上から「N」「Y」となっている、右から2番目の列です。
この、右から2番目の列の報奨欄を見ると、10,000円の行に「〇」が付いていることが分かります。
すなわち、この改善提案の報奨は10,000円ということで、正解は「イ 10,000」となります。
決定表のメリット・デメリット
ここでは決定表のメリット・デメリットを紹介します。
決定表のメリット
- 複雑な条件と動作の組み合わせを整理することができる。
- 条件記述部に行を追加することで、簡単に条件を増やすことができる。
- プログラムの知識がない人でも読み解きやすい。
- 条件と動作の組み合わせについて、抜けているケースがないか、確認しやすい。
決定表のデメリット
- 条件や考えられる動作が増えるとテストケースが増加する。
- 表が大きくなりすぎると、システムの全体像を把握することが難しくなる。
決定表作成時の注意
条件指定部では想定される「Y」と「N」の組み合わせを全て作ります。そのため、以下の参考例のように、条件が多くなればそれだけ条件のパターンが増え、表が大きくなります。
参考例
テストケース作成に決定表を利用する場合、条件と結果となる動作をまとめていくと、発生し得ない条件と動作の組み合わせや、動作に無関係な条件に気づくことがあります。
このような不要なテストケースを見つけ、テストケースから省くことで、テストにかかる工数をなるべく少なくすることが重要です。
上の参考例のように、動作に無関係な条件については条件指定部に「-」などの記号を記入します。
まとめ
今回は決定表について、詳しく解説しました。
- 決定表は、指定した条件をたどった場合にどのような動作になるかをまとめた表です。
- 決定表は、システム内部の処理条件を整理したり、テストケースを作成したりするために用います。
- 発生し得ない条件と動作の組み合わせや、動作に無関係な条件を省くことにより、テストにかかる工数を減らすことができます。