デシジョンテーブルの解説

デシジョンテーブルとは

デシジョンテーブルとは、決定表(JIS X 0125)[1]として規格が定義されています。論理関係を表形式で整理するためのツールで、行方向に条件と動作、列方向にルールの組合せます。プログラムの処理条件やポリシーなどをわかりやすく表現するために利用したり、ソフトウェアのテスト条件を整理するためにも利用されます。

図1. デシジョンテーブルの例(駐車場料金の割引計算)

図1. デシジョンテーブルの例(駐車場料金の割引計算)

デシジョンテーブルを作成する手順は一般的に以下の通りです。

  1. 分析対象・テスト対象の持つ条件・原因を洗い出し、それぞれを行として追加します
  2. 処理・動作・結果を洗い出し、それぞれ行として追加します
  3. 起こりうる条件・原因の組合せを作成し、それぞれ列として追加します
  4. 作成した列のうち、集約可能な列の組を圧縮します
  5. 組合せの作成と圧縮についての検算をします

デシジョンテーブルを使うことで以下のようなメリットが挙げられます。(作成中)

しかし、以下のような分析対象・テスト対象を扱う場合は注意が必要です。(作成中)

 

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

デシジョンテーブルは以下のような要素で構成されています。

    • 条件記述部(condition stub)

考慮すべき条件・原因を列挙する部分で、図2では「3000円以上10000円未満」「シネマ利用」などが該当します。制限指定の場合は、記述した語句が真であるか偽であるかが明確になるように命題形式で記述するとわかりやすいです。拡張指定の場合は、記述した語句が数値や複数選択肢を持つことが明確になるように変数形式で記述するとわかりやすいです。原因結果グラフ技法で使われるデシジョンテーブルは、制約指定のように命題形式で記述します。

図2. 条件指定部

図2. 条件指定部

 

    • 動作記述部(action stub)

考慮すべき動作・結果を列挙する部分で、図3では「30分無料」「3時間30分無料」などが該当します。制限指定の場合は、記述した語句が実施されるかされないか(真であるか偽であるか)が明確になるように命題形式で記述するとわかりやすいです。拡張指定の場合は、記述した語句が実施される動作そのものや結果そのものを記述するとわかりやすいです。原因結果グラフ技法で使われるデシジョンテーブルは、制約指定のように命題形式で記述します。

図3. 動作指定部

図3. 動作指定部

 

    • 条件指定部(condition entry)

それぞれの条件・原因を特定の値・意味で指定し、ひとつのルールと関連付けをします。条件指定部には表1のような書き方をします。すべての条件・原因の値・意味が指定されるとひとつのルールが定められ、自動的に動作・結果が決定されます。また、ひとつのルールは他のルールと一致しないように値・意味の組合せをとります。

JIS X 0125 では規定していませんが、列挙される条件・原因の順序が判定順序などの意味を持つ場合もあります。ただし、原因結果グラフ技法で使われるデシジョンテーブルの場合は、順序に関するREQ制約などを用いて判定順序を表現し、特にCEGTestでは列挙される順序を論理点の検証順序として利用しています。

表1. 条件指定について

表記 ルールで関連付ける意味 CEGTest
表記
Y
(Yes)
この行に対応する条件・原因が真であることを意味します。 T、t
N
(No)
この行に対応する条件・原因が偽であることを意味します。 F、f
値、語句など この行に対応する条件・原因が記述された値であったり、語句を満たすことを意味します。

#
この行に対応する条件・原因が無関係であることを意味します。また、特に他の条件・原因の組合せによってこの行に対応する条件が起こり得ないことを「#」で表記する場合もあります。

図4. . 条件指定部

図4. . 条件指定部

 

    • 動作指定部(action entry)

それぞれの動作・結果を特定の値・意味で指定し、ひとつのルールと関連付けをします。

列挙される動作・結果の順序は、実行される動作(生じる結果)の順序を表現しています。動作指定部には表2のような書き方をします。もし、順序の異なる動作・結果がある場合には、必要な順序組合せの個数分だけ動作指定部を記述する必要があります。

