Quali sono i buoni approcci per ripulire i vecchi progetti?


11

Ho del software che ho scritto circa 2 anni fa e ha bisogno di alcune funzionalità aggiunte ad esso. Mi sono reso conto che è in un disastro terribile e ho il bisogno di spostare tutto, riordinare, ecc. Ho letto l' articolo Joel on Software sul non ricominciare , quindi qual è il modo migliore per andare avanti?


Con quali decisioni di allora non sei d'accordo oggi?

Risposte:


21

Hai tre opzioni di base:

  1. Se l'app è molto piccola e un vero casino , ricominciare potrebbe essere la soluzione migliore.

  2. Refactor .

  3. Vivi con il caos e modifica le funzionalità aggiuntive.

In genere, l'opzione (2) è la soluzione migliore.

La quantità di refactoring effettivamente effettuata dipenderà dalla risorsa inserita rispetto al valore ottenuto. Le domande da porre includeranno:

  1. A che ora / budget è disponibile?
  2. Quante modifiche prevedi in futuro?
  3. Chi altro vedrà il codice? (ad es. il codice disordinato danneggerà la tua reputazione?)
  4. Qualcun altro dovrebbe mantenere il codice?
  5. Quali strumenti di refactoring sono disponibili per aiutarti?
  6. Qual è la tua esperienza di refactoring?
  7. Quale esperienza acquisirai dal refactoring?
  8. Che tipo di refactoring ti darà i maggiori benefici?
  9. Quali test automatici esistono già? Hai bisogno di essere scritto?
  10. Quanti test manuali saranno richiesti?
  11. Come ti sentirai se lasci il codice così com'è?

Nella mia esperienza, è molto facile entrare nel caos giusto durante una sessione di refactoring. Le lezioni più importanti che ho imparato sono:

  1. Fai una cosa alla volta.
  2. Fai piccoli passi.
  3. Fai buon uso del controllo del codice sorgente (fai il check-in frequentemente + includi commenti).
  4. Utilizzare strumenti di refactoring automatizzati.
  5. Conosci l'IDE.

6
Vorrei anche aggiungere per evitare di avere uno stato interrotto per troppo tempo. Ho visto molti progetti open source morire rapidamente durante un'ambiziosa riscrittura / riprogettazione. Un progetto non funzionale uccide rapidamente la motivazione.
LennyProgrammers,

2
Assolutamente. Per quanto riguarda la riscrittura / i progetti ambiziosi, ho commesso questo fallo più di una volta. Ora provo a fare le cose in piccoli passi. Ho aggiunto questo suggerimento alla mia risposta.
Kramii,

Aggiungo anche che non dovresti refactificare tutto ciò che non ha un test scritto per questo. Resisti alla tentazione di sistemare tutto e concentrati solo sulle aree che devono essere modificate per aggiungere le nuove funzionalità. Una volta che lo hai fatto, decidi quanti sforzi aggiuntivi vuoi fare per refactoring il resto.
TMN

1
@TMN: idealmente sì. Tuttavia, non è sempre necessario un test automatico. (1) Se il codice è stato sviluppato senza test automatizzati, potrebbe non essere facile / possibile riadattare i test unitari fino a quando non si è già eseguito un refactoring (2) Può essere costoso scrivere test prima di apportare modifiche localizzate e banali. (3) Gli strumenti di refactoring automatizzato + le funzionalità IDE possono aiutare a prevenire la rottura del codice a seguito del refactoring.
Kramii,

2
Aggiungerei - nel tuo controllo del codice sorgente, metti tutto il refactoring su un RAMO separato. Questo aiuta a fare un confronto sensato, graduale e con grandi blocchi. Questo può essere prezioso se le cose si trasformano in crema pasticcera (CHE VERRANNO).
Velocemente

5

Bene, almeno il refactor è sufficiente affinché la nuova funzionalità possa essere aggiunta in modo sicuro. Cioè non peggiorare le cose. Il resto dipende dalla motivazione, dal budget e dai limiti di tempo, ma attenzione a ripulire completamente un pasticcio può richiedere più tempo rispetto alla sua creazione originale.


1
Questa è ovviamente la famosa regola Boyscout: lasciare sempre il codice in uno stato migliore di quello che hai trovato.
Jörg W Mittag,

2

Questa volta, mentre risolvi le cose, assicurati di documentarlo. La prossima volta che vedrai il codice sarà molto più facile ricordare le cose.


1

Dipende, costerà più tempo a mantenerlo perché è un disastro, o a riscriverlo in modo che non sia un disordine e facilmente gestibile. Lo sto attraversando personalmente in questo momento, sto convertendo un sito intranet in ASP.Net MVC3 perché il vecchio codice era un mucchio di schifezze (che ho scritto) perché doveva essere usa e getta (sì, dovrei sapere meglio ). Il vecchio mucchio di schifezze è ancora qui, ed è un mal di testa che aggiunge funzionalità e corregge bug. MVC è bello e rende davvero piacevole lavorarci su, quindi sta ricevendo una riscrittura.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.