これまでの多数の回答の中で、当面の質問に対する回答の重要な考慮事項である等価分割と境界値分析に触れた人はいません。他の答えはすべて有用ですが、定性的ですが、ここで定量的であることが可能であり、望ましいです。@fishtoasterはいくつかの具体的なガイドラインを提供します。テストの定量化の裏で覗くだけですが、同値分割と境界値分析により、より良い結果が得られます。
で同値分割、あなたが期待される成果に基づいてグループにすべての可能な入力のセットを分割します。1つのグループからの入力は同等の結果を生成するため、このようなグループは等価クラスと呼ばれます。(同等の結果は同一の結果を意味しないことに注意してください。)
簡単な例として、小文字のASCII文字を大文字に変換するプログラムを考えます。他のキャラクターは恒等変換を行う必要があります。つまり、変更しないでください。同等クラスへの可能な内訳の1つを次に示します。
| # | Equivalence class | Input | Output | # test cases |
+------------------------------------------------------------------------+
| 1 | Lowercase letter | a - z | A - Z | 26 |
| 2 | Uppercase letter | A - Z | A - Z | 26 |
| 3 | Non-alphabetic chars | 0-9!@#,/"... | 0-9!@#,/"... | 42 |
| 4 | Non-printable chars | ^C,^S,TAB... | ^C,^S,TAB... | 34 |
最後の列は、すべてを列挙した場合のテストケースの数を報告します。技術的には、@ fishtoasterのルール1により、52のテストケースが含まれます。上記の最初の2行のテストケースはすべて「一般的なケース」に該当します。@fishtoasterのルール2は、上記の行3および4からも一部またはすべてを追加します。ただし、同値分割テストでは、各同値クラスのいずれかのテストケースで十分です。「a」または「g」または「w」を選択した場合、同じコードパスをテストしています。したがって、52個以上ではなく合計4個のテストケースがあります。
境界値分析では、わずかな改良を推奨しています。本質的には、同等クラスのすべてのメンバーが同等ではないことを示唆しています。つまり、境界の値も、それ自体がテストケースに値すると見なされる必要があります。(これを正当化する簡単な理由の1つは、悪名高いoff-by-oneエラーです!)したがって、各等価クラスに対して、3つのテスト入力を持つことができます。上記の入力ドメインを見て、ASCII値についてある程度の知識があれば、これらのテストケースの入力を思いつくかもしれません。
| # | Input | # test cases |
| 1 | a, w, z | 3 |
| 2 | A, E, Z | 3 |
| 3 | 0, 5, 9, !, @, *, ~ | 7 |
| 4 | nul, esc, space, del | 4 |
(3つ以上の境界値を取得するとすぐに、元の等価クラスの描写を再検討することをお勧めしますが、これは単純であったため、改めて説明しませんでした。)したがって、境界値分析では、徹底的なテストを行うための128のテストケースと比較して、17のテストケース-完全なカバレッジの信頼性が高い。(言うまでもなく、組み合わせ論は、徹底的なテストは実際のアプリケーションでは単に実行不可能であると規定している!)