見出し画像

第271回: 「ALTAのテキストをつくろう」31 (デシジョンテーブルテスト/後編)

◀前の記事へ 次の記事へ▶


≡ はじめに

前回は、「3. テスト技法」の「3.2 ブラックボックステスト技法」の「3.2.3 デシジョンテーブルテスト」の中編として、デシジョンテーブルテストの適用、制限/注意事項について書きました。

前回の復習は以下で模擬試験問題の確認を通して行います。
今回はJSTQBのALTAシラバスの「3.2.3 デシジョンテーブルテスト」の後編として、「デシジョンテーブルテストのカバレッジ、検出できる欠陥の種類」について書きます。



≡ 前回の復習

以下は前回出題したJSTQB ALTAの模擬試験問題を𝕏にポストした結果です。



𝕏によるアンケート結果

投票の結果、4の「N, N」が48.6%と最も多く、正解も4です。

落ち着いて考えれば、選択肢1と2は、それぞれすでに、デシジョンテーブルの列1と列2(デシジョンテーブルでは列のことをルールと呼びます)に現れています。また、選択肢3は、「N, Y」すなわち、「100で割り切れず400で割り切れる数」ということになりますから、そんな数はあり得ません。

いま「あり得ません」と書きましたが、例えば“入力された数が100で割り切れるかどうかを調べる関数に欠陥があって40000をチェックすると割り切れない”と返す可能性はあります。

このケースでは、“40000は100で割り切れず400で割り切れる数字”となります。

ただし、「デシジョンテーブルテストの各条件はは単機能はテスト済みで問題ない」(前編の模擬テスト)という前提があるとすれば、40000が100で割り切れるのは単機能のバグなのでそういう問題は残っていないと考えることができます。

テストの勉強会で、たまにこのような質問をしてくる人がいるので書きましたが、忘れてもらって構いません。

ということで、残る4が正解となり、4で割り切れ、100でも400でも割り切れない、例えば今年の2024年のような年とわかるのですが、正答率は50%を割ってしまいました。

ロジックが難しいわけではなく、このくらい簡単なロジックでも考えるのが面倒になってしまうのだと思います。

前回はヒントとして、以下の図を示しました。

うるう年のデシジョンツリー

こちらの図をデシジョンテーブルをつくる前につくるとデシジョンテーブルの間違いが減ります。

この図はロジックの仕様整理にとても便利なのですが、名前はデシジョンツリーといいます。AIの本とか読んでいるとたまにでてきます。

テスト対象がもっと複雑なロジックのときには、デシジョンツリーでは整理しきれなくなりますので、CFD法、もしくは、原因結果グラフを使用して、デシジョンテーブルをつくります。

CFD法と原因結果グラフはALTAの出題範囲外です。興味がある人は先のリンクを辿ってください。

※ ソフトウェアエンジニアリングの成果によって実装時にCFD法などが必要となるケースは少なくなりました。しかし、要件定義のときには「論理関係が考慮されていない要求」が顧客からランダムに飛び出すことがあります。それらを整理するときにCFD法などを使うことが有効です。
思いつきで挙がってきた要求間の論理関係を整理するときに有効ということです。

復習は以上とし、今回noteのテーマである「デシジョンテーブルテストのカバレッジ、検出できる欠陥の種類」に移ります。



≡ デシジョンテーブルテストのカバレッジ、検出できる欠陥の種類

JSTQBのALTAシラバスの「デシジョンテーブルテストのカバレッジ、検出できる欠陥の種類」の解説です。

■ デシジョンテーブルテストのカバレッジ

ALTAのシラバスでは、まず、一般的なカバレッジ基準について書いてあります。シラバスの記述を引用します。

この技法の一般的なカバレッジ基準は、デシジョンテーブルの各ルールを 1 つのテストケースでカバーすることである。カバレッジは、テストスイートでカバーされたルールの数と、実行可能なルールの総数の割合として測定する。

こちらは簡単ですね。前回のうるう年のデシジョンテーブルで考えてみましょう。

うるう年のデシジョンテーブル

黄色の最下行は、条件に合致する値(西暦年)のサンプルです。(デシジョンテーブルとしては不要な行です)
上記のデシジョンテーブルにはルール1からルール4まで4つのルールがあります。

2000年と2100年の2つのテストを実施すれば、4つのルールのうち2つをテストしたのですから、カバレッジは、2/4*100=50%です。

このときに、1900年のテストを追加しても、テストしたルールの数は変わりませんのでカバレッジは50%のままです。
だいぶ、この考え方には慣れてきたと思います。

ALTAのシラバスでは、この、一般的なカバレッジ基準に加えて拡張指定デシジョンテーブルの場合ついて書いてあります。

特に拡張指定デシジョンテーブルの場合には、境界値分析と同値分割法は、デシジョンテーブル技法と組み合わせることができる。順序付けられた同値パーティションが条件にすべて含まれている場合、境界値はルールやテストケースの追加をもたらす追加項目として使用することができる。

