Sono un grande sostenitore della regola del boy scout :
Controlla sempre un modulo in modo più pulito rispetto a quando lo hai verificato. "Indipendentemente da chi fosse l'autore originale, e se avessimo sempre fatto qualche sforzo, non importa quanto piccolo, per migliorare il modulo. Quale sarebbe il risultato? Penso che se noi tutti seguivano quella semplice regola, vedremmo la fine del continuo deterioramento dei nostri sistemi software. Invece, i nostri sistemi sarebbero gradualmente migliorati man mano che si evolvevano. Vedremmo anche i team che si occupano del sistema nel suo insieme, piuttosto di semplici persone che si prendono cura della propria piccola piccola parte.
Sono anche un grande sostenitore dell'idea correlata del refactoring opportunistico :
Sebbene ci siano posti per alcuni sforzi di refactoring programmati, preferisco incoraggiare il refactoring come attività opportunistica, eseguita ogni volta e ovunque il codice debba essere ripulito, da chiunque. Ciò significa che in qualsiasi momento qualcuno vede un codice che non è così chiaro come dovrebbe essere, dovrebbe cogliere l'occasione per risolverlo proprio lì e poi - o almeno entro pochi minuti
Si noti in particolare il seguente estratto dell'articolo di refactoring:
Sono diffidente nei confronti di eventuali pratiche di sviluppo che causano attrito per il refactoring opportunistico ... Il mio senso è che la maggior parte dei team non fa abbastanza refactoring, quindi è importante prestare attenzione a tutto ciò che scoraggia le persone dal farlo. Per aiutarti a risolvere questo problema, sii consapevole di ogni volta che ti senti scoraggiato dal fare un piccolo refactoring, uno che sei sicuro richiederà solo un minuto o due. Qualsiasi barriera di questo tipo è un odore che dovrebbe stimolare una conversazione. Quindi prendi nota dello scoraggiamento e portalo con la squadra. Almeno dovrebbe essere discusso durante la prossima retrospettiva.
Dove lavoro, c'è una pratica di sviluppo che causa un forte attrito: Code Review (CR). Ogni volta che cambio qualcosa che non rientra nell'ambito del mio "incarico", mi viene rimproverato dai miei revisori che sto rendendo più difficile rivedere la modifica. Ciò è particolarmente vero quando si tratta di refactoring, poiché rende difficile il confronto diff "riga per riga". Questo approccio è lo standard qui, il che significa che il refactoring opportunistico viene fatto raramente e solo il refactoring "pianificato" (che di solito è troppo piccolo, troppo tardi) ha luogo, se non del tutto.
Dichiaro che ne valgono i vantaggi e che 3 revisori lavoreranno un po 'più duramente (per capire effettivamente il codice prima e dopo, piuttosto che guardare la portata ristretta di quali linee sono cambiate - la recensione stessa sarebbe migliore solo per quello ) in modo che i prossimi 100 sviluppatori possano leggere e mantenere il codice. Quando presento questo argomento, i miei revisori affermano di non avere problemi con il mio refactoring, purché non si trovi nello stesso CR. Comunque sostengo che questo è un mito:
(1) La maggior parte delle volte ti rendi conto di cosa e come vuoi rifattorizzare quando sei nel bel mezzo del tuo incarico. Come afferma Martin Fowler:
Man mano che aggiungi la funzionalità, ti rendi conto che un po 'di codice che stai aggiungendo contiene una duplicazione con un po' di codice esistente, quindi devi riformattare il codice esistente per ripulire le cose ... Potresti ottenere qualcosa che funzioni, ma ti rendi conto che sarebbe meglio se l'interazione con le classi esistenti è stata modificata. Cogli l'occasione per farlo prima di considerarti finito.
(2) Nessuno ti guarderà favorevolmente rilasciando CR di "refactoring" che non avresti dovuto fare. Un CR ha un certo overhead e il tuo manager non vuole che "sprechi il tuo tempo" nel refactoring. Quando è associato alla modifica che dovresti fare, questo problema è ridotto al minimo.
Il problema è esacerbato da Resharper, poiché ogni nuovo file che aggiungo alla modifica (e non posso sapere in anticipo esattamente quali file finirebbero per essere modificati) è solitamente disseminato di errori e suggerimenti - molti dei quali sono esatti e totalmente meritevoli fissaggio.
Il risultato finale è che vedo un codice orribile e lo lascio lì. Ironia della sorte, ritengo che la correzione di tale codice non solo non migliorerà la mia posizione, ma in realtà li abbasserà e mi dipingerà come il ragazzo "sfocato" che perde tempo a sistemare le cose a cui nessuno importa invece di fare il suo lavoro. Mi dispiace perché disprezzo davvero il codice cattivo e non sopporto di guardarlo, figuriamoci chiamarlo dai miei metodi!
Qualche idea su come posso porre rimedio a questa situazione?
your manager doesn't want you to "waste your time" on refactoring