連載
» 2013年01月31日 12時23分 UPDATE

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

状態遷移表による設計手法について解説。今回は「状態遷移表を使用したテスト手法」の【後編】として、パステストについて詳しく説明する。

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

はじめに

 組み込みソフトウェアが抱える一番の課題は「設計品質の向上」です。本連載の主役「状態遷移表」であれば、“イベント”と“状態”の全ての組み合わせを捉えることができるため、「モレ」「ヌケ」のない品質の良い設計が可能です――。ということで、これまで状態遷移表設計手法について詳しく解説してきましたが、本連載もいよいよ今回で最終回となります。

 「状態遷移表を使用したテスト手法【前編】」では、経済産業省の資料を基に、出荷後に不具合を起こした製品の割合が60%ほどあり、その中の約50%がソフトウェアの不具合が原因であることを紹介しました。また、同資料から、テストは他の開発工程よりも非常に多くの人件費工数を投入しており、“人海戦術”が主な施策になっていることが見てとれました。

 こうした現実を踏まえ、前回、テストの際に有効な“状態遷移表を使用したテスト手法”について解説しました。その中で、ソフトウェアテスト手法には「ブラックボックステスト」と「ホワイトボックステスト」が存在し、状態遷移表を作成することで、テスト項目の抽出が容易に行えることを説明しました。

 今回お届けする「状態遷移表を使用したテスト手法」の【後編】では、状態遷移表の遷移パスに着目してテスト項目を考える「状態遷移パスのテスト」を紹介します。

 なお、本連載では以下の6つのテーマを順番にお届けしてきました。

  1. (連載第1回):状態遷移表設計手法の概要
  2. (連載第2回):なぜ状態遷移表を使うと、品質の良い開発ができるのか
  3. (連載第3回):状態遷移表を使用した要求分析モデル
  4. (連載第4回):状態遷移表を使用した設計モデル(拡張階層化状態遷移表)
  5. (連載第5回):状態遷移表からの実装
  6. (連載第6回):状態遷移表を使用したテスト手法【前編】【後編】

状態遷移パスのテストとは

 まず、「状態遷移パス」を理解するために、簡単な状態遷移表から状態遷移パスの経路を抽出してみましょう。

 ここに「S1」「S2」「S3」という3つの状態と、「E1」「E2」という2つのイベントが存在する状態遷移表があります(図1)。「S1」状態で「E1」イベントが発生すると、「S2」状態へ遷移し、「S2」状態で「E1」イベントが発生すると、「S3」状態へ遷移します。「E2」イベントについても同様です。

状態遷移パスのテストとは 図1 状態遷移パスのテストとは

 これらの状態遷移パスの経路を考えると、下記の4通りが考えられます。

  1. 「S1」状態で「E1」イベント発生、「S2」状態で「E1」イベント発生
  2. 「S1」状態で「E1」イベント発生、「S2」状態で「E2」イベント発生
  3. 「S1」状態で「E2」イベント発生、「S2」状態で「E1」イベント発生
  4. 「S1」状態で「E2」イベント発生、「S2」状態で「E2」イベント発生

 図1の状態遷移表は遷移方向が一定であり、必ず「S3」状態で完了し、繰り返し処理も存在しない単純な経路となります。当然、状態遷移表が大きくなると、経路もより複雑になり、場合によっては、人的テストで全てを網羅できないほど経路が膨大な数になります。

テスト(検査)モデル

 今回、テスト(検査)を行うモデルですが、前回と同様、キッチンタイマーの設計モデルを使用します。なお、通常、状態遷移パスのテストは膨大な量になるため、ここでは遷移が行われない部分を共通化することでモデルを簡略化し、テストの効率化を図っています。

 「時間設定状態」における時間設定ボタンは、時間設定の更新処理を行うものであり、遷移が一切発生しません。そのため、今回は、時間設定ボタン処理のアクション分割部分については考えず、1つの処理として捉えることとします。また、「時間設定状態」において、スタートストップボタンが押された場合、設定値が0分0秒ならば、処理も遷移も存在しない(影響がない)ため、無視することとします。

 以上を踏まえ、テスト(検査)モデルを作成すると図2のようになります。

