検索
連載

単体テストとは何か、なぜ必要なのか【後編】はじめての単体テスト(2/4 ページ)

前編では、単体テストと機能安全の関わり、単体テストの重要性と組み込み業界の現状、単体テストの自動化について解説しました。後編では、ソフトウェアの品質管理や単体テストの手法について解説します。

Share
Tweet
LINE
Hatena

5.2 ブラックボックステストとは

5.2.1 概要

 ブラックボックステストは、ソフトウェアの内部構造を参照せず、仕様書に基づきテストケースを設計するテスト手法です。

 「仕様書に基づきテストケースを設計する」という考え方はとてもシンプルで、機能仕様を関数仕様書に落とし込み、関数テスト設計書を作ってテストを行うことが望ましく、そうすることで効果的なブラックボックステストを行うことができます。

 ブラックボックステストでは、仕様上定義された入力値を入れ、関数を実行した結果(出力値)が期待通りであるか、つまり、仕様通りであるかを確認するのですが、関数の入出力だけをテストすればよいかというと、そうではありません。以下に、ブラックボックステストで使われるテスト技法のなかでも、代表的なものをいくつかピックアップしてご紹介します。

5.2.2 同値分割手法

 同値分割は、予想される出力結果をグループ分けし、そのグループ内の代表値を入力して正しい出力結果になるかを確認するテスト手法です。ソフトウェアが正常に動作する値を有効同値クラス、エラーになる値を無効同値クラスとして分類し、その中で代表値を決めてテスト条件を決定していきます。

 代表値のテスト結果が、そのままクラス内の全ての値に反映されるという考え方がベースとなっており、全数試験よりも少ないテストケースで広い対象範囲を網羅することができ、効率的なテスト手法であるといえます。以下に、そのテスト手法例を挙げます。

 例えば、年齢入力に関する機能を実装する際、仕様で0歳〜100歳までを入力可能と定義している場合は、下記のように同値クラスの分割を行い、その中から任意の代表値を選んでテストケースを作成します。

  • 同値クラスの分割
    • 有効同値クラス:0歳〜100歳
    • 無効同値クラス:-1歳以下、101歳以上
  • 代表値の選択とテストケース作成
    • テスト1:テストデータ=50(有効同値クラス)
    • テスト2:テストデータ=-10(無効同値クラス)
    • テスト3:テストデータ=-110(無効同値クラス)

 代表値を増やすことは問題ありませんが、テスト項目を増やせば増やすほど全数試験に近づいてしまい、意味の無いテストデータが増えてしまいます。そのため、その機能の特性に合わせて有効なテスト設計を行うことが重要となります。

5.2.3 境界値分析手法

 境界値分析は、同値分割で作成した同値クラスの境界に当たる数値を入力し、正しい出力結果になるかを確認するテスト手法です。有効同値クラスの最大値と最小値が境界値となり、境界値と、境界値の1つ下の値、境界値の1つ上の値でテストを行います。

 境界値については、ソースコードの中でソフトウェア開発者が仕様書の内容を誤解していたり、コーディングを誤っていたりと、不具合が発生しやすい箇所であるため、境界値分析は不具合の発見に効果的なテストであるといえます。

 ここで、5.2.2で使用した年齢入力に関する機能を実装する例を考えてみましょう。境界値分析では、以下の値をテストデータとしたテストケースを作成します。

  • 境界値:0、100
  • 境界値±1:-1、1、99、101

 これに加えて、同値分割で選んだ代表値のテストも行うことで、より堅牢なテストを行うことができます。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る