同値分割ってテスト技法の最初に出てくるのに、
奥深いとか言われて、よくわからん( ;∀;)
同値分割の章で出てくる演習は出来るのに、いざ使ってみるとか、他の技法でも出てくると聞いて
ふぁっ?!( ゚Д゚)
となっています。
知っているし、シンプルなはずなのに実際は使いこなせていない。
この悩みにTwitterで色々教えていただいています。
全体のTogetterはこちら
このブログでは、Togetterからさらに自分で理解しまとめてみよう。というエントリです。
JSTQBによる定義
「仕様に基づき、コンポーネントやシステムの振る舞いが同じとみなせる入力ドメインや出力ドメインの部分」・・・ソフトウェアテスト標準用語集(日本語版) Version 2.2.J02 より
— 鈴木三紀夫 (@mkoszk) 2014, 4月 29
機能テストに対する同値分割の方法
@____rina____ 話をまとめます。
1. 同値分割する時にはテスト対象(どの処理のテストをしようとしているか)を認識する
2. テスト対象が認識出来たらテスト対象を「(入力)→【処理】→(出力)」のモデルに当てはめる
3. 入力が多数存在した場合はクラス分けする
です。
— akiyama924 (@akiyama924) 2014, 4月 29
@____rina____ 大切なことを書きもらしたので追加します。
4. 同値分割で分割した同値クラスは重なりを持ってはならない。
例えば身長の例なら「120㎝以上」と「125㎝以上」という同値クラスがあったら、120㎝から125cmが重なっているので同値分割したと言えません。
— akiyama924 (@akiyama924) 2014, 4月 29
注意点
@____rina____ 今書いたものは、機能のテストに対する同値分割なので、例えば性能などの品質特性では使えません。
また、同値分割でテストしても機能バグが全て見つかるわけでもありません。
— akiyama924 (@akiyama924) 2014, 4月 29
機能テストの同値分割はこの1~4の手順に考えると基本的にOK☆
余談
@akiyama924 また、機能バグが全て見つからないとありますが、どの程度なら見つかるよ。というものはありますか?
機能バグが全てみつかるようなものは存在しないのでは?と思ったことと、
もし程度というものがあるのであれば知りたいです。
— リナ? (@____rina____) 2014, 4月 29
@____rina____ 実際、100㎝、140㎝、105cm、95㎝、、、、というデータを流した時に140cm以降のデータに対しては全て合格と標示するバグなんてありそうです。
だから、同値分割で発見できるバグは「そのテスト観点に対する処理が存在しない」ことくらいです。
— akiyama924 (@akiyama924) 2014, 4月 29
こんな感じ
1回目 100cm 不合格
2回目 140cm 合格
3回目 105cm 合格?!
4回目 95cm 合格?!
同値分割では テスト観点に対する処理が存在するかどうか しか確認できない。
他のテストはどうするの?
@____rina____ そんなことはありません。性能のテストでも同値分割を使えます。性能に影響を与える要因を同値分割するのでしょうね。
— akiyama924 (@akiyama924) 2014, 4月 29
機能テスト以外も 同値分割はできる。
性能テストでは、性能に影響する要因を同値分割する
性能・・・たとえば
・レスポンスタイム*1
・ユーザアクセス数*2
追記
間違えていましたので取り消ししています。
分かりやすい例を追記したいです。。。
という要因に対して同値分割を考えたらよさそう?
マイヤーズの同値分割
居駒さんが要約したマイヤーズの同値分割5つの指針
1.値の範囲の場合は、1つの有効同値クラスと2つの無効同値クラス
2.値の数の場合も、1つの有効同値クラスと2つの無効同値クラス
3.値の集合の場合は、要素数の有効同値クラスと1つの無効同値クラス
(続く
— 鈴木三紀夫 (@mkoszk) 2014, 4月 29
@____rina____ 1.「項目数は1から999まで」と決められている場合、1つの同値クラス「1<=項目数<=999」と2つの無効同値クラス「項目数<1」と「項目数>999」を選ぶ。
— 鈴木三紀夫 (@mkoszk) 2014, 5月 3
リナ作イメージ図
@____rina____
2.「1人から6人の所有者をリストできる」は、1つの有効同値クラス「1人、2人、3人、4人、5人、6人」と2つの無効同値クラス「所有者がいない」と「6人より多い所有者がいる」を選ぶ。
— 鈴木三紀夫 (@mkoszk) 2014, 5月 3
@____rina____ 3.選択形式の場合ともいう。たとえば、「車の型は、バス・トラック・タクシー・乗用車・オートバイがある」は、1つの有効同値クラス「バス」と1つの無効同値クラス「トレーラー」を選ぶ。
— 鈴木三紀夫 (@mkoszk) 2014, 5月 3
続き)
4.「~ねばならない」というのは、有効同値クラスと無効同値クラス一つずつ
5.「プログラムで同一には扱われないだろう」と思う場合は同値クラスを適時分割
— 鈴木三紀夫 (@mkoszk) 2014, 4月 29
④ 「本日中でなければならない」とかだと
有効同値:本日
無効同値:明日
っていうことになるのかな・・・
⑤ 。。。本文を理解しているつもりだけど、例が思いついていない。。
其の二に続きます(;_;)/~~~
*1: @____rina____ レスポンスタイム??
レスポンスタイムを変える要因を考えることが大切です。性能では、一般に、CPU、メモリ、disk、ネットワークなどの環境に結果が左右されますので、環境をうまく同値分割するとよいですね。
データによって変わる場合はデータの同値分割も。
*2: @____rina____ 同時利用者数や単位時間当たりのトランザクション数、データサイズのような、性能に正比例の影響を与えることが分かっている要因は、同値分割するのではなくシステムがハングアップするまで負荷を徐々に高めながらレスポンスタイムなどの結果値を測定してグラフ化しよう。