たまゆら雑記

いろいろなメモを書き残します。

デシジョンテーブル(2)

2005年07月24日 00時19分44秒 | ソフトウェアテスト
「基礎から学ぶソフトウェア・テスト」ネタ(その3)

106ページにデシジョンテーブルを用いたテストケースの挙げ方が載っています。
おそらくページ数の関係だと思いますが、説明がはしょられているところがあります。私の方で補足しておきましょう。
まずは、仕様から。
年齢が6歳以上18以下、現住所が埼玉県、学生証の提示ありの場合に、チケット代金を学生金額とする


この仕様からテストケースを挙げるのに、デシジョンテーブルを使って説明されています。

最後にテストケースとなる組合せが書かれています。

年齢:T,T,T,F(19以上),F(5以下)
埼玉:T,T,F,T,F
学生:T,F,T,T,F


本文を読みますと、いきなりこの組合せがでてくるように感じられるかもしれません。実は本文の説明の中には2つ観点が入っているのですが、それを明確に分けておらず一緒くたにして書かれているため、初心者の人が読むと混乱してしまう恐れがあります。

2つの観点とは
(1)条件と同値分割の話
(2)優先して選択するテストケースの話

それぞれ分けて説明することにします。


◆条件と同値分割

条件には真偽だけを考えればよい場合と、同値分割も考慮して考えなければならない場合があります。本文にも書かれていますが、年齢が6歳以上18歳以下という条件があったとき、6歳未満と18歳より超える年齢を考慮します。

同値分割を考慮しなくてはいけないとき、デシジョンテーブルには2つの書き方があります。
1つめは、条件の中に追加していれるというものです。

条件
------------------------------
年齢が6歳未満
年齢が6歳以上18歳以下
年齢が18歳超

というように条件を追加するわけです。ただし、この条件は or の関係にありますので、この3つの条件のうち、いずれかが真の場合は他の条件は真になりません。そこだけは注意してください。なお、松尾谷徹先生のCFDではこの考え方を採用されています。

2つめは、本文に書かれているやり方です。同値分割を別の場所で行い、その結果をデシジョンテーブルに割り付けるという考え方です。

この割り付けるやり方を採用する場合には、一般にはこの後で述べるテストケースを絞り込んでから割り付けます。


◆テストケースの絞り込み

この話はデシジョンテーブル(1)であきやまさんからコメントをいただいています。

さて、本文には
特に依存関係が無い場合は、No1,2,4,5,12の5つのテストを行えば良いでしょう。

としか書かれておらず、なぜこれを選んだかの記述がありません。この補足をしましょう。

年齢:T,T,T,F,F
埼玉:T,T,F,T,F
学生:T,F,T,T,F

本文に合わせますと左からNo1,No2,No4,No5,No12のケースになります。

No1とNo12は分かりますね。すべて真かすべて偽をテストしています。
残りは何をテストしているのでしょうか。残りはそれぞれの条件を1つだけ偽にしているのです。学生証だけ偽、あとは全部真。埼玉在住だけ偽、年齢だけ偽となっているのです。

優先順位を意識するとき、このように考えます。


◆同値分割の割り付け

先ほども書きましたが、同値に分割した結果次のようになりました。

①:年齢が6歳未満
②:年齢が6歳以上18歳以下
③:年齢が18歳超

偽は①と③の2つあります。これを先ほどのデシジョンテーブルに割り付けます。

年齢:T,T,T,
埼玉:T,T,F,T,F
学生:T,F,T,T,F

これが本文の説明になります。ただし、私がテストケースを書く場合、もうひとつケースを追加してこうすると思います。

年齢:T,T,T,
埼玉:T,T,F,T,T,F
学生:T,F,T,T,T,F

すべて偽になるケースに6歳未満を入れて確認済みとするのには抵抗があります。見解の相違と言えるでしょう。

(7/24 追記)
最後の列にある全てが偽のケース

年齢:③
埼玉:F
学生:F

この組合せはいりません。全てがFのケースは意味を持たないため、優先度を考えるならば、落としてもよいケースになります。

あきやまさんからご指摘がありました。ありがとうございます。
(追記終わり)

これで説明は以上です。久しぶりに長いエントリを書いてしまいました。なおこの説明で分からない場合は、コメントに質問してください。私で答えられない場合は、テストマスター達に教えを請いますので。

最新の画像もっと見る

5 コメント

コメント日が  古い順  |   新しい順
Unknown (chung-zee)
2005-07-27 17:00:48
デシジョンテーブル,懐かしいです。でも,最近は知らない人が多くて困ります。なにかいい教育方法は無いものでしょうか?
Unknown (chung-zee)
2005-07-27 18:31:20
↑は抽象的ですね。

たとえば,プリミティブの場合とオブジェクトの場合でも同値分割のパターンが違います。

また,プリミティブでもbooleanとintでは違うし,オブジェクトでもEntity系とContainer系では違いますよね。

この辺を説明しなければ新人も納得してくれないと思うのですが,どのように解決しておられますか?
Unknown (ものもの)
2005-07-28 01:02:55
コメントありがとうございます。



ご質問の件、私の理解が至らないために誤読しているのかもしれませんが、デシジョンテーブルというよりも、同値分割についてのご質問ではないでしょうか?



同値分割の質問と仮定しますと、

どの工程のテストで同値分割を使用するかによって、回答が異なります。



私の経験で恐縮ですが、単体テストレベルですと、変数の型を意識する場合もあります。

結合テストレベルですと、変数の型を意識しないことの方が多いような気がします。まぁ、この辺は結合のレベルによっても異なります。



ここまで書いてみて、ご質問の意図と離れているような気がしてきました。申し訳ありません。



Unknown (chung-zee)
2005-07-28 10:42:15
UTでdoubleやStringをどのように同値分割してますか?
Unknown (ものもの)
2005-07-29 01:01:23
> UTでdoubleやStringをどのように同値分割してますか?



普通にやっていますが....