💺

私なりのデシジョンテーブルの書き方

2024/12/04に公開

はじめに

本記事は私がデシジョンテーブルを書く時に大切にしていることと、オレオレのやり方について解説します。
私のデシジョンテーブルの書き方が一般的というわけではありません。

本当の正しいやり方を知りたい人はJISを参照するか、🥦さんなどの有識者の方から聞くようにしてください。

ソフトウェアテストの小ネタAdventCalendar 2024の記事です。

https://qiita.com/advent-calendar/2024/software-testing-koneta

デシジョンテーブルってなんなの?

ソフトウェア設計技法としてのデシジョンテーブル

デシジョンテーブルとは「ソフトウェア設計技法」です。

「デシジョン・テーブルテーブル化による思考整理学」によると以下のように記載されています。

フローチャートはオペレーティング・マネージャーとコンピュータ・スペシャリストとの間に存在するコミュニケーション・ギャップを埋めるための図形表示であり(略)フローチャートやブロック・ダイアグラムの代りに、あるいはそれらと共に用いられる
デシジョン・テーブル テーブル化による思考整理学 p23

上記の書籍によると、デシジョンテーブルは条件分岐を表現する技法のひとつです。
また、設計技法におけるデシジョンテーブルは最初から省略した形で書かれることを許容します。

テストとしてのデシジョンテーブル

デシジョンテーブルは元々ソフトウェア設計技法なのですが、テストの技法として理解されていることも散見されます。
なぜなのかは不明なのです。設計技法としてあまり使われないからでしょうか。

それはおいといて、テストとしてのデシジョンテーブルについて語ります。

まず、表現手法としてのデシジョンテーブルとは別に、「デシジョンテーブルテスト」というものが存在します。

デシジョンテーブルテストとは、
デシジョンテーブルで表現したルールをテストケースでカバレッジすること
です。

実務でのデシジョンテーブル

しかし、実務で最初からデシジョンテーブルが用意されていて、それをテストで使った経験は私はありません。

ほとんどのテスターはデシジョンテーブルを作るところから始まりまると思います。
本記事では私が実際にテスト用のデシジョンテーブルを作るにあたって、大切にしていることを書きます。

デシジョンテーブルの方針

テストとしてのデシジョンテーブルは、私は「省略しない」というスタンスを取ります。
これはマジで省略しないのではありません。(どっちや)

最終的に省略したデシジョンテーブルを作成して、デシジョンテーブルテストにすることは同じです。
ただ、私の場合は中間成果物として省略しないデシジョンテーブルは残し、なぜ省略するのかを記載するようにします。

テストにおいて、デシジョンテーブルで表現するものは「テスト条件のスコープ内で識別できる動作に対して識別できる条件の組み合わせ」だと考えます。
なので、デシジョンテーブルで表現される2のべき乗はすべて表現します。

こだわり 1.デシジョンテーブルの作成手順

JISなどの規約ではデシジョンテーブルの書き方は定義されています。
しかし、私が作成するときは順番の入れ替えをしています。
私は以下の順番です。

  1. 動作記述部を記載する
  2. 条件指定部を記載する
  3. 全パターン書く
  4. 省略する
  5. 〜テストケースへ〜

動作記述部を先に記載するのは、デシジョンテーブルのスコープを定めるためです。
JISのやり方は条件のすべてを記載してからパターンを出して動作指定部を書きます。

私はこのやり方はせず、テストのスコープを意識するために動作記述部から記載します。
「どんな動作を見たいのか」を先に決めることで、条件が発散せずに記載することが可能だからです。

デシジョンテーブルテストは条件をたくさん書くよりも、条件の組み合わせが大切だという理解をしています。
条件の発散であればもっと前段階で行うべきだと考え、テスト設計フェーズでは最小限の必要な組み合わせを導出します。

すべてのテストをデシジョンテーブルで表現する必要は私はないと考えています。

こだわり 2.拡張指定で書かない

デシジョンテーブルでは拡張指定を使わないようにしています。
これは私の「テスト技法はカバレッジが大切」という思想に立脚しています。

機械的に組み合わせを導出して、組み合わせパターンを出し切りやすいように、拡張指定では書かないようにしています。

こだわり3.全パターンを書く

デシジョンテーブルでは機会的に全パターンを導出します。

該当するテスト条件のスコープの最大のパターンを先に洗い出します。
最大数を出して安心したところで、省略します。

テストケース数は削りますが、必ずここで「省略した理由を書く」ことを大事にしています。
ですので、全パターンの表には「省略した理由が書かれているテスト設計成果物」として残ります。

「省略した理由を書く」のは、デシジョンテーブルの説明性を高めるためです。
とくに「関係ない」として省くことがある場合は、「実は関係あったよ」などがまれにあります。
それについて、関係者と合意を得るために積極的に残すようにしています。

こだわり4.省略したテーブルを書く

最終的にデシジョンテーブルはテストケースとして記述されるので、省略したテーブルも書きます。
省略したテーブルは、組み合わせとテストケース数の観点でテストケースのレビューに使用します。
なので、ごまずんのデシジョンテーブルは最低でも2つ作成されます。

おわりに

デシジョンテーブルの作成方法が流行っているみたいなので、私のやり方を記載しました。
これは正しい教科書通りのやり方ではないので、自分自身できちんと調べて考えるか、偉い人に習うようにしてください。

GitHubで編集を提案

Discussion