同値分割再考ーその1ー | 仙台ソフトウェアテスト勉強会のブログ

仙台ソフトウェアテスト勉強会のブログ

2012年から立ち上げた仙台ソフトウェアテスト勉強会のことなどを綴っていきます。

WACATEという勉強会に参加したのをきっかけに、同値分割を再考してみました。


【JSTQB F/Lの定義】
まずはJSTQBの定義を見てみます。

うーん。前半は分かるのですが、後半は分かりにくいですね。。。


4.3. 仕様ベース/ブラックボックスのテスト技法
4.3.1. 同値分割法
同値分割法は、ソフトウェアやシステムへの入力を同じ処理をするグループに分割し、グループ内の入力を同等に扱えるようにする技法である。
同値分割したグループ(あるいは、同値分割したクラス)は、有効データ、すなわち受け入れられるデータだけでなく、無効データ、すなわち拒否されるデータにもある。
同値分割したグループは、出力、内部変数、時間に依存する値(例えば、イベントの前と後)にも存在し、インターフェースパラメータにもある。(例えば、テスト済みの統合されたコンポーネント)テストでは、同値分割した全ての有効な領域、無効な領域をカバーするように設計する。
同値分割法は、あらゆるレベルのテストで適用できる。

(JSTQBシラバスより抜粋)



【同値分割の目的】
同値分割の目的としては"テストケースを少なくするため"ですね。
そして"入力を同じ処理をするグループに分割する"というのが同値分割です。
これを考えなければ、無限のケースを有限にできないです!
境界値を考えなければ、N個の要素で構成されていても、そのグループに対しては1つのテストケースでOKということ。だって、"入力に対して同じ処理をする"だもんね。
うん、シンプル!!


【同値分割がやっていること】
同値分割って結局何をやっているのでしょう??
自分は同値分割は基本的に"モデルを作成すること"だと思ってます。
仕様書から読み解いてグループ分けする=モデルの作成になります。
どのようにグループ分けするかは、テストの目的に依存します。
すなわちテストの目的によって、モデルは変わることになります。


【目的と同値分割モデルの例】

目的によってモデルが変わることを例を挙げながらみていこうと思います。
皆さんご存知のエクセルのフォントサイズについて考えてみます。


仙台ソフトウェアテスト勉強会のブログ



これ実は色々なテストが出来るんですよ。
それによって、同値分割の分け方が異なるのです。


パターン1:
目的:表示が見切れないか?
軸:表示文字列の幅
分割例:

1文字クラス[1,2,3,・・・]
2文字クラス[10,11,12, ・・・]
3文字クラス[1.5,2.5,・・・100,101,・・・]
4文字クラス[10.5,11.5,・・・]
5文字クラス[100.5,101.5,102.5,・・・]

※今回は小数点を一文字とみなして分割しています

で、やってみると・・・どーん。Σ(゚Д゚;)エーッ
表示している文字が見切れました(笑

仙台ソフトウェアテスト勉強会のブログ



不具合といえば不具合かもしれません。

いきなり皆さんが考える目的と違う目的を出してみました。
イメージ違ったのではないでしょうか?


パターン2:
目的:直接入力時の切り上げ、切り捨ては正しく動作するか?
軸:切り上げ、切り捨ての範囲
分割例:

切り上げクラス[10.225,10.226,・・・10.499]
そのままクラス[10.5]
切り捨てクラス[10.501,10.502,・・・10.774]

※今回は10.5を中心に書いてますが、この3つの同値クラスに分類されます


パターン3:
目的:設定したフォントサイズが反映されるか?
軸:入力タイプと小数
分割例:
直接入力小数点なしクラス[1,2,3・・・409]
直接入力小数点ありクラス[1.5,2.5,3.5・・・409.5]
ドロップダウンクラス [6,8,9・・・72]


演習をやるとパターン2とパターン3が一緒になって、上手く同値分割出来ないことが多いです。

パターン1は自分が行った演習では出たことがありません(ー ー;)

ということで、自分が考える同値分割のポイント一つ目です。


同値分割のポイント①『常にテストの目的と軸を意識する』


同値分割=あるテスト目的を果たすため、ある軸に従ってグループへ分割したもの。
なので、常に目的と軸を意識しないと、目的に合致しない分割をしてしまい、すぐにあちら側の世界に持っていかれてしまいます。

オーノー ヴァニラアイス!!( ̄口 ̄||)>!!!オーノー


同値分割再考-その2- へ続く