テストの種類・ハードウエア制御での準正常系テスト

2020年9月23日テスト品質

ハードウエアを制御するコードでの準正常系と異常系

組み込み系ソフトではハードウエアを制御する機能が必須です、デバイスドライバーと呼ばれるモジュールがこの機能を提供する場合が多いです。ハードウエア制御の機能に対する準正常系テストとは、ハードウエアが返してくるエラーコードに対応する動作を確認するテストです。そして、異常系テストとはハードウエアのエラーコードに定義の無いエラーが起きた時の動作を確認するテストです。

ハードウエアを制御する機能では、そのハードウエアが何等かのエラー応答を返してくる場合も想定して、ソフトにエラー処理が組み込まれています。例えばハードディスクドライブ(HDD)を読み出す処理を例にしてみましょう。

 Read-hdd (status, data ) というコマンドを呼び出すと、ハードディスクドライブから読みだされた内容が data 領域に格納されて、読み出しのコマンドが成功したか失敗したかの状態が status に記録されると想定します。この Read-hdd (status, data ) を使ったデータ読み出し処理の流れを、C言語ライクな疑似コードで簡単に書くとこんな感じになります。

① Read-hdd ( status, data )    /* ハードディスクドライブに読み出しを要求する */

② if (status == SUCCESS) then  { data 処理 }  /* 読み出し成功ならデータを処理する */

③                  elseif ( ststus == ERROR-1) then { ERROR-1 処理 }  /* ERROR-1の対応 */

④                  elseif ( ststus == ERROE-2) then { ERROR-2処理 }  /* ERROR-2の対応 */

⑤                  elseif ( ststus == ERROE-3) then { ERROR-3 処理 }  /* ERROR-3の対応 */

⑤                  else { 未定義エラー処理 } /* 定義されていないエラーに対する対応 */

エラーが起きていない時の処理は正常系

この疑似コードで、①と②がハードディスクドライブから正常にデータが読み出せた時の処理なので正常系コードです。

定義されたエラーコードに対応するのは準正常系

③、④、⑤は、ハードディスクドライブで予め定義されているエラーが起きた時の処理ですので準正常系コードです。例えばハードディスクドライブの電源が入っていないとか、読みだしたデータが壊れていたとか、タイムアウトが起きたとか、色々なエラーが起こり得ます。それらのエラーのうちのどれが起きたのかを事を示すエラーコードの値が status に設定されるので、その status の値に対応したエラー処理を行います。 なお多くの場合は、定義されているエラーが3種類という事はなく十種類以上になるので、この準正常系コードは正常系コードや異常系コードよりもコードの量が多くなります。

定義されていないエラーコードが返された時の処理が異常系

そしては、定義されたエラーコード以外の変な値が status に記録されていたという異常な状態が起きた時の処理なので、異常系コードです。ハードディスクドライブを構成するハードウエア回路が正常に動作していれば、status には定義されたエラーコード以外が設定される事は在りません。しかし、ハードウエア回路がノイズで誤動作した結果 status に定義された値が崩れる事も絶対無いとは言えません。また Read-hdd ( status, data )  というコマンド自身も何等かのソフトウエアとして作られているので、そこにバグがあって定義されていない値を status に設定してしまう場合もあり得ます。そのよう異常な状態に対応するのが⑥の異常系コードです。

このようなコードの構成になっている場合での、正常系テストとは ①と②の正常系コードが動作して正しくデータが読み出せるというソフトの動作を確認するテストです。準正常系テストとは③、④、⑤のように、予め想定されていたエラーが起きた時に、そのエラーに対応する処理が設計どおりに動作する事を確認するテストです。そして異常系テストとは、⑥のように設計時に想定していなかった異常な状態が起きた時の処理を確認するテストです。

(次の記事)テストの種類・RAS の機能テスト に続く
(前の記事)テストの種類・状態遷移での準正常系テスト に戻る
 テストの記事の先頭 に戻る