Come faccio a sapere se ho una copertura di test unitaria sufficiente per rimuovere un test di integrazione?

15

Sto lavorando su un sistema legacy (con questo intendo che è stato scritto senza test). Abbiamo provato a testare alcuni sistemi scrivendo test di integrazione che testano funzionalità dall'esterno.

Questo mi dà un po 'di fiducia nel rifattorizzare parti del codice senza preoccuparmi di romperlo. Ma il problema è che questi test di integrazione richiedono una distribuzione (2+ minuti) e molti minuti per l'esecuzione. Inoltre, sono dolorosi da mantenere. Ognuno di essi copre migliaia di righe di codice e quando uno di essi si rompe può richiedere ore per il debug del perché.

Ho scritto molti test unitari per questi cambiamenti funzionali che ho fatto ultimamente, ma prima di impegnarmi faccio sempre una nuova distribuzione ed eseguo tutti i test di integrazione, solo per assicurarmi di non aver perso nulla. A questo punto conosco i miei test unitari e alcuni test di integrazione si sovrappongono a ciò che testano.

Come faccio a sapere quando i miei buoni test unitari coprono adeguatamente un cattivo test di integrazione in modo da poter cancellare quel test di integrazione?

    
posta Daniel Kaplan 30.01.2013 - 22:03
fonte

2 risposte

18

La metrica più semplice è chiedere, "quando è stata l'ultima volta che questo test di integrazione legittimamente non è riuscito?" Se è passato molto tempo (ci sono stati molti cambiamenti) da quando il test di integrazione è fallito, allora i test unitari stanno probabilmente facendo un buon lavoro. Se il test di integrazione è fallito di recente, c'è stato un difetto che non è stato rilevato dai test delle unità.

Preferirei in genere aumentare la robustezza dei test di integrazione, fino al punto in cui possono essere eseguiti in modo affidabile senza sorveglianza. Se impiegano molto tempo a correre, quindi eseguili durante la notte. Sono ancora preziosi anche se vengono eseguiti solo occasionalmente. Se questi test sono troppo fragili o richiedono un intervento manuale, potrebbe non valere il tempo speso per mantenerli in esecuzione, e potresti considerare di scartare quelli che hanno più successo.

    
risposta data 30.01.2013 - 22:10
fonte
7

I test di unità non sono il santo graal dei test, sono solo uno strumento di molti di quelli che dovrebbero essere usati per testare un codice base. Pertanto nessuna quantità di test unitari dovrebbe mai essere considerata sicura per sostituire altri test. Se hai un cattivo test di integrazione dovresti lavorare per renderlo un buon test di integrazione, non sostituirlo con qualcos'altro, che è come sostituire la tua porta d'ingresso con una recinzione perimetrale e un cancello.

    
risposta data 30.01.2013 - 22:48
fonte

Leggi altre domande sui tag