≡ はじめに
前回(箸休め回でない連載のほうの前回)は、「CEGTestツールの使い方」の後編で、CEGTestツールを使用して原因結果グラフをつくるまでの操作の説明でした。前回の内容の理解度の確認は、「おわりに」に書いたものを整理し直した以下のまとめ(4は説明していないので3まで)を読んで、「そういうこともあるかもしれないなあ」と書いている内容を読み取れたらOKです。(なにいってるか分からないというかたは前回を読み直すことをお勧めします。割と重要なことが書いてあるので。)
ここまでの8回で、CEGTestツールがあれば「仕様書から原因結果グラフを作成して、デシジョンテーブルを生成する」ができるようになっているはずです。
『ソフトウェアテスト技法ドリル』に書いたこともだいたいここまでです。改訂版の赤ドリル本でも大筋の変更はなく、あとは「CEGTestを使って慣れろ!」という感じで「CFD法」の話題に移っています。
でも、noteは紙幅の制約なく書けますので、前回までを初級編として、中級編にうつります。
CEGTest中級編のメインはドリル本に名前しか出てこない「カバレッジ表」になるのですが、その前に5つの制約について書きます。
≡ 制約とは
上に、「原因結果グラフに補助的に付ける制約」と書きました。「はじめに」の手順に書いたとおり制約の付与は、ステップ3と4です。原因結果グラフのメインはステップ1の「「大きな論理構造」を結果ノードから遡るようにしてつくる」です。ところが、制約を上手く使うと、テスト実行をしやすいデシジョンテーブルが生成されます。特にデシジョンテーブルを読み込んで自動テストをしている場合、制約を正しくつけることができないと、テストができません。
■ 制約の辞書的意味
まずは、国語辞典をひいてみます。
要は、「制約条件を付けて動きを制限する」ってことです。
■ 原因結果グラフに制約をつけるとうれしいこと
ドリル本にはこう書きました。
要は制約を付けると、「あり得ない組合せがデシジョンテーブルにでなくなる」ということです。
そこで、CEGTestでは制約を回避しながら組合せをつくり、網羅基準のMC/DC 100%を実現しています。
ここまでは制約を付けることの正の側面です。
さて、制約の負の側面としては、「制約の組合せがデシジョンテーブルに現れないために、制約の組合せをユーザーが入力しようとしたときに働くエラー処理(フールプルーフ)がテストされない」があります。
そこで、ドリル本の後のほうに書いている「制約が効いていることのテストを追加する」ことが大切になります。
■ 制約の種類
原因結果グラフの制約は、CEGTestのツールバーにある、「NODE」、「ONE」、「EXCL」、「INCL」、「REQ」、「MASK」、「/」の7個のボタンのうち、「ONE」、「EXCL」、「INCL」、「REQ」、「MASK」の5つ(原因結果グラフの制約は5種類)です。次回からこの5つの制約の使い方について詳しく説明します。
■ 制約と禁則
「制約」と似た概念に「禁則」があります。
「禁則」は「制約」の厳しい版だと思ってください。ソフトウェアテストではHAYST法が「禁則」って言い始めました。
「禁則」が生まれたきっかけは、大きな直交表に、プリンタドライバ上の設定項目を因子・水準として、割り付けて組合せ表をつくったら、そのほとんどが実行できなかったことです。(「ハガキは両面印刷できない」というような制約が山ほどあったのです。)
手作業ならともかく、データ駆動の自動実行では致命的です。
そこで、当時、「同時に組合せが取れない条件」のことを「禁止の規則」という意味で「禁則」と名付けました。
上記の用語定義の通り、私たちが名付けた「禁則」は「機能」です。機能なので、「仕様書に禁則の仕様を書いて、ユーザーが禁則に引っかかる条件の組合せを入力しようとしたら、その入力ができない機能(例えば、片方を入力したときにもう片方を入力出来ないように不活性にする機能など)」が必ず実装されていないといけません。
制約のほうは禁則よりも広い概念なので、「ユーザーが設定しようとしたときに、入力できないことが機能として実装されていなくても良い」です。
≡ おわりに
今回は、「制約」の全体説明でした。
次回から、「ONE」、「EXCL」、「INCL」、「REQ」、「MASK」の5つについて、この順番で3回に分けて説明します。
結果から言うと「MASK」以外はテストの削減(デシジョンテーブルの簡単化)にはほとんど効果はありません。さらに「MASK」を使いこなすのはかなり難しいです。
そこで、実務上は、「EXCL」と「REQ」の攻略を重点にするとよいです。
ということで、次回は、1番簡単で分かりやすい[ONE]について書く予定です。