ソフトウェアテスト基本テクニック

第4回 ブラックボックステスト

この記事を読むのに必要な時間:およそ 2 分

先ほどの例で,月の値の内部的なチェックロジックが,本来は

リスト1

if ((month >= 1) && (month <= 12)) {
   ………(有効と判断)
}

となるべきところを,

リスト2

if ((month > 1) && (month < 12)) {
   ………(有効と判断)

という条件文に間違えてしまった場合,入力値1と12は無効と判断されてしまいます。

このようにソースコード上の不等号の記述ミスや,設計書での「以上」⁠以下」⁠未満」などの記述ミスや解釈ミスなどが原因となって,境界付近にバグが発生するのです。

同値分割法と境界値分析の組み合わせ

境界値は同値クラス同士の境界部分に存在しますが,必ずどちらかの同値クラスの中に含まれます。先ほどの例では,有効同値クラスから選んだ値は,同値クラスの代表値と2つの境界値をあわせて3つになりました。

確実にテストをしたい場合や高い品質が要求される場合は,これらすべてを使うべきですが,テストの工数や期間の都合でテストケースをさらに減らさなければならない場合もあります。そのとき,⁠境界値を使ったテストがOKなら代表値を使ったテストもOKとみなせる」のであれば,代表値を使ったテストを省略しても構わないでしょう。少ないテストケースでバグを多く見つけるのがよいテストですから,その意味でも境界値のほうが優先度が高くなります。

ホワイトボックステストとブラックボックステストの組み合わせ

境界値分析の例で取り上げた不等号の記述ミスは,前回紹介したホワイトボックステストでは見つけることができません。なぜなら,ホワイトボックステストはソースコードのパスを追っていくので,不等号として「>」が正しいのか「≧」が正しいのかはソースコードからは判断できないからです。強いて言えば,ソースコードレビューで設計書とソースコードの対応関係を正確に見ていけば,見つけられないことはありませんが,細かい部分は見落とすこともあるでしょう。したがって,このようなバグの検出にはブラックボックステストが最適と言えます。

そもそもテストは,仕様に対して合っているか,間違っているかを確認する作業で,それができるのはブラックボックステストになります。したがって,確実かつ効率的にテストを実施するには,次のような手順で実施することをお勧めします。

(1) まず,ブラックボックステストの技法を使って「仕様」に基づいたテストケースを作成して,テストを実行する

(2) その後で「構造」に対してどれだけ網羅(実行)されているか,すなわちカバレッジを測ってみる

(3) 実行していない部分があれば,ホワイトボックステストの技法を使ってその部分に対するテストケースを作成して,テストを実行する

こうすることで,最適なテストケースを使って効率よくテストを実行できるでしょう。

図3  ブラックボックステストとホワイトボックステストの組み合わせ

図3 ブラックボックステストとホワイトボックステストの組み合わせ

まとめ

前回(第3回)のホワイトボックステストに続き,テスト対象の「仕様」に基づいたテストケースの作成技法「ブラックボックステスト」について紹介しました。今回紹介したテストケース作成技法を用いることで,より少ないテストケースで必要な網羅性をカバーできる効率的なテストが可能となります。実際の開発では,入力値が複数ある場合など,もっと複雑なケースも出てくると思いますが,今回紹介した技法が基本となりますので,まずは基本をしっかりとおさえておきましょう。

著者プロフィール

田代裕和(たしろ ひろかず)

2007年,株式会社NTTデータ入社。技術開発本部に所属。テストプロセスも含め,社内全般の開発プロセス(開発標準)の整備・策定を行っている。国内プロジェクトだけでなく,国際的プロジェクトへの普及展開も図る。


町田欣史(まちだ よしのぶ)

1999年,株式会社NTTデータに入社。社内の情報共有システムの開発に4年間携わった後,テストプロセス改善の研究,社内サポートを担当。現在は,プログラムの品質向上に向けた研究および社内サービス運用を行っている。JSTQB技術委員,日本品質管理学会正会員。

著書