Sto lavorando su una base di codice legacy piccola e media e quando lavoro su un ticket mi imbatterò in codice che dovrebbe essere ripulito o che ho bisogno di ripulire solo per essere in grado di comprendere il seguito dell'applicazione.
Un esempio reale è:
if( !a && b ){
doSomething1();
doSomething2();
doSomething3();
doSomething4();
doSomething5();
}else if( a ){
doSomething1();
doSomething2();
doSomething3();
doSomething4();
doSomething5();
}else if( !b && ( a || c ) ){
doSomething1();
doSomething2();
doSomething3();
doSomething4();
doSomething5();
}
Un altro sta correggendo gli errori di battitura e Engrish nei commenti e nella documentazione su una dozzina di file sorgente.
Tuttavia, spesso questa pulizia non è correlata al problema principale e mi chiedo come sia meglio impegnare la pulizia. Per come la vedo io, ci sono tre opzioni:
- Prima della correzione: funziona in ordine cronologico poiché questo è l'ordine in cui si verificano ma se si rompono qualcosa complicano la correzione e rende più difficile diffondere la correzione con ciò che era in produzione. Introduce anche un commit aggiuntivo che è noise.
- Con la correzione: ma ciò oscura la sostituzione effettiva del codice difettoso con i file in cui
findGeoragphy
era corretta afindGeography
. - Dopo la correzione: questo richiede la rimozione e la pulizia che hai fatto per aiutarti a capire il codice e poi ripetere la correzione, commettere la correzione e poi tornare indietro e ripetere la pulizia. Ciò consente la più pulita diff per il codice difettoso, ma duplica lo sforzo e può portare a commit spurie pure.
tl; dr: Quindi, qual è il metodo migliore per eseguire il codice di pulizia?
Contesto: non abbiamo test unitari e proventi dello sviluppo eseguendo le modifiche e osservandole con occhio e gettandole oltre il muro al QA per convalidare le correzioni manuali della regressione. Inoltre, se non eseguiamo alcun tipo di pulizia, il codice diventa inintelligibile. So che questo è tutt'altro che ideale, ma questo è un vero sviluppo aziendale che mette il cibo sul mio tavolo e non la mia scelta.