Come testare i sistemi legacy di grandi dimensioni? [duplicare]

6

Quando si lavora in sistemi legacy di grandi dimensioni (sistemi di grandi dimensioni senza test di unità in assoluto), spesso mi imbatto in persone che dicono di utilizzare il test dell'unità come strumento contro possibili bug. Mi chiedo se qualcuno l'abbia provato su sistemi di grandi dimensioni senza alcun test unitario.

Ovviamente è facile dire che il test delle unità aiuta, ma nei sistemi di grandi dimensioni può richiedere molto tempo. Possono essere necessari mesi, se non anni, per testare completamente ciascuna parte dell'applicazione.

Quando ti viene chiesto di realizzare una funzionalità che è la modifica delle funzionalità esistenti o l'aggiunta di nuove funzionalità all'applicazione, come faresti? Ovviamente ci saranno molti casi in cui il codice in classi diverse apparirà simile e si vorrebbe ricalcolare quelle classi che senza un corretto test unitario possono e molto probabilmente apriranno una lattina di worm.

Quindi, come andresti a testare le grandi applicazioni? E quali altre misure useresti per ridurre i possibili bug dalla tua codifica (ovviamente alcuni bug rimarranno probabilmente comunque)?

    
posta minusSeven 23.05.2012 - 11:12
fonte

1 risposta

8

Coprire il codice legacy con i test unitari è un processo lungo, difficile e graduale. Ma è fattibile, ed è un must assoluto se si sta mantenendo un prodotto con una lunga durata di vita attesa (vale a dire più di un anno - si noti che la durata della maggior parte del progetto estende significativamente la durata originariamente pianificata).

Quando ho aderito al nostro progetto corrente vicino a 3 anni fa, esistevano meno di 50 casi di test unitari e la copertura era inferiore allo 0,5%. Verso la fine dello scorso anno, abbiamo avuto oltre 2600 test unitari e la copertura era superiore al 36%. (Da allora lo sviluppo è stato in gran parte in fase di stallo.) Nello stesso tempo, la dimensione del codice è scesa da 106 a 67 KLOC e il debito tecnico (misurato da Sonar) da oltre $ 513K a $ 213K - mentre sono state aggiunte anche nuove funzionalità.

Quindi sì, è possibile. Ma solo con una gestione che supporti il miglioramento della qualità del codice e la manutenibilità a lungo termine, ed è disposta a dedicare tempo e risorse significativi.

Se hai una tale gestione, il mio primo consiglio è: corri, non camminare, per comprare Lavorare Efficacemente con il codice legacy di Michael Feathers.

Quindi inizia ad aggiungere test unitari. La tattica più semplice consiste nell'aggiungere test unitari prima che sia necessario toccare qualsiasi parte del codice, per coprire le parti che cambiano in misura ragionevole. A volte basta aggiungere un singolo test alla volta per coprire un semplice cambiamento in una classe enorme. A volte hai più tempo, quindi puoi costruire una suite di test più completa per coprire completamente un metodo più grande, o anche molti di loro. Continuate ad aggiungere test unitari: le piccole modifiche si sommano a somme sempre maggiori nel lungo termine.

    
risposta data 23.05.2012 - 11:43
fonte