表2. 動作指定について

表記 ルールで関連付ける意味 CEGTest
表記
X
(eXecute)
この列に指定された条件・原因の真偽値にすべて適合する場合、この行に対応する動作・結果が生じることを意味します。 T、t
この列に指定された条件・原因の真偽値にすべて適合する場合、この行に対応する動作・結果が生じないことを意味します。 F、f
値、語句など この列に指定された条件・原因の真偽値にすべて適合する場合、この行に対応する動作・結果が記述された値であったり、語句を満たすことを意味します。

図5. 動作指定部

図5. 動作指定部

 

デシジョンテーブルの具体例

(作成中)

 

参考文献・引用文献

[1] JIS X 0125 決定表, 日本規格協会

 


原因結果グラフ技法の解説(1)

原因結果グラフ技法とは

原因結果グラフ技法とは、入力やイベント(=原因)の組合せと、出力(=結果)との関係をブールグラフ化し、そこからデシジョンテーブルを作成するテスト設計技法である。複雑な論理関係を網羅的にテストするための道具であると同時に、仕様の漏れや矛盾を見つけたり、設計を単純化するためにも利用される。

原因結果グラフ技法の特徴

ソフトウェアテストにおいて、有則・無則という概念[1]がある。一般的に、有則とは動作が定義された入力条件の組を指し、無則とは組み合わせても何の影響も及ぼさない入力条件の組を指す。原因結果グラフ技法は、組合せテスト技法とみた場合に有則系のテスト(設計)技法に分類される。

表1. 組合せテスト技法の分類

有則・無則

原因結果グラフ技法の手順は一般的に以下の通りです。

  1. テスト対象を分析して原因結果グラフを作成する
  2. 原因結果グラフから論理関係を網羅するデシジョンテーブルを作成する
  3. デシジョンテーブルをもとにしてテストケースを実装する

テスト対象を分析してグラフ化することは、単なるテスト設計という作業だけではなく、設計書や仕様書の整理という作業とも言い換えられます。この作業によって、テスト対象となるプログラム・システムに潜む矛盾を見つけだしたり、設計の単純化を促進することもできます(セルフレビューやリファクタリングの効用)。

実際に原因結果グラフを作成する場合は、分析作業とグラフ作成の作業を繰り返します。そのたびにグラフの修正が必要となるため、一般的にはホワイトボードや付箋紙、その他支援ツールが必須となります。さらに、テスト条件の組合せを表すデシジョンテーブルに変換する際、一定のスキルが必要であり、テスト条件の因子数が多くなればなるほど、手作業で実施することが困難となります(技法の理解、時間的制約、正確性の問題)。

原因結果グラフの構成

原因結果グラフは「ノード」「論理関係」「制約」の3つの要素で構成される。

ノード

ノードとは、真偽値(True or False)を持つなんらかの条件を表した要素で、ソフトウェアテストでは「入力条件」や「イベント」あるいは「期待結果」「事後条件」にあたり、数学的には「命題」にあたる。

論理関係

一般的に原因結果グラフにおける論理関係は、AND と OR をさす。1つ以上の原因(A、B、C)がすべて成立する場合にある結果(X)が成立することを図1のように表現し、で関係を表現する。

AND

図1. 論理関係 AND の例(X = A AND B AND C)

同様に1つ以上の原因(A、B、C)のいずれか一つが成立する場合にある結果(X)が成立することを図2のように表現し、で関係を表現する。

OR

図2. 論理関係 OR の例(X = A OR B OR C)

原因結果グラフでは、論理演算子を挟んで左側に原因(入力条件やイベント)を配置し、右側に結果(出力結果)を配置し、特に原因側のノードを「原因ノード」、結果側のノードを「結果ノード」と呼ぶ。

