見出し画像

第227回: 「ソフトウェアテストしようぜ」40 CEGTest(10.制約ONE)

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


≡ はじめに

前回は、「制約とは何か」がテーマでした。

制約には、「ONE」、「EXCL」、「INCL」、「REQ」、「MASK」の5つの種類があって、「制約を付けるとその制約で指定した組合せがデシジョンテーブルに出現しなくなる」ということです。

ほかにも、禁則と制約の違いについても書きましたが、原因結果グラフに直接関係はないので忘れていても問題ありません。

今回は、上記5種類の制約のうち「ONE」について書きます。簡単ではあるのですが、うっかり間違えやすい落とし穴があるのでそれについても書きます。



≡ 制約ONEとは

制約は具体例を見るのが早いと思いますので、まずはドリル本に載せたものを示します。

ソフトウェアテスト技法ドリル』 p. 55 図3.10

昔のGoogleは、トップページで「ウェブ全体から検索」するか、「日本語のページを検索」するかをラジオボタンで選択できました。

昔のGoogleトップページ

ラジオボタンですので、「両方を選ぶこと」と「両方とも選ばないこと」はできません。ラジオボタンやメニューは、複数の選択肢からどれか一つをユーザーに選ばせるGUIアイテムです。このようなものを原因結果グラフの原因にするときに制約ONEを使います。

もう一つ例をあげます。

♪グーチョキパーで グーチョキパーで
♪なにつくろう なにつくろう
♪右手が【グー】で 左手が【チョキ】で
♪【かたつむり】 【かたつむり】

「グーチョキパーでなにつくろう」の歌

【かたつむり】をつくるまでは、意外と難しいので、とりあえず、右手の原因結果グラフを描いてみます。

まずは制約を付ける前、

右手の原因結果具ラグ

グーとチョキとパーは同時に出せませんし、何も出さないと「グーチョキパーでなにつくろう」の歌で何も作れなくなりますから、制約ONEを付けます。

制約ONEを付けたところ

CEGTestツールの操作については、「第224回」を参照ください。

さて、制約の前後を見比べると、全部が「F」のケース(#4)がなくなっています。日本語で言えば「グーもチョキもパーも出さない」ケースはなしということです。制約ONEについての雰囲気はつかんでいただけたのではないかと思います。


■ 制約をベン図で書いてみる

制約ONEを理解するために、ベン図を描くという方法があります。

グーチョキパーのベン図

制約ONEというのは、上のベン図で色が付いたところ以外の組合せは取りえないということです。三つの丸の外側の領域にも色がついていないことに注意してください。外側の領域はグーチョキパーの全てが「F」という意味です。


■ ベン図を表で表すと

ベン図の説明として、ドリル本にはこう書きました。

ソフトウェアテスト技法ドリル』 p. 55 図3.11

この図3.11の右側の表は、真ん中にあるベン図と同じものを「表」で表現して分かりやすくしたつもり・・・なのですが、「デシジョンテーブルで、この表を使ってテストをすると思った。」という人がいらして、「そうかー。そうも見えるよなー」と思ったので、上記のグーチョキパーのベン図をこの形式の表に直して色も付けてみようと思います。

制約を表した表

表中の「No.列」はベン図の8つの領域に対応しています。
次に、「グー・チョキ・パーの列」ですが、セルのなかの「Tはその手を出す」、「Fはその手を出さない」です。制約ONEがかかっているので、色が付いた行はどれも、Tが1つしかありません。
最後に、「制約結果の列」ですが、セルのなかの「Aはその組合せは許されている」、「N/Aはその組合せは(制約により)適用できない」(N/Aは、“not applicable”の意味)です。


■ 制約ONEの注意点

冒頭に「うっかり間違えやすい落とし穴がある」と書きました。それが何かを書きます。

前々回に、こんな原因結果グラフを描きました。

JaSST nanoに参加するかどうかの意思決定

注目してほしいのは、こちらのこの部分です。

習い事についた制約

こちらは、「習い事がある日は参加しない」というロジックを表現した原因結果グラフ(部分)ですが、こちらの制約をつけるときに、「制約ONE」を使いがちです。ところが、制約ONEにしてしまうと、どれか1つは必ず「T」となってしまいますので「習い事の日」というノードは常に「T」となってしまい、習い事がない日が出てこなくなります。(制約ONEによって、「習い事の日」の値がFとなることがないからです。)

こんな時は、上の図にあるように「制約EXCL」を使うのですが、「制約EXCL」については次回説明します。


■ 制約ONEの使いどころ

ソフトウェアのテストのときには、ラジオボタンやメニューなど、「どれか1つのみが選択状態にある」原因ノードに使うと良いです。デシジョンテーブルに慣れている方は「条件が多値の時に使う」と覚えても良いでしょう。

たまに、ラジオボタン「🔘」なのに、選択肢が全て選択されていない事があります。
大抵、実装バグなのですが、意図的にそうしていることもあり、その時には制約ONEではなく、制約EXCLを使用します。

逆に親ノードに「状態F」が欲しいときには制約ONEは使いません。

たとえば、以下の原因結果グラフのように「なし」というノードを追加したらどうか?と考える人がいるかもしれませんが、こうしても「習い事の日」が「F」になることはありませんので、うまくいきません。

上手くいかない例


≡  おわりに

今回は、「制約ONE」の説明でした。

えっ? グーチョキパーの歌が気になります??

♪グーチョキパーで グーチョキパーで
♪なにつくろう なにつくろう
♪右手が【グー】で 左手が【チョキ】で
♪【かたつむり】 【かたつむり】

「グーチョキパーでなにつくろう」の歌

答えだけ載せておきますね。

次回は、「EXCL」と、「INCL」をまとめて書く予定です。

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


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