システムテストの必須項目(5)・起動時テストには準正常系と異常系を加える

2021年9月14日テスト品質

組み込み系では起動時の安定性を確認する起動時テストも大切です

組み込み系のソフトの安定性を確認するテストでは、起動時の準正常系と異常系の確認が重要になります。起動時にはサーバとの通信フラッシュROMへのアクセスなどが集中的実行されますが、これらの処理が遅延したりエラーになった時に、ハングアップせずに回復できるかどうかを確認するのが、起動時処理の準正常系や異常系のテストです。組み込み系の装置が起動する時には、周囲に操作してくれる人が居ない事が多いので、何問題があってもハングアップしてしまう事だけは避けないといけないからです。

組み込み系の装置では、電源が入った時やファームウエアをダウンロードして新しいバージョンに切り替える時、不具合の対応のため遠隔の監視センターからの指示で再起動処理を実行した時、さまざまな場面で起動処理が行われます。近くにオペレータが居ない組み込み製品にとって、起動処理が失敗してしまうと装置を交換して修理するしか回復の手段が無くなるので、起動処理の安定性は大切です。この記事では、起動時のテストでの準正常系や異常系のテスト項目の考え方について紹介します。

起動処理では準正常系と異常系のテストが重要です

起動処理では何事も無く起動が終わる正常系の確認も大切ですが、それ以上に準正常系(想定されたエラーが起きた時の起動処理)や異常系(想定外のエラーが起きた時の起動処理)についての確認が重要です。起動処理が正常に終了して通常の動作モードに移行した後ならば、装置に何か問題があっても遠隔保守機能などを使って監視センターから装置の状態調査や回復操作ができます。しかし起動処理が途中で止まってしまうと、このような遠隔保守もできません。起動処理に安定性が重要なのはこのよう理由からです。

起動処理の中ではサーバとの通信処理や内臓のフラッシュメモリのアクセスなどが集中して実行される場合が多いです。通信処理としてはサーバからの装置設定のダウンロードや最新ファームの確認が実行されている事が多いですし、フラッシュメモリアクセスではそもそも動作に必要なプログラムをフラッシュメモリから読み出してDRAMに展開するのが起動処理の最初に行われますし、サーバからダウンロードした設定をフラッシュメモリに書き込む処理も起動処理に含まれる事が多いです。

このサーバとの通信処理やフラシュメモリのアクセスは、通信エラーやフラッシュメモリアクセスエラー等、組み込み装置の中でもエラーの起こる確率が高い処理です。そのために、これらの処理の中には様々なエラーを想定したエラー処理が組み込まれています。これらのエラー処理が正しく動作している事を確認するのが準正常系のテストであり、それらのエラー処理で想定されていない状況でも処理がハングアップしてしまわない事を確認するのが異常系のテストです。ですので、起動処理のテストでは準正常系と異常系に注意してテスト計画を作りましょう。

組起動処理中は通常の動作モードとは異なる事に注意しましょう

起動処理のテストを考える時に注意しておく事がもう一つあります。それは、起動処理中は通常の動作モードとは異なるという事です。組み込みソフトに限らないのですが、装置の電源が入った直後は様々なハードウエアの設定や初期化を実施する必要があり、それらが全て正常に終了して初めて、通常の機能を提供する通常の動作モードが開始されます。この通常動作モードが開始されるまでの期間を起動モードと呼びます。(呼び名は開発製品や開発組織によって様々ですが)

組み込みソフトが提供する各種の機能は通常の動作モードで動くので、機能テストは全てこの通常の動作モードが前提です。言い方を変えると、通常動作モードではない起動モードでのテストは他のテスト項目では実施されないという事です。ですので、起動処理では特にこの起動モードに注意してテストを考える必要があります。起動モードでのテストを考える時に注意するのは起動シーケンスです。電源が投入された瞬間から、組み込みソフトの中ではブート処理やハード初期化処理や端末の認定処理などが順次起動シーケンスに従って処理されていきます。起動テストでは、この起動シーケンスの各々が正常に動作している事を確認するという視点も大切です。

起動処理ではフラッシュメモリやサーバ通信の動きを確認しましょう

フラッシュメモリへのアクセスはフラッシュロムはバグの巣窟の記事にも書いていますが、様々な要因から潜在バグが潜みやすい部分です。そして、起動処理ではフラッシュメモリへのアクセスが集中して発生します。まず最初のブート処理ではフラッシュメモリに記憶された実行プログラムが読み出されてDRAMに書き込まれます。また装置の各種設定値がフラッシュメモリに書き込まれます。同時に、最新版のファームウエアがサーバで見つかると、それがダウンロードされてフラッシュメモリに書き込まれます。

これらの処理が起動処理の中で実行されるので、通常の動作モードに比べて多くのフラッシュメモリへのアクセスが起こりる事になります。起動時テストでは、これらのフラッシュメモリへのアクセスに注意して、フラッシュメモリへのアクセスが失敗した時の準正常系のテストをしっかりと実施しましょう。

また、起動処理の中ではサーバとの通信も頻発します。端末の設定をダウンロードしたり、契約しているサービス内容を確認したり、新バージョンのソフトの有無を確認したりと、様々な確認やデータ交換のためのサーバとの通信が起動処置の中で実施されます。そして、通信処理もまた通信路でのパケットの消失やサーバの応答遅れによるタイムアウト通信エラーの発生など、多くのエラーが起きる可能性のある処理です。通信処理では、これらのエラーに対応するために準正常系の処理が大量に組み込まれていますので、その動作を確認するためには、起動時テストにはサーバ通信の準正常系のテストが必須です。

起動処理の途中でエラーが発生した時の動作の確認もしましょう

起動時テストではエラーが発生した後の動作についての確認も忘れてはいけません。起動処理でエラーが見つかった場合の対応の仕方としては何種類かありますが、大まかには以下の4種類に分けられます。

  1. エラーが起きなくなる事を期待して再起動する (再起動でエラーが無くなる事を期待する方針です)
  2. エラーによって機能が一部制限された縮退モードで起動する(エラーの無い機能だけでも提供する方針です)
  3. エラーを記録して保守モードで起動する(遠隔保守センターからの調査や回復処理を待つ方針です)
  4. 起動は諦めてエラーログを記録してエラー表示だけして起動処理を中止する(潔く諦める方針です)

これらの単独または組み合わせによって、起動処理でエラーが起きた時の対処の方針が決まっていまるはずですので、エラーが起きた時にそれらの対処方針に沿って動作している事を、起動時テストで確認しておく事が必要になってきます。

起動処理が続行出来なくなった時のエラー表示の確認も必要です

なお、これは起動時テストの項目というよりはエラーが起きた時の装置状態の表示の仕様の確認という面が強いのですが、起動時に何等かのエラーが起きて正常モードでの起動ができなかった時、その事をエンドユーザやオペレータに明確に示す事ができているかという観点でのテストも忘れないようにして下さい。

一番簡単なのは、エラー状態を示す赤色LEDの点滅 等ですね。その表示を見て、エンドユーザやオペレータが装置に異常が起きている事に気付いて、メーカのコールセンターへ電話を掛けるなど何等かの対策をして貰う事で、故障の対応が進みます。このエラー表示がちゃんとできていないと、起動不具合が起きた時の対応がとてもやり難くなってしまいます。

起動時テストの次ぎは二次記憶装置の劣化のテストです

組み込みソフトの起動時の安定性を確認する起動時テストの注意点についてこの記事で紹介してきました。次の記事からは、通常処理モードでのテストの注意点について順番に紹介していきます。まずは二次記憶の劣化テストからです。