京セラコミュニケーションシステムの要谷(かなめや)です。
ソフトウェアテストに関することを業務としております。
今回はテストケースを考えるときに使えるテクニックについてお伝えします。
前回の同値分割と境界値分析でテストケースを賢く減らすからの続きになります。
対象の読者
今回は実装やテストをするときに 「条件分岐が多くて、頭がこんがらがる…」 「この組み合わせ、テストしたっけ?」 といった場面に遭遇している方を対象としています。
初めに
システムの仕様が複雑になると、前回の「同値分割」や「境界値テスト」だけではカバーしきれない場面が出てきます。そんな時に頼りになる強力な武器が、今回ご紹介する「デシジョンテーブル(決定表)」です。
「もしAで、かつBなら〇〇する。でもCの場合は…」といった複雑なルールを、表形式でスッキリ整理する技法です。さっそく見ていきましょう!
デシジョンテーブルとは?
デシジョンテーブルは、 「条件(入力)」 と 「動作(出力)」 の組み合わせを表にまとめたものです。
文章やフローチャートでは見落としがちな「レアな組み合わせ」や「仕様の矛盾」も、表にすることで一目瞭然になります。
デシジョンテーブルは「論理的な抜け漏れ」を防ぐための強力なツールと言えるでしょう。
JISにもきちんと定義されています。(JIS X0125:1986 決定表 などのキーワードで検索してみてください)
具体例:ネットショップの「送料」を判定してみる
具体的なイメージをつかむために、あるショッピングサイトの送料ルールを例に考えてみます。
[仕様]
- 基本の送料は500円です。
- プレミアム会員は常に送料無料です。
- 会員でなくても、購入金額が3,000円以上なら送料無料になります。
文章で書くとシンプルに見えますが、「プレミアム会員で購入金額が3,000円未満の場合は?」と聞かれて、瞬時に答えられますか?(無料です。では確かめてみましょう。)
これをデシジョンテーブルに起こすと、以下のようになります。
- STEP 1:条件と動作を書き出す
まず、仕様から「条件」と「動作」を抜き出します。- 条件 (Condition)
- C1: プレミアム会員か?
- C2: 購入金額が3,000円以上か?
- 動作 (Action)
- A1: 送料無料(0円)
- A2: 通常送料(500円)
- 条件 (Condition)
- STEP 2:表(テーブル)を作る
条件の「Yes(Y) / No(N)」の組み合わせをすべて列挙し、それぞれの動作を書き込みます。
(JISの定義で、動作するところには「X(エックス)」を、動作しないところには「-」を記します。直感的には「〇」を書きたくなりますが今回はJISの定義に従います。)
| 1 | 2 | 3 | 4 | |
|---|---|---|---|---|
| [条件] | ||||
| C1:プレミアム会員か? | Y | Y | N | N |
| C2:購入金額が3,000円以上か? | Y | N | Y | N |
| [動作] | ||||
| A1:送料無料(0円) | X | X | X | - |
| A2:通常送料(500円) | - | - | - | X |
このように表に整理すると、全部で4つのパターン(ルール1〜4)であることが分かります。
ルール2を見ると、「プレミアム会員なら、3,000円未満でも送料無料」ということが明確になります。
ルール4だけが「通常送料」になるケースだということも分かります。
この表の「縦の列(ルール)」を、そのままテストケースとして取り扱うことができます。
デシジョンテーブルを使うメリットは、単にテストケースが作れるだけではなく、仕様の追加や変更があった際も網羅的に確認することができます。
では前出の例で条件と動作を1つ増やし、追加の仕様を検討してみましょう。
- 購入日時が12月31日までであれば送料無料のキャンペーンを適用する
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|---|
| [条件] | ||||||||
| C1:プレミアム会員か? | Y | Y | Y | Y | N | N | N | N |
| C2:購入金額が3,000円以上か? | Y | Y | N | N | Y | Y | N | N |
| C3:購入日時は12月31日までか? | Y | N | Y | N | Y | N | Y | N |
| [動作] | ||||||||
| A1:送料無料(0円) | X | X | X | X | X | X | X | - |
| A2:通常送料(500円) | - | - | - | - | - | - | - | X |
追加される条件によっては表が横に伸びたり縦に伸びたりしますが、このように仕様の追加があった時も網羅的に確認することができます。
表を見せれば、開発者やお客様とも認識合わせがスムーズになりますし、プログラミング時の条件分岐(if文)の実装漏れも防ぎやすくなります。
表を作成した後、結果が同じルールをまとめて整理することでテストケースの数を減らすことも可能です。
たとえば、条件で『C1のプレミアム会員がYesの場合』は、『C2、C3の条件に関わらず常に動作はA1の送料無料(0円)』になります。
そのように条件を整理し圧縮した表は以下のようになります。
条件欄の「-」は「どちらでもよい」ということを、つまりテストする時の選択条件は任意の値で構わないということを示します。
| 1 | 2 | 3 | 4 | |
|---|---|---|---|---|
| [条件] | ||||
| C1:プレミアム会員か? | Y | N | N | N |
| C2:購入金額が3,000円以上か? | - | Y | N | N |
| C3:購入日時は12月31日までか? | - | - | Y | N |
| [動作] | ||||
| A1:送料無料(0円) | X | X | X | - |
| A2:通常送料(500円) | - | - | - | X |
まとめ ✏️
今回は、複雑な論理を整理するデシジョンテーブルをご紹介しました。
- まずは条件と動作を洗い出します。
- 条件についてはYes/Noの組み合わせをすべて網羅します。
- 条件に応じた動作を整理します。
- 表の1列がそのままテストケースになります。
最初は手書きのメモでも構いません。
頭の中だけで考えず、表に書き出す習慣をつけることが、抜け漏れの防止となり品質向上につながります。
ひとつずつ技法をマスターして、どんな仕様が来ても動じないエンジニアを目指しましょう!
所属部署について
ITエンジニアが活躍する地方拠点「長崎 Innovation Lab」
https://www.kccs.co.jp/contents/nagasaki-innovation-lab/
長崎 Innovation Labでは、IT技術を活用して、工場などものづくりの現場で活用できるシステムの開発に取り組んでいます。自由な発想でこれまでにない社会に役立つ製品・サービスを生み出し、長崎から発信していくことを目指しています。