Nel famoso (o famigerato) articolo di Joel Spolsky Thins che non dovresti mai fare, parte I , egli fa il caso che fare una riscrittura è sempre una mossa sbagliata perché:
- Ti mette automaticamente dietro (i tuoi concorrenti / programma / ecc.)
- Probabilmente il codice non è così male come credono i programmatori (tutto ciò che qualcun altro ha scritto è sempre un casino, anche se alcuni sono pasticci più grandi di altri - e anche allora)
- Probabilmente è più facile / più veloce / meno costoso risolvere ciò che c'è di veramente sbagliato in esso che riscrivere da zero.
- Nella riscrittura da zero, probabilmente stai per reintrodurre bug corretti nelle versioni precedenti del codice originale.
Invece, consiglia di correggere cosa c'è di sbagliato nel codice.
Presumo che questo sia un buon riassunto del suo post, e postulerò che è generalmente vero.
Sto cercando di raccogliere un insieme di regole / linee guida per il mio team, e uno di questi (basato sull'articolo di Joel) è
We don’t re-write ... ever!
- But we can refactor large portions of the code.
(this exception takes care of ugly/problematic code issues)
Una domanda che è saltata fuori è "Che dire di quando la tecnologia cambia e non puoi più ottenere il supporto per le versioni precedenti?". Questo è quello che penso come Sisyphean Upgrade path.
Ad esempio, ricordo quando Oracle si è trasferito da SQL * Forms 2.x / 3.x a Forms 6i e oltre, Forms che erano originariamente sviluppati nel vecchio formato .inp non erano più supportati con la versione corrente di Oracle e Oracle Forms.
Quindi hai avuto la possibilità di attaccare un database non supportato con strumenti non supportati o di riscrivere i moduli da zero (o convertiti con strumenti di terze parti e poi ripassati con un pettine a denti fini). Che chiamerò porting, in particolare quando si esegue una riga fedele per riga / funzione per traduzione di funzione nella nuova tecnologia e non si aggiunge alcuna funzionalità.
La regola è diventata:
We don’t re-write ... ever!
- But we can refactor large portions of the code.
- And we can port the code to a new platform when we *truly* have no other
choice.
(e in realtà voglio dire, non puoi nemmeno comprare la tua via d'uscita dal problema per 2 volte il costo del porting)
Ci sono altre eccezioni che mi sono perse?