2011年6月9日木曜日

同値分割と境界値分析

今日はソフトウェアテストの手法についての基本的な手法についてのまとめ。

次の問題を考える。日本人はその年齢に応じて0-14歳が年少、15-64が生産年齢、65歳-150歳(本当は年齢に上限はないのだが、人間が生きられる年齢の上限として150を設定した)を老年と分けることができる。ある画面で年齢を(正しいフォーマットの整数だけ入力可能な)テキストボックスに入力してOKボタンを押したときに、その区分を表示させるようなプログラムを作成する。このとき、同値分割と境界値分割の考え方を用いて、テストケースを作成せよ。

同値分割という言葉を説明する。同値分割は、値をグループに分けてその中から代表値を選んでテストを行う手法のことである。ありとあらゆるケースを想定してテストすることは不可能(無限にある整数の値を入力することなどできるわけがない)なので、代表値を選ぶのである。

例題のように、処理が年齢に応じて変化する場合、1つ1つの年齢に対しテストを行うのでは面倒である。そこで、年少の代表として7、生産年齢の代表として40、老年の代表として75というように値を取り出してテストを行う。

マイナスの年齢や151歳以上の年齢は処理の対象にならない異常な値である。このような値の範囲は「無効同値クラス」と呼ばれている。一方、0-14、15-64、65-150の範囲の値は「有効同値クラス」という。正常値だけでなく、異常値も代表を出して(-5、160など)エラーが正しく処理されているかテストを行う必要がある。

境界値分析というのは、バグの起きやすい箇所である端の値をテストする手法である。プログラマがイコールを付け忘れるというバグを取り出すことができる。上記の例では、同値分割されたクラスの端の値である-1、0、14、15、64、65、150、151をテストすることになる。もちろん前提として、1歳刻みであるから、今挙げた値が境界値になるということを付け加えておく。単位によって確認するべき境界値が変化するということに注意しなければならない。例えば「普通、デジタル温度計は何度刻みか?」と質問された場合、1度、あるいは0.1度という、人によって異なる答えが返ってくるであろう。これをソフトウェアのテストで考えると、25度と24度か25度と24.9度のどちらで境界値を確認するかというような違いが出てくる。テストの際には仕様の確認や思い込みの排除が重要である。

下の図に書かれている数値は、例に用いた年齢による区分ごとの処理でテストすべき値である。

境界値分析は一つの数直線上の値(変数)をテストする手法であるが、複数の変数が関連している場合は、ドメイン分析と呼ばれる手法でテストを行う。ドメイン分析は境界値分析の多次元版である。例えば、同時にa,b,cという1つ境界値を持つ変数に対してドメイン分析手法に基づくテストを行う場合、以下のテーブル(Binderのドメイン分析テストマトリックス)に従って1から6のテストを行う方法がある。

onは無効同値クラスに接した有効同値クラスの値で、offは有効同値クラスに接した無効同値クラスの値、inはonではない(境界値でなく、バグは出ないだろう箇所と考えられる)有効同値クラスの値である。表には無いが、端の値でない無効同値クラスの値はoutと呼ばれる。

テストマトリックスの例
変数タイプ123456
aon
off
in
bon
off
in
con
off
in
結果

Binderの手法では、1つの変数だけをon、offと変化させて、残りをinとする。一度に1変数だけ変化させるのは、2変数を同時にon/offに設定すると、境界値で両方とも問題があるときに、どこに問題があるか分かりにくくなるためである。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計