きっかけ
えっと、来月の勉強会のネタについて@____rina____さんが悩んでるんだけど、みんな力を貸してあげて下さい。同値分割が深いって、どの辺について思ったんでしょうか。通常こう思うけど、実はこう深い、という構成でtweetしてもらえるとありたいで~す。特に@mkoszkさんとか。
2014-04-29 10:09:43例1:ジェットコースターの制限
@____rina____ なにがわからないかわからないので、簡単なところから説明しますね。「身長120cm以上の人がこのジェットコースターに乗れる」という仕様をテストする時にどうするかという話です。 子供100人集めてきてテストしても良いけど、そんなにはいらなそうですよね。
2014-04-29 11:54:05@____rina____ で、答えは出てると思うけど、身長が120cm未満の子供の中から1人、例えば身長100cmの子供、そして、120㎝以上の子供の中から1人、例えば身長140cmの子供の2人はテストしたいところです。
2014-04-29 11:57:51@____rina____ いま身長が120cm未満の子供の集まりと120㎝以上の子供の集まりの2つに分けてから代表者(身長100cmの子供と身長140cmの子供)を選んだのですが、この分ける作業のことを同値分割っていいます。そして分けた集まりのそれぞれを同値クラスっていいます。
2014-04-29 12:02:03@____rina____ 集まりだったら「同値クラス」じゃなくて「同値集合」じゃないかと思われるかもしれません。でも、「集合」は同じ要素を複数持たないらしいのです。今回は、145cmの人が複数いても良いので、「クラス」っていいます。
2014-04-29 12:04:44@____rina____ さてジェットコースターには心臓病の人は乗れません。つまり、どこかに心臓病かどうかの条件判定処理があり、もし、その条件判定処理のテストだったら「心臓病の子供」と「健康な子供」の2つの同値クラスとなり、それぞれのクラスから代表者を適当に選んでテストします。
2014-04-29 12:08:24@____rina____ このように、同値分割する時には (入力)→【処理】→(出力) というテスト対象の入力だけを見ていてはだめです。 挙げた例で言えば「身長判定処理」と「心臓病判定処理」では分割方法がことなるからです。
2014-04-29 12:11:19@____rina____ どんな処理が用意されているかすべて仕様書に書いてあったとしても「開発者が必要な処理を用意し忘れる」場合もあります。 だからテスターはどんな処理が必要かをゼロベースで挙げる必要があります(実際には仕様書をベースにしてみつけたものに加えることになりますが)
2014-04-29 12:15:07@____rina____ 話をまとめます。 1. 同値分割する時にはテスト対象(どの処理のテストをしようとしているか)を認識する 2. テスト対象が認識出来たらテスト対象を「(入力)→【処理】→(出力)」のモデルに当てはめる 3. 入力が多数存在した場合はクラス分けする です。
2014-04-29 12:20:59@____rina____ 今書いたものは、機能のテストに対する同値分割なので、例えば性能などの品質特性では使えません。 また、同値分割でテストしても機能バグが全て見つかるわけでもありません。
2014-04-29 12:23:21@akiyama924 ありがとうございます。私がイメージしていた考えとずれていなかったようですが、人に説明できるほどの理解はまだ出来ていないなぁと思いました。
2014-04-29 12:27:04@____rina____ 実際、100㎝、140㎝、105cm、95㎝、、、、というデータを流した時に140cm以降のデータに対しては全て合格と標示するバグなんてありそうです。 だから、同値分割で発見できるバグは「そのテスト観点に対する処理が存在しない」ことくらいです。
2014-04-29 12:27:09@____rina____ @akiyama924 秋山さんの説明に僕の説明を加えると、たぶん混乱すると思うので、秋山さんの説明を理解してから、ツイートしますね。
2014-04-29 12:51:25@akiyama924 ここで言っているバグとは「140cmで心臓病がある子どもも合格になってしまう」というバグであってますよね?(。。。理解力が悪くて申し訳ありません。。。)
2014-04-29 13:27:02@____rina____ いえ。ここで言いたかったのは、「判定結果の初期値が不合格で、合格の時だけ、判定結果を格納する変数に合格を代入する」処理になってると、一度合格が出ると以降のデータに対してすべて合格と言う結果が出るというバグを想定しました。
2014-04-29 13:44:41@akiyama924 なるほど。それでデータを流すと仰っていたのですね。理解しました。ありがとうございます。(読解力が弱くて申し訳ありません。。。)
2014-04-29 20:30:25@akiyama924 @mkoszk ありがとうございます。1つ1つを正しく理解せんと、全体的にわかった風にだけなってしまいそうです。 そして、ちょっと外出してしまいますので、また後でTweetします。すみません。。。
2014-04-29 13:28:38@____rina____ 大切なことを書きもらしたので追加します。 4. 同値分割で分割した同値クラスは重なりを持ってはならない。 例えば身長の例なら「120㎝以上」と「125㎝以上」という同値クラスがあったら、120㎝から125cmが重なっているので同値分割したと言えません。
2014-04-29 14:15:01@akiyama924 集合とクラスの違いがよく理解できなかったのですが、論点の理解がずれそうな気がするので、「同じグループに複数データがいてもOK=同値クラス」と理解しました。
2014-04-29 13:08:29QA EM/TL. テストする人。多分天然のアジャイルテスター。福岡に骨を埋めかけている。QA/Software Testing/Agile/Scrum/JSTQB/ASTER/JaSST