単純な論理関係は AND、OR のみで表現できるが、通常はノードを論理関係で結合するバリエーションとして「否定(NOT)」と「階層構造」が必要である。これらについて解説する。

  • 否定(NOT)
  • 原因ノードの条件を逆(数学的には補集合)にして論理関係を表現する場合は、否定(NOT)を用いる。原因結果グラフでは、図3のようにアルファベットの N を模した記号を記載して表現する。

    NOT

    図3. 否定表現の例(X = ¬A OR B OR C)

  • 階層構造
  • 結果ノードはさらに別のノードの原因になるものがある。原因結果グラフでは論理関係を階層的に表現することが可能である(図4)。

    階層構造

    図4. 階層構造の例(X = (a1 AND a2) OR B OR C)

    論理関係の観点で最も原因側に配置されたノードを原因ノード、最も結果側に配置されたノードを結果ノードと呼ぶ。原因ノードでも結果ノードでもないノードは中間ノードと呼び、あるノードの原因でもあり、あるノードの結果でもある。図4では、ノードAが中間ノードである。

    上記のようにノードを論理関係で連結したものを総じて原因結果グラフと呼び、グラフ自身が真偽値を持つ「命題」と見ることができる。

    ※なお、論理関係・論理演算子には XOR、NAND、NOR、XNOR などがありますが、CEGTest で利用できる論理関係は AND、OR のみです。

    制約

    ある条件の取りうる値に制限をかけたり、必然的にありえない(複合)条件を出現させないために原因結果グラフでは「制約」という概念を用いる。制約には表2、表3のように ONE、EXCL、INCL、REQ、MASK がある。

    表2. 原因結果グラフで用いる制約(ONE、EXCL、INCL)

    Constraint1

    表3. 原因結果グラフで用いる制約(REQ、MASK)

    Constraint2

    参考文献・引用文献

    [1] ソフトウェアテストの展望: SW機能テストから、システム挙動の評価へ, 松尾谷徹(デバッグ工学研究所), JaSST’07 Tokyo 招待講演


    CEGTestにxlsx形式でのエクスポート機能を追加

    xlsx形式のエクスポート機能

    CEGTest(セグテスト)のエクスポートに xlsx 形式でのダウンロード機能を追加しました。
    1シート目はデシジョンテーブル、2シート目はカバレッジ表です。本当は、3シート目に原因結果グラフの元データを、4シート目に原因結果グラフの画像を張り付けたかったのですが、ちょっとそこまで実装できませんでした。

    URL はこちら。

    CEGTest(ウェブ版)
    CEGTest(ダウンロード版:v1.6-20130907)

    なお、今回の機能追加では、XLSX.js を利用させていただきました。

    原因結果グラフの演習

    原因結果グラフ技法を使いこなすためには、グラフをたくさん描くことが大事です。ここでは、2009年からTEFが主催する勉強会で紹介した演習問題を取り上げます。難易度(★~★★★★★)のやさしい順にひとつずつ原因結果グラフを作成して、模範解答と見比べて、違いを見つけてみましょう。

    この演習問題のもとになった勉強会は、秋山浩一さん、鈴木三紀夫さんのご協力によるものです。この場を借りて御礼申し上げます。
    また、原因結果グラフは仕様の曖昧さや作成者の解釈によって異なることがあり、softestが作成した解答例と一致しなくても不正解ではありません。ノードのつけ方や制約のつけ方の違いを確認してみましょう。

    原因結果グラフ テスト支援ツール
    CEGTest(セグテスト)

    解答例についての問い合わせ
    本ページのコメントでお問い合わせいただくか、メールアドレス宛てまでお願いいたします。

    難易度:★☆☆☆☆
    迷惑電話防止機能 [2009年3月4日 演習]

    電話帳に登録していない相手や、電話番号を通知してこない相手から電話がかかってきたときに、指定した時間が経過した後に着信音が鳴る。
    ただし、メモリ登録外着信拒否を「ON」に設定していると本機能は使用することができない。

    (携帯電話マニュアルより)

    解答例 (画像, 14.9K)
    解答例 (CSV, 0.5K)
    解説



    難易度:★☆☆☆☆
    オフサイドルール [2009年3月4日 演習]

    オフサイドというルールは、「オフサイドポジションにいる選手に対して、パスを出す事を禁止する」というものである。
    ここで「オフサイドポジション」とは以下の条件を全て満たした位置の事を指す。

    1. 相手陣内にいる
    2. ボールより前にいる
    3. 相手の2番目に後ろの選手よりゴールラインに近い位置にいる

    (Wikipediaより)

    解答例 (画像, 17.7K)
    解答例 (CSV, 0.6K)
    解説



    難易度:★★☆☆☆
    献血を断られるケース [2009年3月4日 演習]

    • 献血する人への負担軽減の理由から
      • 体調がよくない
      • 睡眠不足(ただし、当日の採血計画を大きく下回る状況で医師の許諾があれば献血可能)
    • 輸血される側の安全の理由から
      • 特定の病気に罹患したことがある
      • 海外から帰国後4週間

    (Wikipediaより)

    解答例 (画像, 29.9K)
    解答例 (CSV, 1.1K)
    解説



    難易度:★★★★☆
    JR乗車券類の誤購入の場合の取扱方法 [2009年3月4日 宿題]

    第293条

    1. 旅客が、誤つてその希望する乗車券、急行券又は特別車両券と異なる乗車券、急行券又は特別車両券を購入した場合で、その誤購入の事由が駅名の同一・類似その他やむを得ないと認められ、かつ、係員がその事由を認めたときは、正当な乗車券、急行券又は特別車両券に変更の取扱いをする。
    ただし、指定急行券及び指定特別車両券については、この取扱いをしない。

    (JR東海 旅客営業規則より)

    解答例 (画像, 42.8K)
    解答例 (CSV, 1.9K)
    解説



    難易度:★★☆☆☆
    ニート(厚生労働省の定義) [2010年2月9日 演習]

    • 15歳~34歳、未婚であって家事・通学をしていない人
    • 学籍はあるが、実際は学校に行っていない人
    • 既婚者で家事をしていない人

    (Wikipediaより一部抜粋)

    解答例 (画像, 34.2K)
    解答例 (CSV, 0.9K)
    解説



    難易度:★☆☆☆☆
    インストールの仕様 [2009年3月4日 例題]

    Administratorまたは、Power Userがログインしている場合に、ディスク容量があれば、インストールを開始することができる。

    解答例 (画像, 13.7K)
    解答例 (CSV, 0.6K)
    解説



    難易度:★☆☆☆☆
    投函可能な年賀状 [2009年3月27日 例題]

    裏面にプリント、もしくは、手書きのどちらかあるいは両方があり、表面に送り先の記載がある年賀状は投函できる。

    解答例 (画像, 10.8K)
    解答例 (CSV, 0.5K)
    解説



    難易度:★★☆☆☆
    定額給付金 [2009年3月27日 演習]

    給付対象者1人に付き12,000円が、また65歳以上及び18歳以下の者については20,000円が給付される。

    (Wikipediaより抜粋)

    解答例 (画像, 11.0K)
    解答例 (CSV, 0.4K)
    解説



    難易度:★★☆☆☆
    ATM手数料 [2009年3月27日 演習]

    「引出」「預入」「振り込み」機能があり、夜23時~翌朝8時までは手数料が発生する。ただし、優遇会員の場合は、終日手数料がかからない。

    解答例 (画像, 18.3K)
    解答例 (CSV, 0.6K)
    解説



    難易度:★★★☆☆
    携帯電話の音楽再生中の着信処理 [2009年3月27日 演習]

    携帯電話の音楽再生中の着信処理に対する以下の要求に対して原因結果グラフとカバレッジ表およびデシジョンテーブルを作成しなさい。

    1. 音楽ファイルは、本体メモリと、メモリスティックに格納できる
    2. 音楽再生中に電話がかかってくると音楽が止まり着信ベルが鳴る
    3. 着信応答には次の2つの方法がある
      • 本体の通話ボタンを押す
      • ハンズフリーヘッドセットの通話ボタンを押す

    解答例 (画像, 27.6K)
    解答例 (CSV, 1.6K)
    解説



    難易度:★★☆☆☆
    電話機 [2009年5月29日 例題]

    受話器を取るか、スピーカーボタンを押して、発信音を確認してから電話番号を押すことで電話をかけることができる。

    解答例 (画像, 16.4K)
    解答例 (CSV, 0.8K)
    解説



    難易度:★★★★☆
    フォルダのクリック方法 [2009年5月29日 例題]

    シングルクリックのときのみ、アイコンの下線状態の選択ができる。
    (ダブルクリックで開くを選択すると下線状態の選択は意味が無くなる)

    解答例 (画像, 47.5K)
    解答例 (CSV, 2.4K)
    解説



    印刷時の用紙サイズ [2009年5月29日 例題]

    用紙サイズは、A4, B4, A3, B5の4種類あるが両面可能な用紙はA4とB4のみ。




    仮運転免許の路上運転 [2009年4月20日 宿題]

    仮免許を所持して、以下に箇条書きする基準に該当する運転免許保持者を指導者として助手席に同乗させ、「仮免許練習中」標識を所定の位置に装着した自動車で、路上練習をすることができる。

    同乗指導者の資格は、

    • 練習する自動車を運転可能な第一種運転免許保持者で、運転経験が通算3年以上
    • 練習する自動車を運転可能な第二種運転免許保持者

    のいずれかである。ただし、上の条件を満たしていても、免許停止処分中は同乗指導者となることができない。

    (Wikipediaより抜粋)




    コピー・アンド・ペースト [2009年5月29日 演習]

    コピーしたい範囲を選択したうえで一定の操作を行うことでクリップボードにデータをコピーでき、クリップボードにコピーされたデータは、一定の操作で他の箇所に貼る(ペーストする)ことができる。一定の操作とは、

    • Ctrl-C、あるいは、範囲選択中に右クリック「コピー」
    • Ctrl-V、あるいは、コピーデータがあるときに右クリック「貼り付け」

    (Wikipediaをもとに作成)




    遊園地の入園料 [2010年2月9日 演習]

    遊園地の入園料

      大人 小学生
    一般 2,000円 1,000円
    団体 1,800円 900円
    • 市内在住の小学生は入場料は無料となります。
    • 65歳以上の方、6歳未満のお子様は無料となります。
    • 17時以降、県外からの来場者はトワイライトチケット(500円)でご入場いただけます。




    風呂リモコンのテスト [2009年4月20日 宿題]

    仕様

    1. リモコンの仕様
      • 風呂ボタンを入れると風呂が沸く(ただし浴槽に水があること)
      • 風呂を沸かしている間は給湯優先ボタンを入れておかないとカラン・シャワーからお湯は出ない(水が出る)
      • それぞれのボタンにはステータスランプが右上についている
    2. 蛇口ハンドルの仕様
      • 右に回すとシャワーから水(またはお湯)が出る
      • 左に回すとカランから水(またはお湯)が出る

    Photo



    ボウリングのスコア計算 [2009年5月29日 演習]

    点数の計算法

    1. フレームにおいてスペア・ストライクがない場合(オープンフレームと呼ぶ)、2回の投球で倒したピンの本数がそのフレームの得点となる。
    2. スペアを出した場合、倒した本数である10点に加え、次の1投球で倒したピンの本数がこのフレームの得点に加算される。
    3. ストライクを出した場合、倒した本数である10点に加え、続く2投球で倒したピンの本数が加算される。つまり次の投球もストライクだった場合は、さらにその次の投球(2フレーム先の第1投球)で倒したピンの本数まで加算される。
    4. 第10フレームのみ、スペア・ストライクを出した場合、3投して倒したピンの総数を第10フレームの得点として計算する。
    5. 各フレームの得点の合計が1ゲームの得点となる。最高得点は300点となる。

    (Wikipediaをもとに作成)