リリース判定基準・テストの種類2つ目は安定性と堅牢性

2020年11月12日リリース判定

テストの種類の2つ目は安定性テストと堅牢性テストの実施状況

この一連の記事ではテストの品質を判定する時にどんな種類のテストをしているかという視点でテストの種類紹介しています。前の記事で紹介した正常系準正常系と異常系というのが、テストの品質を考える場合の一番簡単なテストの分け方です。でも、これだけはテストの品質の良否を判断するのはちょっと情報不足ですね、他に何かないでしょうか? グータラ親父は、ソフトウエアの安定性堅牢性を確認する事を目的としたテストが充分に実施されているかどうか、という観点もテストの品質を判定する情報として見ていました。

ソフトウエアの安定性を確認するテストとはどんなテストでしょうか? 安定性ですので、ソフトウエアがどんな時でも仕様書に書かれた機能を提供できるか、という事を確認するテストです。少し具体的な例で言えば、24時間365日電源を入れっぱなしにしてあっても、いつもちゃんと動くかというテストですね。

組み込みソフトに求められる安定性はどの程度?

24時間365日ちゃんと動くという安定性は、今の日本では特別な事ではありません。 例えば、皆さんが自宅で使っている録画機能のあるテレビなどは、リモコンの電源ボタンで電源を切っても実はテレビの中ではソフトウエアが働き続けていて、予約時間が来たら自動的に予約番組を録画してくれます。 つまりテレビの中のソフトウエア24時間365日の間、常に安定して動いているので、録画予約ができるのです。 せっかく予約していた録画がソフトウエアがハングアップして予約ができないと、困った事になります。

そのような事が起きないように、ソフトのリリース時安定性を確認するテストがちゃんと実施されていて、そのテストの結果が問題無いかを確認しておく必要があります。 ですので、テストの品質の良し悪しを判定する時に、安定性テストを実施しているかどうかは、組み込みソフトにとって重要な確認ポイントです。とはいえ、ソフトが完成してから365日テストしてからでないとリリースできない、というのでは、昨今の開発競争のスピードに付いていけません。さて、どうしましょうか?

安定性テストが充分かはどうやって判定するの?

グータラ親父は、2つの観点で安定性テストの状況を判定していました。1つ目は加速テストです。 例えばユーザが画面等を見て何等かの操作をするような機器の場合、ユーザの典型的な操作方法を想定して、1日あたりの操作量を推定します。 その操作量の 365倍の操作量を実施すれば、完全ではないですが、ユーザの操作に関しては365日分のテストを実施したとみなす事もできます。 ユーザ操作加速試験ですね。

このような視点で何種類かの加速試験を実施する事で、リリース判定の時までに必要な安定性の確認テストを実施できているか? というのが1つ目の確認項目です。

そして2つ目は、実際に365日以上安定して動作する事を確認するテストの、実施計画があるかどうかの確認です。 リリース判定の時までに 365日以上の安定動作の確認を終了する事はできなくても、テストを開始してリリース判定の後もそのテストを継続していれば、何が判るでしょうか? 

もしソフトウエアにバグが潜在していて365日の動作の後に不具合が発生するのなら、市場でユーザがそのバグに遭遇するよりも先に、社内のテストでそのバグが発生する事が期待できます。 残念ながら、バグが市場に流出してしまった後ですが、市場でバグが発覚する前にそれを察知し、市場で発生するだろう問題の影響を最低限度に抑える手立てを講じる時間を稼げます。

安定性の確認にここまでするのはちょっと大げさですか?

本当にそんな事が必要なのかな、と思われる方もおられるかもしれませんね。 しかし、メモリなどの資源リークに起因するバグや、タイマやカウンタのロールアップ処理に起因するバグ等は、実際に長時間の動作をして初めて発生する場合が多いです。 そして、リークやタイマカウンタに起因するバグは、時期が来れば全ての製品で発生する場合が殆どです。 そのため、バグの影響範囲が市場で稼働している全製品に波及する場合が多く、非常に厄介です。 グータラ親父はこの手のバグを時限爆弾バグと呼んで、一番注意していました。

時限爆弾バグは加速テストで見つかる場合もありますが、残念ながら全ての場合を加速する事はできないので、どうしてもバグを見落とすリスクもあります。 時限爆弾バグを見落とす可能性がある限り、市場でバグが露見する前に、それがたとえ数日だけであっても社内で事前に見つける事ができるなら、その努力はしておいて損はありません。

