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

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

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

状態遷移表を使用したホワイトボックステスト

 それでは、状態遷移表を使用したホワイトボックステストについて説明します。ホワイトボックステストには、先ほど紹介した命令網羅、分岐網羅、条件網羅などのカバレッジテストがあります。その他に、テスト効率を向上させるための「MC/DCカバレッジ」なども存在しますが、本稿では割愛します。

 また、今回は連載第4回「状態遷移表を使用した設計モデル」で作成したキッチンタイマーの設計モデルを例に説明します。なお、ここでは状態遷移表と実装コードの関係を理解していることを前提に話を進めていきます。状態遷移表と動作する実装コードの関係については、連載第5回「状態遷移表からの実装」をご参照ください。

キチンタイマーの設計モデル 図9 キチンタイマーの設計モデル

正常系テストと異常系テスト

 状態遷移表を使用したテスト手法の説明に入る前に、正常系テスト異常系テストについて解説します。

 正常系テストケースは、通常想定できる状態でイベントが発生した場合の処理であり、基本的に状態遷移モデルに表現した内容は、正常系テストケースとなります。一方、異常系テストケースは、ハードウェアの故障や異常など、状態遷移表では満たせないテスト項目であり、通常想定できない状態でイベントが発生した場合などを示します(ただし、状態遷移表でエラー処理(異常系)イベントに対しての処理を設計している場合は除く)。

 また、状態遷移表設計手法の際に説明していますが、状態遷移表を使用して設計する場合は、イベント入力に対して、“無視(何もしない)”と“不可(あり得ない組み合わせ)”を意識して設計する旨を紹介しました。これらはテスト項目を検討する際に非常に有効であり、無視で表現されるテスト項目は正常系テストケースに含まれ、不可で表現されるテスト項目は異常系テストケースに含まれます。

 ちなみに、ここでの定義は、状態遷移表テスト手法で定義した正常系テストと異常系テストの定義であり、一般論ではないことをあらかじめご了承ください。

状態遷移表とテストケース 図10 状態遷移表とテストケース

状態遷移表を使用したホワイトボックステスト

 状態遷移表を使用したホワイトボックステストは、状態遷移表のアクションセルに着目してテストデータを作成します。図11の状態遷移表は、拡張階層化状態遷移表を使用して表現しているため、アクションセルには、条件分岐などが表現されています。従って、状態遷移表を参照すると、ソースコードからテスト項目を抽出する場合と比べて、命令網羅、条件網羅などのテストデータの作成が容易に行えます。

状態遷移表を使用したホワイトボックステスト 図11 状態遷移表を使用したホワイトボックステスト

状態遷移表を使用した命令網羅(C0)カバレッジ

 それでは、状態遷移表を使用した命令網羅(C0)カバレッジを考えてみましょう。状態遷移表で命令が存在しているのは、アクションセルに処理が記述されている部分です。また、この場合、“無視(/)”については含めません。

 従って、先ほどの状態遷移表でテストする内容は、図12の「設定」と「確認項目」で記されている8通りになります。例えば、のテストであれば、「時間設定」状態において、「0分0秒以外」の条件の際、「スタートストップボタン」を押下し、イベントを発生させます。そして、この場合、「カウントダウンが開始」され、「カウントダウン」状態へ遷移することを確認します。

状態遷移表を使用した命令網羅(C0)カバレッジ 図12 状態遷移表を使用した命令網羅(C0)カバレッジ

状態遷移表を使用した分岐網羅(C1)カバレッジ

 次は、状態遷移表を使用した分岐網羅(C1)カバレッジを考えてみましょう。C1カバレッジについては、“無視(/)”と“不可(×)”を含む全てのアクションセルをテストします。この場合、全てのアクションセルのテストを行うため、容易にテスト項目を抽出できます。また、この場合、“無視(/)”は正常系テストケースとなり、“不可(×)”は異常系テストケースとなります。

 図13に、C1カバレッジのテスト項目を記しますが、のみ異常系テストケースで、その他は全て正常系テストケースとなります。例えば、のテストであれば、「時間設定」状態において、「カウントダウン終了」イベントを発生した場合のテストですが、このようなケースは存在せず、「イベントが発生することはないこと」を確認します。

状態遷移表を使用した分岐網羅(C1)カバレッジ 図13 状態遷移表を使用した分岐網羅(C1)カバレッジ

ソースコードからテスト項目抽出した場合と比較

 以下に、先ほどの状態遷移表から実装したソースコードを記します(図14)。ここでは、このソースコードからテスト項目を抽出した場合を考えてみましょう。

ソースコード 図14 ソースコード

 ソースコードを眺めてみて、条件が成立した場合と成立しない場合の分かりやすさはどうでしょうか。先ほど紹介した状態遷移表の方が、条件が成立した場合、成立しない場合などの処理が一目瞭然で分かりやすいと思います。つまり、状態遷移表は、テスト項目を抽出する際にも優位性があります。

※注:図14に示すソースコードはC言語をベースとしていますが、イベント解析、処理、状態遷移などに関しては、状態遷移表と同様に日本語で表現しています。


ブラックボックステスト(同値分割法、境界値分析)

 次は、ブラックボックステストの説明です。ブラックボックステストには、同値分割法、境界値分析があります。

 同値分割法とは、仕様からデータを“意味のあるグループ”(同値クラス)に分類し、各グループから代表値を選んでテストします。例えば、日付の“月”の場合、1〜12の値が有効で、その他の値は無効となるため、有効/無効を同値クラスとした場合、有効同値クラスは、1〜12のいずれかを代表値として、無効同値クラスは、0以下の値、または13以上の値であるいずれかを代表値としてテストします。

 境界値分析とは、同値クラスの間の境界値をテストデータとして選んでテストします。従って、同値の下方の境界値である0と1、上方の境界値である12と13の4つの値をテストします。

同値分割法と境界値分析 図15 同値分割法と境界値分析

状態遷移表を使用したブラックボックステスト

 状態遷移表を使用したブラックボックステストは、状態遷移表のアクションセルには着目せずに、仕様書を参照し、イベント部分に着目して、テストデータを作成します。状態遷移表は、イベント部分が左側に整理されているため、状態遷移表に関係する入力イベントを容易に把握できます。また、各イベントは基本的に同値と考えることができるため、容易にテストデータを作成することが可能です。

状態遷移表を使用したブラックボックステスト 図16 ブラックボックステスト

Copyright © ITmedia, Inc. All Rights Reserved.