Processing math: 100%

Criterio di copertura delle condizioni

Un test  T soddisfa il criterio di copertura delle condizioni se e solo se ogni singola condizione (effettiva) viene resa sia vera che falsa in corrispondenza di almeno un caso di test  tT.
Similmente ai criteri precedenti, la metrica è quindi la percentuale delle condizioni che sono state rese sia vere che false su quelle per cui è possibile farlo.

Sebbene simile, si tratta di un criterio diverso da quello di copertura delle decisioni: in caso di condizioni composte, come per esempio x != 0 && y < 3, la copertura delle decisioni imporrebbe che l’intera condizione sia resa sia vera che falsa, mentre la copertura delle condizioni richiede di rendere vere e false le singole condizioni atomiche x != 0 e y < 3 in almeno un caso di test.
Come vedremo nell’esempio, ciò non impone quindi di seguire tutti i percorsi sul diagramma di flusso e fa sì che questo criterio non implica il soddisfacimento di nessuno dei precedenti.

Esempio 3: copertura delle condizioni
Pseudocodice Diagramma di flusso di esecuzione
01 void main(){ 02 float x, y; 03 read(x); 04 read(y); 05 if (x != 0 || y > 0) 06 y = y / x; 07 else 08 y = (y + 2) / x 09 y = y / x; 10 write(x); 11 write(y); 12 }

Esempio criterio decisioni

Nell’esempio sopra, il test 0,5,5,5 soddisfa il criterio di copertura della condizioni \ (x != 0 è falsificato da 0,5 e verificato da 5,5, mentre y > 0 è verificato da 0,5 e falsificato da 5,5), ma la decisione è sempre vera.

Sono infatti presenti anomalie alla riga 6 (possibile divisione per zero) e alla riga 8 (overflow e divisione per zero), ma i comandi contenuti nella riga 8 non sono coperti. In questo caso più che mai, quindi, la copertura delle condizioni non garantisce la correttezza del programma.