リリース判定基準・テストの種類まずは異常系と準正常系

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

テストの種類は5つの視点でのテストの有無を確認する

ソフトのリリース判定を行う時に使う4つの判定基準テストの品質残存バグプロダクト品質プロセス品質)のうち、この記事ではテスト品質の良し悪しを判定す方法について紹介しています。グータラ親父はテストの品質をテストの量と個々のテストの種類テストの実施状況バグの状況の4つの視点から見ていました。この記事では2つ目のテストの種類について見ていきます。

テストの品質の善し悪しを判断する視点のうちテストの量に続いて大切なのテストの種類です。適切な種類のテストを実施しているかどうかを見ないと、テストの量だけを見ていてもテストの品質の判断ができません。

では、テストの種類ってどうやって良し悪しを判断しましょうか。 テストの量のように数値化が難しいので定性的な判定になるのですが、グータラ親父は実施されたテスト種類について、以下のような5つの観点で必要な種類のテストを実施しているかどうかを判定してきました。 (テストの種類はテストカテゴリーと呼ばれる事もあります)

 異常系テストと準正常系テストの比率

   安定性テストと堅牢性テストの実施状況

   RAS機能テストの実施状況

   バージョンアップ機能に関するテストの実施状況

   過去不具合の確認状況

具体的にどういう事なのか順番に紹介していきますが、この記事ではまず異常系テストと準正常系テストについて紹介します。なお、異常系と準正常系テストについては別の記事でも詳しく紹介していますので、そちらもご覧ください。

正常系テストと準正常系テストと異常系テスト

正常系準正常系異常系という言葉をどういう意味で使うか、これも人により組織により微妙に異なる場合もあります。 ここでは、正しい入力や正しい操作を正しい動作環境で実行した時にソフトウエアが正しく動作する事を確認するテストを正常系テストと呼ぶ事にします。

そして正常系以外のテストのうちで、ソフトに予め設計/実装されている異常な状態(エラーの状態)に対応する挙動を確認するテストを準正常系テストと呼び、ソフトに実装されていない異常な状態が起きた時の動作を確認するテストを異常系テストと呼ぶ事にします。 

例えば通信でエラー検出した時や端末から間違った値を入力した時の処理は、通常はソフトに設計/実装されていますので、そのような時の動作の確認は準正常系テストです。 しかし外来イズでメモリ内の制御変数がおかしな値に化けてしまった結果おきるソフトの挙動は、予め組み込まれた処理ではないので異常系のテストと呼びます。

必要な準正常系と異常系のテストの割合

この様に定義した時に、皆さんの組織では全てのテストにおける準正常系テストと異常系のテストの割合はどの程度でしょうか? 一般的な話になってしまいますが、組み込み系のソフトでは、ソースコードのうち2割が正常系で8割がエラーが起きた時の処理のために書かれているとも言われます。 実際、ソフトのモジュール設計でも異常を検出した時のエラー処理の内容や応答についての設計が大半を占めます。 ですので、テスト項目項目についても正常系の動作を確認する項目が2割で残り8割はの殆どが準正常系を確認するような比率になると考えるのは、わりと妥当な考えです。

ところで、エラーが起きた時の処理はさらに2つに分けられて、1つ目は定義された・予想されるエラーが起きた時の処理で、2つ目が予想していなエラーが起きた時の処理です。前者は予想されるエラーの種類ごとにそれに対応する処理がソフトに実装されます。これが準正常系の処理なので、これに対応するのが準正常系テストです。

そして、設計段階で思いつかなかったような予想外のエラーが起きると、どんな条件にも当てはまらない時に実施するデフォルト処理がソフトに実装されていれば、その処理が実効されます。これが異常系処理になるので、これに対応するのが異常系処理です。ちなみに、デフォルト処理が実装されていない場合には、何が起きるかソフトでは制御されていないという事なので、実際のところ何が起きるか判りません、ハングアップ等の問題のある状態になってしまう事もあります。

ところで、この準正常系の処理と異常系の処理が合わせて8割のエラーが起きた時の処理になるのですが、では準正常系と異常系の比率がどの程度かというと、装置やソフトの構成によって変わるので正解はありません。

ただ、グータラ親父がこれまで見てきた様々な製品で見ると、エラーが起きた時の処理8割のうち、7割が準正常系で1割が異常系というのが、感覚的な割合です。

必要な異常系のテストの比率

では、リリース判定でソースコードの品質を判定する時に、テストの品質として異常系テストの比率はどの程度あれば良いのでしょうか?  特にこれで無いといけないという値は無いというか、理論的な背景が無いのですが、グータラ親父は最低ラインとして異常系のテストの比率の最低ラインを60%程度と考えて、リリース判定をしてきました。

もちろん、異常系のテストの比率が 80%程度あった方が良いのですが、全ての製品で80% となると、中には達成が難しい場合もあるので、60% 程度を最低ラインに設定しています。 この値は、低いと思われますか、高いと思われますか?

日本の常識と世界の常識

実は、日本の会社でソフトウエアの開発やテストをやっておられる人達と話すと、準正常系テストと異常系テストとを合わせて、全体のテストに占める割合が60% だと少ないな~という応答が返ってきます。 一方で海外の会社の人達と話すと、正常系以外のテストは10%程度ですよ、とか異常系テストとか準正常系テストって何ですか? という反応がごく普通に返ってくる事も多々あって、少し戸惑う事もあります。 これは、ソフトウエアの品質の定義というか捉え方の違いだと思います。

海外では品質とは仕様書に書かれた機能が動作する事です。 そして品質保証とは仕様書に書かれた事が動作する事がテストで検査されている事です。 テストの目的が仕様書に書かれている事が動く事の確認なので、正常系の試験項目が殆どになります。

一方で日本における品質とは、仕様書に書かれた機能がどんな場合にでも安定して動作する事です。 ですので、日本では間違った入力やノイズの多い環境などの異常な状態でも、ソフトウエアがちゃんと機能する事をテストで確認して品質を保証する必要があるので、準正常系テストと異常系テストが必要になります。

最後は結局大人の事情

もちろん、世界的にみても品質について日本と同様に考える会社もあるのですが、グータラ親父が御付き合いしてきた海外の会社では、やはり正常系のテストを中心にテストを考えておられる会社が多かったです。 

その様な会社にソフトの開発からテストまでを委託した場合には、テスト内容についていろいろと指導をして異常系のテストもしっかりと実施してもらう必要があり、指導もします。 しかし頑張って指導をしても、異常系のテストの比率を80%まで持っていくのは、とても大変な事が多いです。 そんな大人の事情もあって、グータラ親父は準正常系テストと異常系のテストをあわせた比率は 60% を最低ラインにしていました。

テストの種類次は安定性と堅牢性です

テスト品質の良し悪しを判定する時に実施したテストの種類を見るのですが、異常系、準正常系、異常系のテストの次は安定性テストと堅牢性テストです。次の記事に紹介していますので、興味のある方はご覧ください。

(次の記事)リリース判定基準・テストの種類2つ目は安定性と堅牢性 に続く