はじめに
こんにちは。アメリカで独学でエンジニアを目指している者です。
現在はRailsを勉強しているのですが、並行してソフトウェアテスト技法も学ぶことで、Railsチュートリアルの理解が深まるのではないかと考え、テスト技法の勉強を始めました。
今回学んだディシジョンテーブルについて、記憶が薄れないうちに簡単にまとめておきたいと思います。
ちなみに、テスト技法はUdemyで勉強しています。とても分かりやすいので、テスト技法を勉強したいと思う方はぜひ見てみてください。
ディシジョンテーブル
ディシジョンテーブルとは、条件同士は独立していて、込み入った論理関係を整理する場合に使用されます。
ドメイン分析テストは複数の条件が数式で結ばれている場合に有効だったのに対し、ディシジョンテーブルは複数の条件が論理式で結ばれている場合に使用します。
例えば、ネットショッピングの注文処理を考えてみましょう。
例: ネットショッピングの注文処理
以下の条件があるとします。
- ユーザーが会員である
- クーポンを持っている
- 在庫がある
この場合、注文が確定するかどうかは、これらの条件の組み合わせによって決まります。
ディシジョンテーブルを使うことで、すべての条件の組み合わせとその結果を明確に整理できます。
条件 | ルール1 | ルール2 | ルール3 | ルール4 | ルール5 | ルール6 | ルール7 | ルール8 |
---|---|---|---|---|---|---|---|---|
会員か? | ○ | ○ | ○ | ○ | × | × | × | × |
クーポンあり? | ○ | ○ | × | × | ○ | ○ | × | × |
在庫あり? | ○ | × | ○ | × | ○ | × | ○ | × |
結果(注文可否) | ○ | × | ○ | × | ○ | × | × | × |
この表を見ると、
- 在庫がない場合は、会員やクーポンの有無に関係なく注文できない
- 在庫がある場合は、非会員の場合はクーポンの有無に関係なく注文できない
- 在庫があり、かつ会員ならばクーポンの有無に関係なく注文できる
というルールが明確になります。
また、注文の可否についてだけ見ればよいのであれば在庫の有無が関係してきているので以下のように、テストケースを圧縮することができます
条件 | ルール1 | ルール2 | ルール3 | ルール4 | ルール5 |
---|---|---|---|---|---|
在庫あり? | 〇 | 〇 | 〇 | 〇 | × |
会員か? | 〇 | 〇 | × | × | ー |
クーポンあり? | 〇 | × | 〇 | × | ー |
結果(注文可否) | 〇 | 〇 | 〇 | 〇 | ー |
在庫がなければ、注文はできないので在庫がある場合でそれぞれテストすることで網羅することが可能です。
ディシジョンテーブルの作成手順
ディシジョンテーブルを作成する際の基本的な手順は以下の通りです。
-
条件をリストアップする
- システムの動作に影響を与えるすべての条件を洗い出します。
-
条件の組み合わせを網羅する
- すべての条件の真(○)と偽(×)の組み合わせを列挙します。
-
結果を定義する
- 各条件の組み合わせに対するシステムの挙動(結果)を定義します。
-
冗長なルールを統合する(必要に応じて)
- 明らかに不要なルールを統合することで、テーブルを簡潔にできます。
ディシジョンテーブルのメリット
ディシジョンテーブルを活用することで、以下のようなメリットがあります。
- 条件の組み合わせを網羅できる: 人間が見落としやすい組み合わせも明確にできる。
- 仕様の整理がしやすい: システムの動作を視覚的に整理できるため、仕様の矛盾を発見しやすくなる。
- テストケースの設計がしやすい: 条件ごとのテストパターンを明確にできるため、漏れのないテスト設計が可能。
まとめ
ディシジョンテーブルは、複数の条件が論理式で結ばれている場合に有効なテスト技法です。
特に、条件が複雑で人間の頭では整理しにくい場面において、テストケースの抜け漏れを防ぐのに役立ちます。