Non c'è davvero alcun modo per rendere sicuro i casi di test siano corretti, eccetto concentrarsi molto bene durante la loro creazione - capire il requisito, capire il codice e accertarsi che siano d'accordo. Il punto di avere una suite di test è che devi farlo solo una volta, e da quel momento puoi solo rieseguire i test e controllare che passino, mentre senza una suite di test dovresti concentrarti molto duramente sempre , cioè ogni volta che fai qualcosa per il tuo codice base. Ma il problema fondamentale di dover fare in modo che tu stia facendo la cosa giusta in primo luogo rimane - i computer semplicemente non sono abbastanza intelligenti da sollevarci da questo compito.
Pertanto, (1) se la tua suite di test è incompleta, non c'è un modo semplice per vederlo. L'analisi della copertura del codice può dimostrare che alcune linee di codice non vengono mai eseguite, cioè che la suite è carente in qualche modo, ma non quanto sia grave tale carenza, e non può mai dimostrare che sia sufficiente. Anche con una copertura del 100% del codice non si ha alcuna garanzia che tutti gli stati del sistema siano pertinenti, e la copertura dello stato completa è inammissibile per qualsiasi sistema realistico a causa del numero combinatorio di stati che potrebbero esistere. Una buona tecnica per assicurarsi che il tuo caso sia almeno corretto per controllare che la cosa che vuoi controllare sia scrivere il test, verificare che funzioni effettivamente, scrivere / modificare il codice e quindi verificare che ora passi. Da qui l'entusiasmo per lo sviluppo basato sui test: ti permette di essere abbastanza sicuro che un singolo test fa la cosa giusta, e se crei l'intera base di codice in questo modo, puoi ottenere un livello di confidenza 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 modificare determinati comportamenti e i test avranno esito positivo sia prima che dopo la modifica, chiaramente non eserciteranno quella particolare relazione di input / output.
Per quanto riguarda i sistemi legacy che non hanno una copertura di test, o dove non si conosce la copertura, non c'è una prova formale, ma (consultivo dei genitori: l'opinione personale segue!) parlando per esperienza è schiacciante che i test sono non adeguati. Quando il test viene visto come un'attività facoltativa, facoltativa, che migliora la qualità, ma non è realmente necessaria, tende ad essere incompleta e non sistematica perché l'incentivo per assicurarsi che i test tengano aggiornato con il codice base non è ci sono.