ソフトウェア テストでは、テスト ケースの設計がアプリの信頼性と堅牢性を確保するための基礎となります。 k-way テストやペアワイズ テストなどの組み合わせテスト設計手法は、異なる入力変数間の相互作用をテストすることを目的としています。しかし、課題や落とし穴によって、重大なエラーを発見する効果が妨げられる可能性があることが明らかになりました。
この短い記事では、組み合わせテストの設計中に遭遇する可能性のある特定の問題に焦点を当て、慎重な検討が必要なニュアンスを探ります。不正な入力値の例、堅牢なオラクルの重要性、見落とされがちな変数の組み合わせの重要性、変数がどのように相互作用するかについての重要な理解を詳しく掘り下げてみましょう。
k ウェイ テスト セットは、k 個の変数の値の可能なすべての組み合わせで構成されます。たとえば、Allpairs アルゴリズムを適用すると、変数値のペアの考えられるすべての組み合わせを含む 2 方向テスト セットが生成されます。したがって、k-way フォールトとは、k 個の変数の値の相互作用から生じるエラーを指します。 SYS1 と SYS2 の 2 つのシステムを検査したところ、実稼働リリース後にエラーが判明しました。両方のシステムは、k 値 2、3、4、および 5+ を使用して k-way テストを受けました。
この表には、2 つのシステムの k-way テストの結果が表示されます。
故障の種類 | SYS1 | SYS2 |
---|---|---|
2ウェイ | 30 | 29 |
3ウェイ | 4 | 12 |
4ウェイ | 7 | 1 |
> 4ウェイ | 7 | 3 |
見つかりません | 34 | 43 |
各 k-way セットに対して逐次チェックが実行されました。図 2.1 は、2 つ以下の入力変数の相互作用から生じる誤差が29 in SYS1
、 30 in SYS2
あることを示しています。 3 つの変数の相互作用による誤差は4*(30+4) in SYS2
、 12*(29+12) in SYS1
でした。 4 つの変数を含む交互作用の場合、誤差は7*(30+4+7) in SYS2
1*(29+12+1) in SYS1
でした。 4 つ以上の変数との相互作用による誤差は3*(29+12+1+3) in SYS1
7*(30+4+7+7) in SYS2
でした。特に、SYS1 では43 個のエラーが検出されず、SYS2 では34 個のエラーが検出されませんでした。
この例では、最も重大なエラーは「見つかりません」カテゴリに属していました。さらなる調査により、検出されなかったエラーのほとんどが一方向の障害であることが判明しました。これは、1 つの変数の特定の値が他の変数の値とは関係なくエラーを引き起こしたことを意味します。ペアワイズ テストではこれらのエラーが検出されるはずですが、何らかの理由で検出されないままになっていました。これらのNot Foundエラーは主に、特定の入力値が選択されていないか、誤って選択されているために気付かれなかった一方向の障害です。
問題の本質は、 Allpairs アルゴリズムを適用する前に発生したエラーが持続するという事実にあります。これは、以前のテスト設計手法が誤って適用された場合、または入力値が誤った場合、Allpairs アルゴリズムまたは直交配列テストの使用に関係なく、アプリケーションのエラーが継続することを意味します。
例として、多数のオプション (この形式のようなもの) があり、その結果、多数の入力データの組み合わせがあるアプリケーション モジュールを考えてみましょう。
モジュールでは、 2^12 * 3
可能な組み合わせがあるとします。ここでの課題は、Allpairs アルゴリズムを使用してすべての可能な変数値を徹底的にテストできるため、間違った入力値を選択することではありません。しかし、これですべての重大なエラーが見つかるでしょうか?期待される結果に問題があるため、おそらくそうではありません。このような種類のソフトウェア モジュールでオプションの各組み合わせを操作した後、システムをしばらく使用して、オプションが正しく動作し、選択したオプションを適用した後に他に何も問題がないことを確認する必要があります。この場合、見落とされやすい微妙で明白でない問題がないという保証はありません。
各テストの後に、システムの中核機能を徹底的に評価する必要がある場合があります。ここで重要なのは、重大な欠陥は多くの場合、期待するほど明白ではなく、期待される結果ですべてを説明することは事実上不可能になるということです。
2^12 * 3
の組み合わせ (上記の例で示したように) のうち、おそらく他のすべてよりもはるかに頻繁に発生するモジュール オプションの組み合わせが 1 つあります。それがデフォルト設定です。 95% の人がこのモジュールのデフォルト設定からオプションを変更しない場合、ほぼデフォルトまたはほぼデフォルトのオプションが十分にカバーされるはずです。 1 つのオプションでデフォルト構成からの逸脱を伴うすべてのバリエーションをテストすると、テスト数は 2 桁になります。デフォルトから 2 つの設定で逸脱する可能性のあるオプションのすべての組み合わせをテストする場合、テスト ケースは約 100 個になります。これらのテスト ケースと全ペア テスト ケースを使用してテストすると、デフォルト オプションの存在を無視するよりも良い結果が得られる可能性があります。ただし、Allpairs アルゴリズムでは、テスターは最も可能性が高く一般的に使用される変数の組み合わせを見落とすことになります。
ペアワイズ テストの成功または失敗の重要な要素は、入力変数の組み合わせが出力データにどのような影響を与えるかを理解することにあります。 2 つの異なるテスト済みアプリケーションにペアワイズ テストを適用すると、大幅に異なる結果が得られる可能性があります。アプリケーションによっては、出力データを生成するためにより少ない入力データを使用するものもあれば、より多くの入力データを使用するものもあります。
例として、3 つの入力変数 (X、Y、Z) と 3 つの可能な出力データ (1、2、3) を持つプログラムを考えてみましょう。矢印は、特定の結果を生成するためにどの変数が相互作用する必要があるかを示します。結果 1 を得るには、変数 Y と X が相互作用する必要があります。結果 2 を得るには、変数 Z と X が相互作用する必要があります。この用途では、ペアごとのテストを適用することが適切な選択であり、肯定的な結果が得られる可能性が高くなります。ただし、出力データが 3 つ以上の入力変数の相互作用から生じるシナリオがある場合、ペアワイズ テストでエラーを特定できない可能性が高くなります。単純にペアごとのテストを適用すると、テストされたアプリケーションの重大なエラーを見落とすリスクが高まります。
QA プロフェッショナルとして、これらのニュアンスを理解することが重要です。場合によっては理論的ではありますが、これらの洞察は、アプリの信頼性と堅牢性を確保する、表面を超えた総合的なテスト アプローチの必要性を強調しています。組み合わせテスト設計の複雑さを理解することで、QA 専門家はアプリの複雑なビジネス ロジックを効果的にテストし、高品質のソフトウェアをユーザーに提供できるようになります。