Sto refactoring una grande classe di codice legacy. Refactoring (presumo) sostiene questo:
- scrivi test per la classe precedente
- rifatta il diavolo 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 una classe separata. Qual era un metodo potrebbe essere ora diversi metodi. L'intero panorama della classe precedente può essere cancellato in qualcosa di nuovo, e quindi i test che scrivo nel passaggio 1 saranno quasi nulli. In sostanza aggiungerò Step 3. riscriviamo i miei test in modo profuso
Qual è lo scopo di scrivere test prima del refactoring? Sembra più un esercizio accademico di creare più lavoro per me stesso. Sto scrivendo i test per il metodo ora e sto imparando di più su come testare le cose e come funziona il metodo legacy. Si può imparare questo semplicemente leggendo il codice legacy stesso, ma scrivere test è quasi come sfiorarmi il naso e anche documentare questa conoscenza temporanea in test separati. Quindi in questo modo quasi non ho altra scelta che apprendere cosa sta facendo il codice. Ho detto temporaneamente qui, perché rifarò il diavolo dal codice e tutta la mia documentazione e le prove saranno nulle per una parte significativa, tranne la mia conoscenza rimarrà e mi consentirà di essere più fresco sul refactoring.
È questa la vera ragione per scrivere test prima di refactoring - per aiutarmi a capire meglio il codice? Deve esserci un'altra ragione!
Per favore, spiega!
Nota:
C'è questo post: Ha senso scrivere test per il codice legacy quando non c'è tempo per un completo refactoring? ma si dice" scrivi test prima del refactoring ", ma doesn dire "perché", o cosa fare se "scrivere test" sembra "un lavoro impegnativo che verrà presto distrutto"