テストの種類・準正常系と異常系と正常系
準正常系テストとはソースコードの作りから考えたテストの名前
準正常系テスト、異常系テスト、正常系テストの違いとは何でしょう? 異常系と正常系は判り易ですが、準正常系は少し判り難いですね、組織によって定義はいろいろですが、グータラ親父は設計・実装されたエラーが起きた時の動作を確認するテストを準正常系のテストと定義していました。正常系/準正常系/異常系を整理すると以下のような定義です。
- 正常系テスト:正しい入力に対する動作を確認する
- 準正常系テスト:設計・実装されたエラーが発生した時の動作を確認する
- 異常系テスト:設計されていないエラーが発生した時の動作を確認する。
正常系/準正常系/異常系 というテストの名前は、ソフトの設計やソースコードの作りからつけられた名前と考えると判り易くなります。準正常系テストと異常系テストはどちらもエラーが起きた時のソフト動作を確認するテストなので異常系テストに一本化されている場合もありますが、最近は準正常系テストと異常系テストを明確に分ける場合が増えてきています。これからテスト設計をする時には、皆さんも準正常系を異常系と分けてテストを考えられたほうが、テストの良し悪しがより判り易くなると思います。
グータラ親父は、異常系テストに準正常系を含んでいない事を明確に示すために、準正常系テストと(真の)異常系テスト、という表現を使っていましたので、この記事でもその言い方を使う事にします。
組み込み系では準正常系と(真の)異常系が8割を占める
組み込み系のソフトは一般に機器の制御に使われる事が多いので、ハードの誤動作や通信のエラー等色々なエラーがある事を前提にエラーがあっても問題なく動作し続けるように作られます。様々なエラーに対応するために多くの準正常系コードや異常系コードが書かれるので、正常系のコードよりも準正常系と異常系のコードのほうがはるかに多くなります。ざっくり言って、正常系コードが2割、準正常系コードが7割、異常系コードが1割という感覚です。そのため、正常系テストと準正常系テストと異常系テストの比率も、だいたいはこの比率になってきます。
実際にソフトの設計をする場合でも、まず正常系の動作を検討し、その次にどんなエラーが起こりうるかを洗い出します。このエラーの洗い出しで、本番の動作環境で起きる可能性んおあるエラーがしっかり洗い出されていると、そのエラーに対応するための処理がソフトに組み込まれるので、いろいろな状況に対しても安定して動作を続ける信頼性や可用性が高いソフトになります。そして、この洗い出しを行ってもなお想定しない状態が起きた時、どんな処理を行うのかをソースコードに実装できるかどうかで、そのソフトの堅牢性が決まります。
準正常系と(真の)異常系テストが信頼性・可用性・堅牢性を確認する
この準正常系コードと異常系コードがどれだけしっかりと設計・実装されているかによって、そのソフトの安定性や堅牢性や可用性というソフトの目に見えない品質が決まってきます。ですので、組み込み系ソフトのテストではこの準正常系テストと異常系テストの量と質がとても大切になってきます。
準正常系は、ソフトの設計段階で考え付いたエラー処理のテスト、異常系テストは設計段階で考えていなかったような異常た状態の処理のテストと説明しましたが、これだけでは少し判り難いかと思います。
何が準正常系テストでどこからが(真の)異常系テストになるのか、というのは慣れないとちょっと判り難い部分もありますので、次の記事では通信プロトコル処理、状態遷移処理、ハードウエアの制御の3つの例を使って、ソフトの作りと対比しながらもう少し具体的に紹介してみます。
ディスカッション
コメント一覧
まだ、コメントがありません