要件や仕様通りにソフトウエアが動作するかを確認するブラックボックス・テストでは,境界値テストのための手法である同値分割や境界値分析のノウハウが必要になります。

 続いて,ブラックボックスのテスト設計技法として境界値テストについて説明します。境界値テストは同値クラスに対して境界値分析を行った結果をテスト・ケースとするテスト設計技法です。「ソフトウェアテストの基本を学ぼう」で紹介した例で簡単におさらいしてみましょう。例示したコードをメソッド仕様として記述すると下記のようになります。

◆メソッド仕様1
引数1:テストの点数,型:整数
戻り値:なし
仕様:
 テストの点数の結果を評価し,下記の評価コメントを出力する
  0点~79点は「努力が必要です」
  80~99点は「もうちょっとです」
  100点は「満点です」

 境界値分析を行ったこの場合のテスト・ケースは以下のようになると説明しました*1

A:-1,0,79,(80)
B:(79),80,99,(100)
C:100,101

 このテスト・ケースを図にすると図1のようなイメージになります。

図1●メソッド仕様1の境界値分析結果
図1●メソッド仕様1の境界値分析結果

 基本的な考え方としては,同値クラスの両方の境目になる値(ONポイント)と,その一つ外になる値(OFFポイント)を選択します。したがって,通常は一つの同値クラスに対して四つの値をテスト・ケースとして使うことになります。

 ただ,図1の「同値クラスC」のように,同値クラスになる値が一つだけの場合は三つの値になります。ただし,カッコで記述したように複数の同値クラスで重複する値が出てきますので,例えば,同値クラスが三つだとテスト・ケースの数は「3(同値クラス数)×4(境界値として取り上げる値の数)=12」というようにはならず,テスト・ケースの数は重複した値の分を減らしたものとなります。

 では,以下のようなメソッド仕様が与えられた場合,どのような境界値テストを考えればよいのでしょうか?

◆メソッド仕様2
引数1:購入金額,型:整数
引数2:購入者年齢,型:整数
戻り値:判定結果
仕様:
 ・家電購入時のボーナス一括払いの可否を判定する
 ・下記条件を満たした場合ローンOK(true)を返す
   購入金額が1万円以上100万円以下
   年齢が20歳以上65歳以下

 最初のテストの点数評価の例では,メソッド仕様に対して,引数が一つの場合で説明しましたが,今回は境界値分析の対象になる引数が二つあります。

 この例を図に表現すると図2のようになります。

図2●メソッド仕様2の境界値分析結果
図2●メソッド仕様2の境界値分析結果

 同値クラスの中の境界は4点になりますので,各境界のONポイントとOFFポイントをテスト・ケースとすれば良いわけです。したがって,テスト・ケースは以下のように12個となります。

年齢 購入価格 結果
------------------------------
20歳 1万円 契約可能
20歳 100万円 契約可能
65歳 1万円 契約可能
65歳 100万円 契約可能
20歳 9千999円 契約不可
65歳 9千999円 契約不可
20歳 100万1円 契約不可
65歳 100万1円 契約不可
19歳 1万円 契約不可
19歳 100万円 契約不可
66歳 1万円 契約不可
66歳 100万円 契約不可

 では,もっと込み入った場合を想定して境界値を考えてみましょう。以下のようなメソッド仕様が与えられていたとします。

◆メソッド仕様3
引数1:商品群A(パソコン)購入額,型:整数
引数2:商品群B(プリンタ)購入額,型:整数
引数3:その他商品購入額,型:整数
戻り値:判定結果
仕様:
 ・量販店でのポイントカードへのボーナス・ポイント付与(ポイントを3倍にして付与)を判定する
 ・購入金額が10万円以上で,かつ商品群A(パソコン)と商品群B(プリンタ)の両方を3万円以上購入していると,ポイント付与OK(true)を返す

 この場合は,引数になる値が二つあるうえに,戻り値にも境界値分析が必要になってきます。このように,入力値と出力結果に相関関係がある複数のパラメータの境界値を決定する設計技法を,ドメイン・テストとも呼びます。このケースでのテスト・ケースを考える際は,まず最初に上記仕様を計算式にして整理します。この例で考えてみると,以下のように三つの式を導き出せます。

  • 商品群A(パソコン)>= 30,000
  • 商品群B(プリンタ)>= 30,000
  • 購入金額(商品群A+商品群B+その他商品)>= 100,000

 これらの式に対して,境界値を見つけていきます。商品群AとBは3万円,購入金額は10万円が境界値になります。テスト・ケースは各計算式にて,確認対象のパラメータに対して不等式の場合はonポイントとoffポイントの二つ,等式の場合はonポイントと両脇のoffポイントの三つ,確認対象ではないパラメータは有効になる値を任意に選択します。つまり,テスト・ケースは下記のように6個を実施すれば良いこととなります。

商品群A 商品群B その他 合計 結果
------------------------------------------
60,000 30,000 10,000 100,000 OK
60,001 29,999 10,000 100,000 NG
30,000 60,000 10,000 100,000 OK
29,999 60,001 10,000 100,000 NG
45,000 45,000 10,000 100,000 OK
45,000 45,000 9,999 99,999 NG

 簡単なメソッド仕様から,ブラックボックスの代表的なテスト設計技法である境界値テストまで,いろいろなバリエーションを紹介しました。今回の例はメソッドに対するテストですが,このような境界値テストの考え方は,統合テストやシステム・テストのようにテスト対象が大きくなってきたとしても十分に通用します。

 境界値テストのための手法である同値分割や境界値分析は,一見単純ですが,ブラックボックス技法の基本になる技術ですのでしっかりと理解しておきましょう。

 Part4では,ブラックボックス・テストとホワイトボックス・テストを使って設計したテスト・ケースを,実際にテスト・ツールのJUnitを使って実行してみましょう。

■変更履歴
メソッド仕様1のテストケースの記述にミスがありました。お詫びして訂正します。本文は修正済みです。 [2008/06/09 14:45]