テストの種類・準正常系と異常系と正常系

2020年9月23日テスト品質

準正常系テストとはソースコードの作りから考えたテストの名前

準正常系テスト異常系テスト正常系テストの違いとは何でしょう? 異常系と正常系は判り易ですが、準正常系は少し判り難いですね、組織によって定義はいろいろですが、グータラ親父は設計・実装されたエラーが起きた時の動作を確認するテストを準正常系のテストと定義していました。正常系/準正常系/異常系を整理すると以下のような定義です。

  • 正常系テスト正しい入力に対する動作を確認する
  • 準正常系テスト:設計・実装されたエラーが発生した時の動作を確認する
  • 異常系テスト設計されていないエラーが発生した時の動作を確認する。

正常系/準正常系/異常系 というテストの名前は、ソフトの設計やソースコードの作りからつけられた名前と考えると判り易くなります。準正常系テストと異常系テストはどちらもエラーが起きた時のソフト動作を確認するテストなので異常系テストに一本化されている場合もありますが、最近は準正常系テストと異常系テストを明確に分ける場合が増えてきています。これからテスト設計をする時には、皆さんも準正常系を異常系と分けてテストを考えられたほうが、テストの良し悪しがより判り易くなると思います。

グータラ親父は、異常系テストに準正常系を含んでいない事を明確に示すために、準正常系テスト(真の)異常系テスト、という表現を使っていましたので、この記事でもその言い方を使う事にします。

組み込み系では準正常系と(真の)異常系が8割を占める

組み込み系のソフトは一般に機器の制御に使われる事が多いので、ハードの誤動作や通信のエラー等色々なエラーがある事を前提エラーがあっても問題なく動作し続けるように作られます。様々なエラーに対応するために多くの準正常系コードや異常系コードが書かれるので、正常系のコードよりも準正常系と異常系のコードのほうがはるかに多くなります。ざっくり言って、正常系コードが2割、準正常系コードが7割、異常系コードが1割という感覚です。そのため、正常系テストと準正常系テストと異常系テストの比率も、だいたいはこの比率になってきます。

実際にソフトの設計をする場合でも、まず正常系の動作を検討し、その次にどんなエラーが起こりうるかを洗い出します。このエラーの洗い出しで、本番の動作環境で起きる可能性んおあるエラーがしっかり洗い出されていると、そのエラーに対応するための処理がソフトに組み込まれるので、いろいろな状況に対しても安定して動作を続ける信頼性や可用性が高いソフトになります。そして、この洗い出しを行ってもなお想定しない状態が起きた時、どんな処理を行うのかをソースコードに実装できるかどうかで、そのソフトの堅牢性が決まります。

準正常系と(真の)異常系テストが信頼性・可用性・堅牢性を確認する

この準正常系コード異常系コードがどれだけしっかりと設計・実装されているかによって、そのソフトの安定性堅牢性可用性というソフトの目に見えない品質が決まってきます。ですので、組み込み系ソフトのテストではこの準正常系テストと異常系テストの量と質がとても大切になってきます。

準正常系は、ソフトの設計段階で考え付いたエラー処理のテスト、異常系テストは設計段階で考えていなかったような異常た状態の処理のテストと説明しましたが、これだけでは少し判り難いかと思います。

何が準正常系テストでどこからが(真の)異常系テストになるのか、というのは慣れないとちょっと判り難い部分もありますので、次の記事では通信プロトコル処理、状態遷移処理、ハードウエアの制御の3つの例を使って、ソフトの作りと対比しながらもう少し具体的に紹介してみます。

(次の期維持)テストの種類・通信プロトコル処理での準正常系テスト に続く
(前の記事)テストの種類・単体テストと結合テストとシステムテスト に戻る
 テストの記事の先頭 に戻る