「拡張指定デシジョンテーブル」とは、「条件が個別の要素または要素のセットを表す複数の値を持つことを許容するデシジョンテーブル」のことです。

逆に全ての条件が、(上記のうるう年のデシジョンテーブルのように)「YとN」や「真と偽」といった2値のブール型の変数しかない場合、そのデシジョンテーブルのことを「制限指定デシジョンテーブル」と呼びます。

そして、拡張指定デシジョンテーブルの場合には、境界値分析と同値分割法を、デシジョンテーブル技法と組み合わせることができるということです。

たとえば、「お酒は二十歳になってから」についてデシジョンテーブルをつくってみます。

お酒は二十歳になってからのロゴ
お酒は二十歳になってからのデシジョンテーブル(拡張指定デシジョンテーブル)

上記デシジョンテーブルにはY,YとN,Nのルールは簡単化によって削除されています。「20歳以上で、かつ、20歳未満の人」はいませんから。

同値分割結果を追加してみます。

同値分割をした結果

ルールの数は変わりませんが、それぞれの拡張指定に対して有効同値パーティションの代表と無効同値パーティションの代表をテストするので、このデシジョンテーブルのカバレッジを100%とするテストケース数は4となります。

無効同値パーティションの値については禁則処理を実装してデシジョンテーブルテストには条件として含まなくて良いという設計にする方が良いですが、それは別の話(テスト容易化設計やシフトレフトの話)です。

境界値分析も同様です。

境界値分析をした結果(2つの値を用いる方法)
境界値分析をした結果(3つの値を用いる方法)

境界値分析の場合、2つの値を用いる方法のほうでは4ケース、3つの値を用いる方法のほうでは12ケース必要とわかりました。

実際のテストでは、上記の12ケースをカバレッジアイテムとせずに、テスト設計時に知恵を絞って重複するものを取り去ったり、不要なケースを削除するなどして、適切なカバレッジアイテムを設定します。


■ デシジョンテーブルテストの検出できる欠陥の種類

シラバスの記載が短いので全文引用します。

典型的な欠陥としては、特定の条件の組み合わせに基づく論理的な処理が正しく行われず、想定外の結果となることが挙げられる。デシジョンテーブルを作成していると、仕様書に欠陥が見つかることがある。準備した条件のセットに含まれる1つ以上のルールに対する期待結果が不明確であることは珍しくない。 最も一般的な欠陥は、アクションの欠落(ある状況下で実際に起こるべきことに関する情報がない)と矛盾である。

ALTAシラバス38ページ

重要な箇所は太字にした「最も一般的な欠陥は、アクションの欠落(ある状況下で実際に起こるべきことに関する情報がない)と矛盾」のところです。

「アクションの欠落」を「ある状況下で実際に起こるべきことに関する情報がない」と書いています。これは、実装漏れ、もしくは、if文のロジック記載漏れのことです。
「矛盾」の方は、15歳と入力したのに「お酒を飲んでよし」という出力がでてしまうなどです。

今年(2024年)のうるう日には「自動車の免許更新システム(日本)」、「スギ薬局の処方箋の管理システム(日本)」、「セルフ給油機使えず(ニュージーランド)」と、うるう日が原因のシステム障害が発生しました。

前回のうるう日は土曜日だったことからシステム障害が少なかった?
ここから、「うるう日を祝日にしたら、リスク回避になるのでハッピーでは?」という意見もありました。←頭いいな。特に2100年は祝日でいいと思いました。そのとき私は137歳だから祝日関係ないけどな。祝日にするのは良いアイデアだけど、インフラ系システムは、祝日といっても止めるわけにもいかないしなあ。

ということで、うるう年程度の簡単なロジックであっても考慮漏れやそもそも実装していない等々バグが発生しますので、テスト対象にロジック部分があればデシジョンテーブルをつくってテストするようにします。



≡ JSTQB ALTA試験対策

いつものことですが、まずは、「学習の目的」を確認します。

TA-3.2.3 (K4)デシジョンテーブルテストを適用して、特定の仕様アイテムを分析しテストケースを設計する。

ALTAシラバス29ページ

「K4」なので「理解」して「適用」できるだけではなく「分析」まで求められる重要な項目ということです。試験問題には、デシジョンテーブルテストを適用できるかどうかを問う問題が出ると思います。

《問題》
 1500円以上の書籍は、送料無料になる仕様に対して、以下のデシジョンテーブル(DT)をつくった。拡張指定なので2つの値を用いる境界値分析法と合わせてテストケースを作成した。
「DTカバレッジ率」が100%となる最小のテストケース数はどれか。

1. 4
2. 6
3. 8
4. 12

某インターネットの通販サイトの送料ルール

答えは次回に書きます。



≡  おわりに

今回は、「デシジョンテーブルテストのカバレッジ、検出できる欠陥の種類」がテーマでした。

次回は、「3.2.4 状態遷移テスト」について書きます。


この記事が気に入ったらサポートをしてみませんか?