はじめに
ソフトウェアテストのテクニックについて紹介する本連載ですが,今回もテストケースの作成に使えるテクニックを紹介します。限られた時間,予算の中でテストを行う際には,パターンを漏れなくダブりなく分析し,網羅性を確保しつつ効率よくテストケースを作成できるかがポイントになります。今回は,前回(第3回)のホワイトボックステストに続き,もう1つの代表的なテストケース作成技法「ブラックボックステスト」について紹介します。
ブラックボックステストとは?
ブラックボックステストとは,テスト対象の「仕様」に基づいたテストケースの作成技法です。
前回紹介した「ホワイトボックステスト」が,テスト対象の内部の「構造」,たとえばソースコードのロジックに着目してテストケースを作成するのに対し,ブラックボックステストでは,テスト対象を「中の見えない箱(ブラックボックス)」としてとらえてテストケースを作成します。具体的には,テスト対象に対してある入力を与えた場合にどのような出力が返ってくるか(または状態が変化するか)という点に着目してテストケースを作成します。このとき,テスト対象の中がどのように実装され,どのように処理が実行されているかは気にしません。
ブラックボックステストで最もよく使われる技法には「同値分割法」と「境界値分析」があり,一般的にこれら2つの技法は組み合わせて使われます。以降では,これらの技法を使って,具体的にテストケースをどのように作成するかを見ていきましょう。
同値分割法
同値分割法とは,仕様からデータを“意味のあるグループ”(同値クラス)に分類し,各グループから代表値を選ぶ技法です。この技法により,同じような意味を持つデータばかりに偏ったテストケースになることが避けられます。つまり,冗長なテストケースを省くことができ,効率よくテストが実施できるのです。また,意味のあるデータに関するテスト漏れを防ぐことも可能です。
例として,画面上から日付(年月日)を入力するシステムで,年月日のうちの「月」の値の入力について考えてみましょう。このシステムでは,入力値は整数で与えられるものとし,1から12までの場合は「有効」な値,0以下もしくは13以上の場合は「無効」な値としてチェックされるものとします。この場合,月の入力値は次の同値クラス(同じ出力結果が得られる入力値のグループ)に分類できます。
- 無効同値クラス1:0以下の整数(有効範囲より小さく無効)
- 有効同値クラス :1から12までの整数
- 無効同値クラス2:13以上の整数(有効範囲より大きく無効)
また,入力として整数以外が考えられる場合は,小数や文字列,記号などもそれぞれ同値クラスとします。
このように同値クラスに分割した後,各同値クラスからテストで使う値を選択します。このとき,適当な個数の値を闇雲に選んだのでは,同値分割した意味がありません。テストの入力値としては各同値クラスの中から(少なくとも)1個の代表値を選びます。代表値の選び方には明確なルールはありませんが,「この値でテストが通ればその同値クラスは全部OK」と言えるような値を選ぶべきで,それは同値クラスの範囲内でも端のほうにある値よりは,真ん中付近にある値を使うのが確実でしょう。たとえば,先ほどの例での有効同値クラスの代表としては,真ん中あたりの6や7を選ぶとよいでしょう。
このように,同値分割法を使うことで,ある同値クラスのみに偏ったテストばかりをしてしまうことを防ぐことができるとともに,少ないテストケースで対象範囲を網羅することができます。
境界値分析
境界値分析とは,同値クラスの間の境界の値(境界値)をテストデータとして選択する技法です。一般的に,先ほどの同値分割を行った後に使います。先ほどの「月」の値の入力の例を用いて説明しましょう。この例では,次の2ヵ所の境界値があります。
- (1) 無効同値クラス1と有効同値クラスの境界
- 無効同値クラス1における境界値 … 0
- 有効同値クラスにおける境界値 … 1
- (2) 無効同値クラス2と有効同値クラスの境界
- 無効同値クラス2における境界値 … 13
- 有効同値クラスにおける境界値 … 12
こうして,境界値分析を適用することで,「0, 1, 12, 13」の4つのテストデータが抽出されました。
なぜ境界上の値を選択するかというと,経験的に設計や製造(コーディング)では,境界付近で間違い(判断ミスや記載ミスなど)が生じる可能性が高いため,境界付近をテストすることで,その間違いに基づくバグ(欠陥)を発見しやすいからです。

