連載
» 2012年12月20日 10時00分 公開

状態遷移表による設計手法(6):状態遷移表を使用したテスト手法【前編】 (2/4)

[塚田 雄一 キャッツ,MONOist]

状態遷移表テスト手法のプロセスと範囲について

 ソフトウェアテストには、さまざまなものがあります。工程による分類として、「単体テスト」「総合テスト」「システムテスト」。品質の観点からの分類として、「機能テスト」「性能テスト」「負荷テスト」「障害テスト」「ユーザビリティテスト」「セキュリティテスト」。テスト実行方法の観点による分類として、「動的テスト」「静的テスト」「回帰テスト」。テスト技法の観点による分類として、「トップダウンテスト」「ボトムアップテスト」「ブラックボックステスト」「ホワイトボックステスト」など、多くのテスト手法が存在しています。

 今回は冒頭に紹介した通り、ホワイトボックステストとブラックボックステストを取り上げます。ここでは、前回までの内容で作成したキッチンタイマーの「設計モデル」を題材に、テスト項目の抽出とテストの実行までの流れを解説します。

「組込みソフトウェア向け開発プロセスガイド」ESPRより 図5 状態遷移表テスト手法のプロセスと範囲(出典:「組込みソフトウェア向け開発プロセスガイド」ESPR)

ホワイトボックステストとブラックボックステスト

 状態遷移表をベースにしたテスト手法の説明の前に、ホワイトボックステストとブラックボックステストについて解説します。

 まず、ホワイトボックステストですが、Wikipediaには「プログラムの構造に着目したソフトウェアテストで、着目する構造には、命令や分岐があり、着目した構造に対しどれだけの割合の部分を実行できたかを網羅率(カバレッジ)で表す」(Wikipediaより抜粋)と記されています。つまり、ホワイトボックステストは、モジュールの内部構造に着目したテストであり、「命令網羅」「分岐網羅」などが存在します。命令網羅は、モジュール内の命令を少なくとも一度は実行するようにテストデータを作成するテストです。一方の分岐網羅は、モジュール内の分岐部分において、“真”“偽”の両方を少なくとも一度は実行するようにテストデータを作成するテストです。

 次に、ブラックボックステストですが、Wikipediaによると「プログラムの入出力だけに注目し、仕様通りにプログラムが動作するか(もしくは、仕様通りに動作しないか)をテストする」(Wikipediaより抜粋)となっています。つまり、ブラックボックステストは、モジュールの“入力”“出力”に着目したテストであり、「同値分割」と「境界値分析」が存在します。同値分割は、仕様からデータを“意味のあるグループ(同値クラス)”に分類し、各グループから代表値を選んでテストします。一方の境界値分析は、同値クラスの間の境界値をテストデータとして選んでテストします。

ホワイトボックステストとブラックボックステスト 図6 ホワイトボックステストとブラックボックステスト

状態遷移表を使用したテスト手法

 それでは、状態遷移表を使用したテスト手法を見ていきましょう。

 状態遷移表を用いたテスト手法には、状態遷移表のマトリクスに着目した、ホワイトボックステスト(マトリクステスト)とブラックボックステストがあります。ホワイトボックステストは、アクションや分岐などに着目してテスト項目を作成します。また、ブラックボックステストは、仕様などに着目してテスト項目を作成します。

状態遷移表を使用したテスト手法 図7 状態遷移表テスト手法

ホワイトボックステスト(命令網羅、分岐網羅、条件網羅)

 ホワイトボックステストには、命令網羅(C0)カバレッジ分岐網羅(C1)カバレッジ条件網羅(C2)カバレッジが存在します。

 例えば、図8に示すプログラムの場合、引数「x」と「y」に対して、分岐命令“if((x > 0)&&(y > 0))”が存在していますが、ここで「x」については“0以上であるか”の判断を行い、「y」についても“0以上であるか”の判断を行っています。仮に0以上を「1」として値を入力すると、ケースは「x=1,y=1」、ケースは「x=0,y=1」、ケースは「x=1,y=0」、ケースは「x=0,y=0」の4通りが考えられます。

ホワイトボックステスト(命令網羅、分岐網羅、条件網羅) 図8 ホワイトボックステスト(命令網羅、分岐網羅、条件網羅)

 命令網羅(C0)カバレッジは、ソースコード内の全てのステートメント(命令文)を最低1回は実行する入力データパターンなので、( x = 1, y = 1 )でテストすれば命令を網羅したことになります。また、分岐網羅(C1)カバレッジは、ソースコード内の全てのブランチ(分岐)を最低1回は実行する入力データパターンなので、の他に、②③④のいずれかをテストすれば、if文の分岐を網羅したことになります。そして、条件網羅(C2)カバレッジは、ソースコード内の全てのコンディション(条件)の組み合わせを最低1回は実行する入力データパターンなので、①②③④の全てをテストすれば、if文の条件を網羅したことになります。

Copyright © ITmedia, Inc. All Rights Reserved.