C'è un modulo nel nostro equipaggiamento per le telecomunicazioni che è scritto in C. Penso che il codice in questo modulo abbia un cattivo odore perché ha un numero di sintomi:
-
Quando vengono aggiunte nuove funzionalità a questo modulo, alcune funzioni originali non funzionano. E alcuni problemi strani sono stati finalmente orientati al buffer overflow di questo modulo.
-
È difficile aggiungere nuovo codice al modulo. Sebbene i test unitari e i test di integrazione coprano il nuovo codice, errori e difetti nascosti nel codice originale vengono alla superficie.
-
Attraverso la revisione del codice, abbiamo riscontrato che la qualità del codice è estremamente negativa. Ma il modulo è stato testato per molti round, gli errori nella parte nascosta del codice sono stati trovati dagli ingegneri del controllo qualità. Altri problemi nascosti più in profondità erano difficili da trovare. così come un virus nel corpo. (facile da portare a fraintendimenti, cancellalo)
Riassumiamo lo status quo in questi motivi:
-
Il codice originale è corrotto a causa del monitoraggio del processo, in effetti, molti autotest vengono ignorati o eseguiti parzialmente.
-
Il primo programmatore di questo modulo era la mancanza della capacità di programmazione e il capo squadra non ha trovato il problema e rischiava in tempo.
-
Molti approcci di miglioramento rimangono nella fase del piano a causa del sospetto del leader del team.
Il progetto è arrivato a una nuova versione. Alcuni team leader vogliono cambiare questa situazione e abbiamo discusso della procedura molte volte. Tutti hanno accettato di rivedere il modulo, ma dobbiamo decidere tra:
- riscrivere il modulo. Significa buttare tutto il codice del modulo nel cestino e riscrivere il codice senza cambiarne l'interfaccia.
- refactoring del modulo. Questo significa un passo alla volta. abbiamo bisogno di conservare tutto il codice all'inizio e creare una solida serie di test per il codice. Quindi analizziamo il codice e ne rielaboriamo un piccolo frammento, basandoci sui test per dirci se introduciamo un bug. Questo processo viene ripetuto fino al completamento del refactoring.
Sono d'accordo con la riscrittura perché abbiamo già alcune esperienze di riscrittura nei nostri sistemi che hanno dimostrato di essere la scelta migliore. Il project manager desidera refactoring del modulo in considerazione del tempo limitato disponibile per completare la progettazione dettagliata, la codifica, la revisione del codice, i test unitari e i test di integrazione che sono di tre mesi. Pensa che le scale temporali siano troppo strette per fare una riscrittura completa.
Questo codice dovrebbe essere riscritto o refactored?
EDIT:
Come Joel ha detto in Cose che non dovresti mai fare, parte I
The idea that new code is better than old is patently absurd.
Sono d'accordo con questo punto di vista. Ma ho alcuni enigmi che alcuni casi di riscrittura nel nostro progetto si sono rivelati una scelta saggia. Forse si basa sul nuovo programmatore che è più eccezionale del programmatore precedente o il test è più sufficiente.