安定性の次に確認する堅牢性テストって何を確認するのでしょう

安定性テスト状況が確認できたら、次は堅牢性のテスト状況の確認ですが、ソフトの堅牢性ってそもそもなんてしょう? 色々な定義がありますが、無理やり纏めてしまえば、異常な事が起きてもソフトウエアが動き続ける事、と言えます。 

例えば、ユーザが入力する値を間違ったとか、10文字の入力箇所に100文字などの多量の文字を入力したとか、ネット接続の環境が突然切れて直ぐに復旧したとか、ソフトウエアが使われる場面では色々な異常事態が起きます。 その時に、ソフトウエアがハングってしまったり、間違えた動作をしてしまっては、困ります。 その様な異常な場面でも、慌てる事なく気の利いたエラーメッセージでも表示して、動作を続けられるソフトウエアが堅牢なソフトウエアです。

なので、一般的に言えば異常系の動作確認テストをしていれば、堅牢性の確認をしている事になるともいえます。 ですがこれでは、リリース判定として堅牢性のテストの質が良いか悪いかは判り難いですね。 グータラ親父は堅牢性のテストの質を判断するのに、いくつかの種類のテストが実施されているかどうかを見ていました。

  • 信号の切断/回復の繰り返し状態での動作テスト
  • ノイズ環境での動作テスト
  • 最大構成高負荷での動作テスト

信号の切断/回復状態での動作テスト

まずは信号の切断/回復の繰り返し状態での動作テストです。 組み込み系も含めてコンピュータというのは基本的に何かの情報を信号として入力し、それを加工して出力します。 例えば皆さんの使っているスマフォはインターネットから記事情報を入力し端末の画面に出力しています。 

この入力信号は色々な原因で途切れたり繋がったりしますね。 このように入力信号の断続が繰り返し発生しても、ハングしたりせずに処理が続けられる必要があります。 ですので、そのような信号の切断/回復の環境を強制的に作り出して、そのような環境でソフトウエアが安定して動作を続ける事を確認するテストが、実施されているかどうかを確認します。

一般的な文章にすると何か難しそうですが、実際はそんな大した事でもありません。 例えば、皆さんの自宅にある無線LANルータを想定して下さい。 この無線LANルータは通信相手のパソコンやスマフォが電波の届きにくい部屋にあったり、ノイズ元になる電子レンジのスイッチが入ったりすると、無線の接続が切れてしまたりまた繋がったりしますよね。

なので、無線LANルータのソフトウエアのリリース時には、例えば通信相手の端末を電波の届くか届かないかのギリギリの所まで持って行って、無線が繋がったり切れたりする状態を強制的に作り出して、そのような状態で通常の機能がちゃんと動作するかというテストをしているかどうかを、確認するわけです。

ノイズ環境での動作テスト

次にノイズ環境での動作テストですが、信号の切断/回復の繰り返し状態での動作テストと似ているようなのですが、少し異なります。 ノイズというのは信号の切断/回復を引き起こす場合もありますが、それだけではなくもっと色々な事をハードウエアに引き起こします。 

一番判り易いのは、間違った割り込み処理の発生ですね。 ソフトウエアは多くの場合、割り込み処理を使って色々な機能を実現しています。 この割り込み処置の元はハードウエアの割り込み信号が生成しています。 この割り込み信号はかなり鋭敏なので、ちょっとた短時間のノイズでもこれを拾って割り込み処理を発生させてしまう事があります。 

組み込み系ではノイズ割り込みという言い方をします。 ソフトウエアでは、このノイズ割り込みが入力された時に、正しく無視するように作られていないと、いろいろと不具合がおきてしまいます。 少々のノイズが発生してもソフトウエアが正しく動き続ける事を確認するには、ノイズを発生する環境での動作確認のテストをしているかどうか、という観点での確認が必要です。

これも、一般的な文章にすると小難しそうですが、先の無線LANルータで考えるとどうなるでしょう。 無線LANルータはたいてい自宅内で使われるので、自宅内でノイズを発生する物を探すと、掃除機とか電子レンジとか乾燥機とか、昔のグローランプ式の蛍光灯とかがあります。 

