テストの種類・状態遷移での準正常系テスト

2020年9月23日テスト品質

状態遷移の制御をするコードでの準正常系と異常系

組み込み系ソフトの設計では状態遷移を使った設計もよく見かけます。状態遷移で設計されたソフトに対する準正常系テストとは、状態遷移表の中でエラー状態にある箇所エラー状態に遷移する箇所の動作を確認するテストです。そして異常系テストとは状態遷移表で定義されていない状態が起きた時の動作を確認するテストです。もちろん、組織によって定義は様々ですが、グータラ親父はこのように定義していました。

状態遷移の設計は状態遷移図状態戦遷移表で表されますが、ここでは以下のような状態遷移図での例で考えてみましょう。

待機状態と処理中状態の2つの正常な状態とエラー状態の1つの異常な状態があって、イベント-A とイベント-B で2つの正常な状態が切り替わります。処理中上状態にはタイムアウト機能が実装されていて、一定時間を超えると待機状態に戻ります。待機状態でイベント-Cが起きるとエラー状態となり、イベント-Dで待機状態に復帰します。

状態遷移のテスト設計は状態遷移表を作って考える

このような状態遷移図で設計された状態遷移をテストする時に、どのテストが準正常系でどれが異常系になるのかを整理してみましょう。 状態遷移図は正常な状態遷移を設計する時に考えを纏めるには良いのですが、状態遷移設計の網羅性は判り難いという欠点があります。 テストの整理では、設計の網羅性を元に考える必要もあるので状態遷移図の状態ではすこし考え難いです。 そこで、状態遷移設計のレビューでも良く使う、状態遷移の網羅性が見やすい状態遷移表に書き直して考えてみましょう。

上の状態遷移図を状態遷移表に書き直すと、下の表のようになります。縦方向に3つの状態、横方向に5つのイベントを並べて、各々のセルにはイベント発生時の処理と次に遷移する状態が書いてあります。 状態遷移図では記述が省略されていた「その状態では明確に定義されていなかったイベントに対する状態遷移」も書き足してあります。(例えば、待機状態でイベント-B が起きても、何も処理をしないで待機状態を維持する 等です) そして、タイムアウトは処理中の状態に飛び込んだ時にのみタイムアウト機能を起動するので、待機状態やエラー状態ではタイムアウトイベントが起きる事は無いのでそのセルは未定義としてあります。

状態遷移表のセルに書き込みがあるのが正常系と準正常系

このように、状態遷移表にすると全ての状態に対する全てのイベントの組み合わせが明示されるので、状態遷移が網羅され、レビューやテスト設計がやり易くなります。この状態遷移表で、正常系の状態遷移は待機状態と処理中状態を行き来する青色のセルです。そして、設計の段階で検討されたエラー発生時の処理はオレンジ色の処理なのでここが準正常系の状態遷移です。 そして、異常系の状態遷移は、本来起きるはずの無い状態を示す黄色の処理になります。

状態遷移表の空白箇所が異常系

ですので、青色セルの動作を確認するのが正常系テスト、オレンジ色セルの動作を確認するのが準正常系テスト、黄色セルの動作を確認するのが異常系テストになります。

この黄色のセルは、タイマーを起動しない待機状態やエラー状態でタイムアウトが起きる場合なので、装置が正常に動作している限りは起きないはずです。しかし、例えば外来ノイズなどでメモリ上のイベントを記録している変数の値が書き換わってしまって、イベント-D がタイムアウトイベントに書き換わってしまう、というような異常が起きると、この黄色せるの状態が起きてしまいます。 そのような状態でもソフトがハングせずに動作する事を確認するのが、異常系テストです。

(次の記事)テストの種類・ハードウエア制御での準正常系テスト に続く
(前の記事)テストの種類・通信プロトコル処理での準正常系テスト に戻る
 テストの記事の先頭 に戻る