Un tema ricorrente che ho incontrato nella mia carriera è essere il nuovo sviluppatore per arrivare in un team, e avere rapidamente una sfiducia intrinseca nei confronti delle unità di test esistenti e di integrazione.
Durante l'intervista ti viene detto dal management che "sostengono strongmente i test unitari" e che lo incoraggiano apertamente. Lo fanno, ma tutto ciò che riguarda gli stessi test è semplicemente sbagliato. Come il fatto che rivendicano una copertura del 100% quando c'è una copertura del test di integrazione del 100% ma meno del 10% di copertura del test dell'unità ripetibile. Alcuni altri problemi che ho trovato:
-
Nessuna chiara indicazione tra cosa è un test unitario e cosa è un test di integrazione. I test di unità e integrazione sono mescolati insieme nella stessa classe.
-
Test di integrazione con dipendenze esplicite non dichiarate su dati dinamici molto specifici su un database di un ambiente specifico.
-
Test di integrazione non transazionale, fondamentalmente test che possono o non si preoccupano di ripulire se stessi, a volte richiedono "scrubbing" manuale del database per rendere ripetibile il test.
-
Non c'è nessun tipo di derisione e il codice dell'applicazione richiede un'importante revisione solo per il mocking. In altre parole, progettazione senza test in mente.
-
Nessuna convenzione di denominazione chiara per esaminare rapidamente il nome di un test e determinare approssimativamente quali test vengono eseguiti.
Questo non vuol dire che TUTTI i test sono inutili o cattivi, una buona parte di questi sono abbastanza buoni e degni di essere mantenuti, ma a volte è come cercare l'oro. Eviterei volutamente di eseguire i test solo perché avevo paura di rovinare il database per i miei casi di test black-box.
Questo mi ha essenzialmente dato una sfiducia intrinseca di test di unità e integrazione che non ho personalmente scritto o recensito in alcun modo. Ad un certo livello, se non hai fiducia nella qualità della tua suite di test, allora non apporta alcun valore alla squadra o al progetto.
Che cosa fai quando ti trovi in questa situazione? Quale pensi che il miglior piano di attacco sarebbe quello di affrontare qualcosa di simile?
Tutti i test dovrebbero essere sottoposti a refactoring in uno sforzo monumentale che copre tutte le versioni? Dovresti semplicemente abbandonare l'idea che questo progetto legacy possa avere un giorno di copertura del test unitario?