Criterio di copertura delle decisioni

Un test \(\ T\) soddisfa il criterio di copertura delle decisioni se e solo se ogni decisione (effettiva) viene resa sia vera che falsa in corrispondenza di almeno un caso di test \(t \in T\).
La metrica è quindi la frazione delle decisioni totali possibili presenti nel codice che sono state rese sia vere che false nel test.

Dovendo attraversare ogni possibile flusso di controllo il criterio di copertura delle decisioni implica il criterio di copertura dei comandi. Estraendo il codice in un diagramma di flusso, infatti, è possibile coprire tutte le decisioni se e solo se ogni arco (e quindi ogni nodo) viene attraversato. Non è invece vero l’inverso.

Esempio 2: copertura delle decisioni
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          x = x + 10;
07      else
08          y = y / x
09      write(x);
10      write(y);
11  }

Esempio criterio decisioni

Dall’esempio sopra, un test che soddisfi il suddetto criterio potrebbe includere \({ \langle 3, \, 7 \rangle, \, \langle 3, \, -2 \rangle }\). Nonostante sia un criterio “migliore” del precedente, la copertura delle decisioni non garantisce la correttezza del programma: nell’esempio il caso \(\langle 0, \, 5 \rangle\) eseguirebbe comunque una divisione per zero.