【テストパターンの洗い出し】デシジョンテーブルを使ってみよう
1. はじめに
こんにちは。EGの深町です。
EGの中には、「プログラム書くのは大好きだけど、テストは得意ではない」
という方が多くいるのではないでしょうか?
今回は、そんな人のためにテストパターンの洗い出しだけでも簡単に・早く・正確にできる手法を紹介します。
2. デシジョンテーブルって何?
複数の入力条件の組み合わせを列挙し、それぞれの場合にどのような動作をするのかまとめた表です。
何が良いの?
- 慣れると作成が楽になり、かつパターン漏れがなくなる
- 完成したテストケースを見てパターンが網羅できていることがわかりやすい
デシジョンテーブルの構成
デシジョンテーブルは以下のような要素で構成されています。
例 引用:weblio辞書(決定表から)
条件記述部
プログラムなどが動作する条件を洗い出し列挙します。
条件指定部
条件記述部に対して、動作を指定します。以下いずれかを記載します。
Y:Yes
N:No
語句、値またはコード
―:無関係、または起こりえない
動作記述部
条件の組み合わせを満たしたときに動作する内容を記述します。
動作指定部
動作記述部に対して、動作を指定します。以下いずれかを記載します。
X:条件指定部を満足したときに動作する
―:無関係、または起こりえない
3. デシジョンテーブルの作り方
下記「基本的な構成」と「複雑な場合の構成」の2通りの構成例があります。
私自身案件をこなす中で、デシジョンテーブルを使いたいと思うような開発は大体後者でないと表現できなかったので、今回は後者の作り方に重点を置いて説明します。こちらは私が実際に開発した機能のテストケースの例です。
構成例
基本的な構成
下記のように条件がそこまで複雑でないもの
複雑な場合の構成
下記のように条件指定部の項目がYES、NOだけでは表すことができず、
複数の区分値などが絡み合い様々な結果になるもの
作り方
作り方は簡単です。下記のような項目と値のセットがあった場合の例を使って作成してみます。
この時条件に使用する項目に漏れがあるとパターン漏れしてしまうので
しっかり精査は行ってください。
- 条件①
在庫連携フラグ- ON
- OFF
- 条件②
在庫連携コード区分- JAN
- SKU
- 条件③
配送種別- 予約
- 通常
- 条件④
在庫状況- 外部在庫連携システムの在庫+委託在庫が注文数より大きい
- 外部在庫連携システムの在庫+委託在庫が注文数と等しい
- 外部在庫連携システムの在庫+委託在庫が注文数より少ない
条件記述部
下図のように条件①~④を縦に並べて記載してください。
また、項目名を一つ右のセルに入れておくとわかりやすいと思います。
条件指定部
下記式で総数を求めます。
「条件1=2個」、「条件2=2個」、「条件3=2個」、「条件4=3個」なので、2×2×2×3=24
24パターンが「総数」です。
総数の数だけ列を作成します。
次に条件1~4の条件指定部に下記表のルール表(上表)との紐づけコードを全パターン分記述していきます。
条件1の条件指定部
・総数を条件1の個数(2)で割ります。
・「総数:24」÷「条件1の個数:2」=12
・条件1の条件指定部に12個ずつになるようコードを記載します。
条件2の条件指定部
・条件1で求めた「12」という値を条件2の個数(2)で割ります。
・「条件1で求めた結果:12」÷「条件2の個数:2」=6
・条件2の条件指定部に6個ずつになるようコードを記載します。
条件3の条件指定部
・条件2で求めた「6」という値を条件3の個数(2)で割ります。
・「条件2で求めた結果:6」÷「条件2の個数:2」=3
・条件3の条件指定部に3個ずつになるようコードを記載します。
条件4の条件指定部
・条件3で求めた「3」という値を条件4の個数(3)で割ります。
・「条件3で求めた結果:3」÷「条件2の個数:3」=1
・条件4の条件指定部に1個ずつになるようコードを記載します。
動作記述部
各条件の組み合わせの結果どのような動作をするか
1行ずつ記載していきます。
動作指定部
動作記述部に記載した動作をするパターンの箇所にXを、
関係ない動作に-を記載していきます。
最後に、修正が入っていない等影響がないとわかりきっていて、テストを行わないパターンがある場合はグレーアウトするなどしてください。
そこも考慮して作りましたというのが後から見てわかりやすくなるので削除はしないように注意です。
これでデシジョンテーブルの完成です。
あとはテストを実施するだけです!(これもまた大変なのですが…)
4. おわりに
いかがでしたでしょうか?
ぱっと見、面倒に思えるこの作業ですが、一度やってみると非常に簡単で効率UPにつながるので是非参考にしてみてください。
以上、テスト効率化のための技法でした。