Tra la pletora di risposte finora nessuno ha toccato il partizionamento dell'equivalenza e l' analisi del valore limite , considerazioni vitali nella risposta alla domanda in questione. Tutte le altre risposte, sebbene utili, sono qualitative ma è possibile - e preferibile - essere quantitative qui. @fishtoaster fornisce alcune linee guida concrete, che danno una sbirciatina sotto le copertine della quantificazione dei test, ma il partizionamento dell'equivalenza e l'analisi del valore limite ci consentono di fare meglio.
Nel partizionamento di equivalenza , dividi l'insieme di tutti i possibili input in gruppi in base ai risultati previsti. Qualsiasi input da un gruppo produrrà risultati equivalenti, quindi tali gruppi sono chiamati classi di equivalenza . (Notare che risultati equivalenti non significano risultati identici.)
A titolo di esempio, si consideri un programma che dovrebbe trasformare caratteri ASCII minuscoli in caratteri maiuscoli. Gli altri personaggi dovrebbero subire una trasformazione dell'identità, cioè rimanere invariati. Ecco una possibile suddivisione in classi di equivalenza:
| # | 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 |
L'ultima colonna riporta il numero di casi di test se li si elencano tutti. Tecnicamente, secondo la regola 1 di @ fishtoaster includeresti 52 casi di test - tutti quelli per le prime due file sopra riportati rientrano nel "caso comune". La regola 2 di @ fishtoaster aggiungerebbe anche alcune o tutte le righe 3 e 4 sopra. Ma con il test del partizionamento di equivalenza è sufficiente un solo caso di test in ciascuna classe di equivalenza. Se scegli "a" o "g" o "w" stai testando lo stesso percorso di codice. Pertanto, hai un totale di 4 casi di test anziché 52+.
L'analisi del valore limite suggerisce un leggero affinamento: in sostanza suggerisce che non tutti i membri di una classe di equivalenza sono, beh, equivalenti. Cioè, i valori ai confini dovrebbero essere considerati degni di un caso di prova a sé stanti. (Una semplice giustificazione per questo è il famigerato errore off-by-one !) Pertanto, per ogni classe di equivalenza potresti avere 3 input di test. Osservando il dominio di input sopra - e con una certa conoscenza dei valori ASCII - potrei trovare questi input di test case:
| # | Input | # test cases |
| 1 | a, w, z | 3 |
| 2 | A, E, Z | 3 |
| 3 | 0, 5, 9, !, @, *, ~ | 7 |
| 4 | nul, esc, space, del | 4 |
(Non appena ottieni più di 3 valori limite che suggeriscono che potresti voler ripensare le delineazioni originali della classe di equivalenza, ma questo è stato abbastanza semplice da non tornare indietro per rivederle.) Pertanto, l'analisi del valore limite ci porta solo a 17 casi di test - con un'alta affidabilità di copertura completa - rispetto a 128 casi di test per eseguire test esaustivi. (Per non parlare del fatto che la combinatoria impone che test esaustivi siano semplicemente impossibili per qualsiasi applicazione nel mondo reale!)