Non esiste alcun modo per assicurarsi che i casi di test siano corretti, se non concentrandosi molto bene durante la loro creazione: comprendere i requisiti, comprendere il codice e assicurarsi che siano d'accordo. Il punto di avere una suite di test è che devi farlo solo una volta, e da quel momento in poi puoi semplicemente rieseguire i test e verificarne il superamento, mentre senza una suite di test dovresti concentrarti molto duramente tutto il tempo , ovvero ogni volta che fai qualcosa alla tua base di codice. Ma il problema fondamentale di dover assicurarsi di fare la cosa giusta in primo luogo rimane: i computer semplicemente non sono abbastanza intelligenti da sollevarci da quel compito.
Pertanto, (1) se la suite di test è incompleta, non esiste un modo semplice per vederlo. L'analisi della copertura del codice può dimostrare che alcune righe di codice non vengono mai eseguite, ovvero che la suite è in qualche modo carente, ma non quanto grave sia tale carenza e non può mai dimostrare che sia sufficiente. Anche con una copertura del codice del 100% non hai alcuna garanzia che tutti gli stati rilevantidel sistema viene esercitato e la copertura statale completa è inaccettabile per qualsiasi sistema realistico a causa del numero combinatorio di stati che potrebbero esistere. Una buona tecnica per assicurarsi che il test case sia almeno corretto per verificare ciò che si desidera controllare è scrivere il test, verificare che non abbia effettivamente esito positivo, scrivere / modificare il codice e quindi verificare che ora passi. Da qui l'entusiasmo per lo sviluppo test-driven: ti permette di essere abbastanza sicuro che un singolo test fa la cosa giusta, e se crei l'intera base di codice in quel modo, puoi ottenere un livello di sicurezza simile anche in un sistema di grandi dimensioni.
(2) Una suite di test diventa normalmente insufficiente ogni volta che cambiano i requisiti - non devi indovinare. Se il cliente desidera che un determinato comportamento venga modificato e che i test abbiano esito positivo sia prima che dopo la modifica, chiaramente non esercitavano quel particolare rapporto input / output.
Per quanto riguarda i sistemi legacy che non hanno copertura di test o dove non si conosce la copertura, non esiste una prova formale, ma (consulenza dei genitori: segue l'opinione personale!) Parlando per esperienza, è estremamente probabile che i test non sono adeguati. Quando i test sono visti come un'attività post-pratica, facoltativa, che migliora la qualità ma non proprio necessaria, tende ad essere incompleta e non sistematica perché l'incentivo per assicurarsi che i test stiano al passo con la base di codici non è giusto ci sono.