Sto eseguendo il refactoring di un'enorme classe di codice legacy. Refactoring (presumo) sostiene questo:
- scrivere test per la classe legacy
- rifatti il diavolo fuori dalla classe
Problema: una volta effettuato il refactoring della classe, i miei test nel passaggio 1 dovranno essere modificati. Ad esempio, ciò che una volta era in un metodo legacy, ora potrebbe essere invece una classe separata. Quello che era un metodo ora potrebbe essere diversi metodi. L'intero panorama della classe legacy può essere cancellato in qualcosa di nuovo, quindi i test che scrivo nel passaggio 1 saranno quasi nulli. In sostanza aggiungerò il passaggio 3. riscrivere abbondantemente i miei test
Qual è lo scopo quindi di scrivere i test prima del refactor? Sembra più un esercizio accademico per creare più lavoro per me stesso. Sto scrivendo test per il metodo ora e sto imparando di più su come testare le cose e su come funziona il metodo legacy. Si può imparare leggendo semplicemente il codice legacy stesso, ma scrivere test è quasi come strofinarci il naso e documentare anche questa conoscenza temporanea in test separati. Quindi in questo modo non ho quasi altra scelta che imparare cosa sta facendo il codice. Ho detto temporaneo qui, perché rifarò il controllo del codice e tutta la mia documentazione e i test saranno nulli per una parte significativa, tranne che le mie conoscenze rimarranno e mi permetteranno di essere più fresco sul refactoring.
È questa la vera ragione per scrivere test prima di refactor - per aiutarmi a capire meglio il codice? Ci deve essere un altro motivo!
Spiega per favore!
Nota:
C'è questo post: ha senso scrivere test per il codice legacy quando non c'è tempo per un refactoring completo? ma dice "scrivi test prima di refactor", ma non dice "perché", o cosa fare se "scrivere test" sembra "lavoro occupato che verrà distrutto presto"