# Tecnica della copertura delle classi di equivalenza

La tecnica delle classi di equivalenza è una tecnica di collaudo del software a scatola nera, consiste in una suddivisione dello spazio dei dati di input in segmenti che si prevede trattino il software in modo analogo. Ogni segmento, o classe, contiene valori di input che dovrebbero essere trattati allo stesso modo dal programma. L'obiettivo è ridurre il numero di test necessari verificando un solo caso rappresentativo per ogni classe.

## Implementazione

La tecnica prevede due passi:
* Identificazione delle classi: per individuare le classi di equivalenza serve prima capire in che modo il campo di ingresso prende i dati:
** Intervallo di valori di input (esempio: giorni/mese/anno per una data di nascita)
** Numero/quantità di valori di input (esempio: lunghezza password)
** Insiemi di valori di input (esempio: genere)
Definizione di casi di test che coprano le classi:
* Intervallo di valori di input: se una condizione di ingresso specifica un intervallo di valori ammissibili per un determinato parametro di input si identificano:
** Una classe di equivalenza valida per i valori compresi all’interno dell’intervallo.
** Due classi di equivalenza non valide: una per i valori inferiori all’estremo di variazione minimo e l’altra per i valori superiori all’estremo di variazione massimo.
Esempio di copertura delle classi di equivalenza per una data di nascita. :
| Campo | Classe valida | Classe non valida (inferiore) | Classe non valida (superiore) |
| Data di nascita (gg/mm/aaaa) | 1 ≤ gg ≤ 31 1 ≤ mm ≤ 12 1900 ≤ aaaa ≤ 2006 | gg < 1 mm < 1 aaaa < 1900 | gg > 31 mm > 12 aaaa > 2006 |
* Numero/quantità di valori di input: se una condizione di ingresso specifica un numero/quantità di valori ammissibili per un determinato parametro di input si identificano:
** Una classe di equivalenza valida per un numero/quantità compreso fra il minimo ed il massimo specificati.
** Due classi di equivalenza non valide: una per un numero di valori inferiori al minimo, l’altra per un numero di valori superiori al massimo.
Esempio di copertura delle classi di equivalenza per la lunghezza di una password. :
| Campo | Classe valida | Classe non valida (inferiore) | Classe non valida (superiore) |
| Password | 8 caratteri ≤ lunghezza ≤ 20 caratteri | lunghezza < 8 caratteri | lunghezza > 20 caratteri |
* Insiemi di valori di input: se una condizione di ingresso specifica un insieme di valori ammissibili per un determinato parametro di input si identificano:
** Una classe di equivalenza valida per ogni gruppo di elementi dell’insieme i cui elementi è ragionevole pensare siano trattati in modo analogo (i gruppi possono essere formati anche da un solo elemento).
** Una classe di equivalenza non valida per un elemento non appartenente all’insieme.
Esempio di copertura delle classi di equivalenza per la scelta del genere. :
| Campo | Classe valida | Classe non valida |
| Genere | "M", "F", "Altro" | "S" |
A partire dalle classi identificate occorre progettare un numero di casi di test sufficiente a coprire tutte le classi di equivalenza valide, facendo in modo che ciascun caso di test copra il maggior numero possibile di classi valide e tanti casi di test quante sono le classi di equivalenza non valide in modo tale che ciascun caso di test copra una ed una sola classe non valida.
Esempio di casi di test per una data di nascita :
| Caso 1 | 22/10/1998 | valido |
| Caso 2 | 36/10/1998 | non valido (gg > 31) |
| Caso 3 | -5/10/1998 | non valido (gg < 1) |
| Caso 4 | 22/18/1998 | non valido (mm > 12) |
| Caso 5 | 22/-20/1998 | non valido (mm< 1) |
| Caso 6 | 22/10/2018 | non valido (aaaa > 2006) |
| Caso 7 | 22/10/1880 | non valido (aaaa < 1900) |