なので、これらのノイズを発生する機器を動かしながら、その隣で無線LANルータがちゃんと動作するようなテストをしているかどうかを確認する事で、堅牢性テストの質を確認できます。 実際には、最近の家電製品はノイズを出す事が少なくなってきたのですが、家庭にはまだまだ昔のノイズを大量に発生する家電製品もあります。 なので時には、ネットオークションで昔の家電製品を落札してテスト用に使う、なんて事もありました。

無線機能のテストには昔の家電がいいのです

え~そんなのでいいの? と思うかもしれませんがそれで良いのです。 設計段階では、色々な測定が必要で、専用測定装置には高額な物を使う事も多いです。 作業風景も何か専門的でちょっとカッコいいです。

しかし、テストの段階では、その製品が実際に使われる環境をできるだけ再現して、そこでテストするのが一番大切なのです。 ですので、家庭用の無線LANルータであれば、一般の家庭に普通にあると思われる、新旧入り乱れた家電製品を揃えてテスト環境を作る事が大切なのです。 そして、無線機能のテストのためには実は古い家電が結構重要だったりします。

ちょっと田舎の皆さんの祖父母が暮らしておられる家を想像してみて下さい。 そこには、最新のデジタル家電よりも、昔から使い続けておられる家電が、今も健在して動いています。 蛍光灯も今時の調光機能の付いたのではなく、グロース球がバチバチやって高圧を発生させて蛍光灯を起動するタイプかも知れません。 (今の若い人は蛍光灯のグロー球さえ見たことがないかも知れませんが) 

電子機器のノイズ環境としては、都会の最新デジタル家電がある環境と比較して、かなりワイルドです。 そんな環境でも無線LANルータがハングしたしせずにちゃんと動作する事が、堅牢性です。 

最大構成や高負荷での動作テストもちょっと見ておく

堅牢性とは少し視点が異なりますが、最大構成高負荷での動作テストも安定性/堅牢性の確認と同時に見る事が多いです。 最大構成や高負荷のテストは、実施状況を確認する事自体はそれほど難しいものではないす。 開発した製品の仕様書には、接続できる周辺装置とか上位装置とかの最大の台数とか、最高性能とかが書いてあります。 その最大の構成や最高性能を出した状態のテストがしてありますか、という事を確認するだけです。 

こう書くと、できていて当然のように見えますね。 はい、できていて当然なのです。 ですが、実際のところ、どんな場合でも必ずテストできていますか?、となると実は難しい場合もあるのです。先ほどまで例に使っていた、家庭内の無線LANルータであれば最大構成といっても、例えば無線子機を最大で32台繋げます、この程度の台数ならば実際に装置を揃えてテストをするのもそれほど大変ではありません。

ところで、無線LANルータの繋がる先のインターネット側には何が有るのでしょうか? いくつかの装置を経由する事もありますが、無線LANルータの繋がる先には何からの局舎側の装置があります。これは1台で数百から数千の無線LANルータと接続されて動作しています。 

という事は、この局舎側装置の仕様が、接続可能な無線LANルータの最大数が 4000台であれば、ソフトウエアのリリース時には、少なくとも4,000台の無線LANルータが繋がって正常に動作する事を確認しておかないといけません。 機材も場所も電気も大量に必要なので、結構大変です。

そんな設備は準備できないから出荷前にテストをしておく事は難しいでしょうか? でも、残念ながらソフトウエアのバグはそのような箇所を好んで住みついています。 マーフィーの法則はソフトウエアのバグの世界でも効力を失ってはいません。 

装置のベンダとしては、やはりなんとかして大規模な試験環境を揃えて、テストをしておく必要があります。その場合、実機を揃えるのが難しい場合には、シミュレータを使うなど、代替策を用意する事もあります。ただ、シミュレータを使った場合には本番環境とは微妙異なる部分もでてくるので、完全なテストとは言えなくなるので、完璧にテストできたとは言い難いかもしれません。 そのような場もあるのので、テストしていて当然というのは、なかなか難しいところがあります。

テストの種類、次はRAS機能テストです

テスト品質の良し悪しを判定する時に、実施したテストの種類をみるのですが、安定性テストと信頼性テストの次は RAS 機能テストです。 次の記事に紹介していますので、興味のある方はご覧ください。

(次の記事)リリース判定基準・テストの種類3つ目はRAS機能テスト に続く