テスト(検査)モデル 図2 テスト(検査)モデル

各状態で確認する項目

 ここでは、どこから遷移してきても、各状態で必ず一意に決定される機能や変数など、“確認すべき項目”を定義します。例えば、「計測時間」「アラーム音出力」などの各状態で確認する項目のことです。

 図3の「時間設定状態」における確認項目ですが、「計測時間」は0時0分〜どのような時間であっても問題ないため、確認することは特にありません(強いて確認するとすれば、値がマイナス値でないことなどでしょうか)。一方「アラーム音」に関しては出力されていないことを定義します。次に「カウントダウン状態」における確認事項ですが、「計測時間」は必ず0分0秒以外であることを、「アラーム音」は出力されていないことを定義します。そして、「アラーム音出力状態」における確認事項ですが、「計測時間」は必ず0分0秒であることを、「アラーム音」は出力されていることを定義します。

各状態で確認する項目 図3 各状態で確認する項目

遷移網羅0スイッチカバレッジ

 「0スイッチカバレッジ」とは、1回のイベントで遷移する経路を全て網羅するカバレッジのことです。具体的には、システムの仕様書から状態とイベントを洗い出し、そのイベントの表す遷移を一通り網羅するカバレッジです。ここでは、カバレッジ基準と無効な遷移(=N/A)を併せて確認できます。

遷移網羅0スイッチカバレッジ 図4 遷移網羅0スイッチカバレッジ

遷移網羅0スイッチカバレッジの遷移例

 0スイッチカバレッジでは、1回で遷移するパターンを考えます。

 例えば、「時間設定状態」からは、の「時間設定ボタンイベント」が発生して、「時間設定状態」から遷移しないパターンと、の「スタートストップボタンイベント」が発生した際の「設定値が0分0秒の場合」と、の「スタートストップボタンイベント」が発生した際の「設定値が0分0秒以外(else)の場合」などのパターンがあります。つまり、の状態遷移表における全てのアクションについての遷移をテストします(図5)。なお、今回は、異常処理「不可(×)」についての遷移は考えないものとします。

遷移網羅0スイッチカバレッジの遷移例 図5 遷移網羅0スイッチカバレッジの遷移例

 このようにして、各状態からの遷移を抽出していくと、8種類のパターンが考えられます(図6)。

8種類のパターン 図6 8種類のパターン

0スイッチカバレッジを網羅するテストシナリオ

 ここで、0スイッチカバレッジを網羅するテストシナリオを考えてみたいと思います。

 まず、初期状態である「時間設定状態」では、のイベントとのイベント、のイベントが存在します。は、「時間設定状態」から遷移しないため、連続してテスト可能です。のどちらを先に処理すべきかについては、前項を参照すると分かりますが、は初期状態である「設定値が0分0秒の場合」の時に実行する処理であるため、のテストを最初に行い、次にのテストを行います。そして、最後にのテストを行い、「カウントダウン状態」へ遷移させます。

 次に、「カウントダウン状態」からのパターンを考えます。「カウントダウン状態」からは、まずの「カウントダウン状態」から遷移しないテストを行います。その後、のテストがありますが、のテストを行うと「時間設定状態」へ戻り、のテストを行うと、「アラーム音出力状態」へ遷移します。「アラーム音出力状態」からは、のテストを行います。

 上記のテストシナリオを考えると図7のようになります。ちなみに、の遷移の後は、「時間設定状態」へ戻るため、のテストを行うためには、のイベントを発行するなどして、「カウントダウン状態」へ戻る遷移が必要となります。

0スイッチカバレッジを網羅するテストシナリオ 図7 0スイッチカバレッジを網羅するテストシナリオ【※画像クリックで拡大】
       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.