Spośród mnóstwa odpowiedzi dotychczas nikt nie poruszył podziału na równoważności i analizy wartości granicznych , co jest istotnym czynnikiem w odpowiedzi na pytanie. Wszystkie pozostałe odpowiedzi, choć użyteczne, są jakościowe, ale możliwe jest - i lepiej - być tutaj ilościowe. @fishtoaster zapewnia pewne konkretne wytyczne, wystarczy zajrzeć pod zakres kwantyfikacji testowej, ale podział równoważności i analiza wartości brzegowych pozwalają nam lepiej.
W partycjonowaniu równoważności dzielisz zestaw wszystkich możliwych danych wejściowych na grupy na podstawie oczekiwanych wyników. Wszelkie dane wejściowe z jednej grupy przyniosą równoważne wyniki, dlatego takie grupy nazywane są klasami równoważności . (Uwaga: równoważne wyniki nie oznaczają identycznych wyników).
Jako prosty przykład rozważ program, który powinien przekształcać małe znaki ASCII na wielkie litery. Inne postacie powinny przejść transformację tożsamości, tzn. Pozostać niezmienione. Oto jeden z możliwych podziałów na klasy równoważności:
| # | 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 |
Ostatnia kolumna podaje liczbę przypadków testowych, jeśli wyliczysz je wszystkie. Technicznie, zgodnie z regułą @ fishtoaster 1, uwzględniałbyś 52 przypadki testowe - wszystkie te dla dwóch pierwszych wierszy podanych powyżej należą do „wspólnego przypadku”. Reguła 2 @ fishtoaster dodałaby także część lub całość z wierszy 3 i 4 powyżej. Ale przy testowaniu partycjonowania równoważności wystarczy jeden przypadek testowy w każdej klasie równoważności. Jeśli wybierzesz „a”, „g” lub „w”, testujesz tę samą ścieżkę kodu. Tak więc masz w sumie 4 przypadki testowe zamiast 52+.
Analiza wartości brzegowych zaleca nieznaczne udoskonalenie: zasadniczo sugeruje, że nie każdy element klasy równoważności jest, cóż, równoważny. Oznacza to, że wartości graniczne należy również uważać za warte osobnego przypadku testowego. (Jednym z łatwych uzasadnień tego jest niesławny błąd „jeden po drugim” ). Zatem dla każdej klasy równoważności można mieć 3 wejścia testowe. Patrząc na domenę wejściową powyżej - i z pewną wiedzą na temat wartości ASCII - mogę wymyślić te dane wejściowe dla przypadków testowych:
| # | Input | # test cases |
| 1 | a, w, z | 3 |
| 2 | A, E, Z | 3 |
| 3 | 0, 5, 9, !, @, *, ~ | 7 |
| 4 | nul, esc, space, del | 4 |
(Gdy tylko otrzymasz więcej niż 3 wartości graniczne, które sugerują, że możesz chcieć ponownie przemyśleć swoje pierwotne nakreślenia klas równoważności, ale było to na tyle proste, że nie wróciłem do ich poprawiania.) Zatem analiza wartości granicznych prowadzi nas do 17 przypadków testowych - z dużą pewnością pełnego pokrycia - w porównaniu do 128 przypadków testowych do przeprowadzenia wyczerpujących testów. (Nie wspominając już o tym, że kombinatoryka dyktuje, że wyczerpujące testy są po prostu niemożliwe do zastosowania w rzeczywistych aplikacjach!)