Testing

Oltre ad essere un processo utile di per sé per il rilevamento di potenziali errori, l’analisi statica può anche contribuire a guidare l’attività di testing.
Per capire come, osserviamo che a partire dall’analisi statica è possibile fare le seguenti osservazioni:

  • perché si presenti un malfunzionamento dovuto a una anomalia in una definizione, deve esserci un uso che si serva del valore assegnato;
  • un ciclo dovrebbe essere ripetuto (di nuovo) se verrà usato un valore definito alla iterazione precedente.

L’analisi statica può quindi aiutare a selezionare i casi di test basandosi sulle sequenze definizione-uso delle variabili, costruendo cioè dei nuovi criteri di copertura.

Terminologia

Per rendere più scorrevole la spiegazione dei prossimi argomenti introduciamo innanzitutto un po’ di terminologia.

Dato un nodo \(i\) del diagramma di flusso (un comando/riga del programma), chiamiamo \(\operatorname{def}(i)\) l’insieme delle variabili definite in \(\bf{i}\).

Data invece una variabile \(x\) e un nodo \(i\), chiamiamo \(\operatorname{du}(x, \, i)\) l’insieme dei nodi \(j\) tali che:

  • \(x \in \operatorname{def}(i)\), ovvero la variabile \(x\) è definita in \(i\);
  • \(x\) è usata nel nodo \(j\);
  • esiste un cammino da \(i\) a \(j\) libero da definizioni di \(x\), ovvero che se seguito non sovrascrive il valore di \(x\).

Si tratta cioè dell’insieme di nodi \(\bf{j}\) che potrebbero usare il valore di \(\bf{x}\) definito in \(\bf{i}\).