Definisci identico
Avere una fonte identica o una fonte vicina non lo rende identico al codice.
Sicuramente in questo momento queste due sezioni funzionano in modo simile, hanno definizioni simili, e alcuni controllori taglia / incolla riportano come copie. Questo è solo un odore di codice.
- Dovrei fare qualcosa a riguardo? Probabilmente.
- Cosa dovrei fare al riguardo? Fai domande.
Fai domande come:
- Queste due parti di codice hanno lo stesso scopo?
- Questi pezzi di codice vivono nello stesso livello di cesoiamento (cambiano allo stesso tempo)?
- C'è una ragione per cui la parte di codice in un sistema cambierà, e non l'altro pezzo di codice?
- Il repository del codice sorgente mostra evidenza di modifiche simili?
- Esiste un limite di velocità / risorse per il funzionamento di un pezzo di codice in cui l'altro non lo è? (es. cellulare o mainframe)
- I test sono quasi identici?
Se le risposte sono per lo più sono simili allora, sì probabilmente (quasi) codice identico.
Quindi chiedi:
- Ci sono altre istanze di questa duplicazione?
- Questo codice è stabile e probabilmente rimarrà tale?
- Quanto è malleabile il codice attualmente?
- È ragionevole aggiungere un'altra dipendenza a ciascun progetto?
- Chi è responsabile della manutenzione di questa nuova libreria?
- Chi è sottomesso ai capricci di un manutentore esterno?
- La deduplicazione di questo codice renderà meno leggibile qualsiasi progetto?
- La deduplicazione di questo codice renderà qualsiasi progetto meno modificabile?
Ci sono altre domande che potresti porre in base al contesto, ma sono utili per iniziare la conversazione.
La conversazione è la parte importante qui. Lo sviluppo di software è uno sport di squadra, in un gioco che termina solo quando il software viene abbandonato. La parte importante è lavorare con quella squadra per migliorare il codice. Anche se sei un unico sviluppatore, il tuo team include anche chiunque scriva un plug-in per il tuo sistema, qualsiasi utente del sistema, amministratore del sistema, ecc ...
Potrebbe non avere senso discutere la deduplicazione del codice con un utente del sistema, ma i loro bisogni modellano ciò che il sistema deve essere e rivelano le forze che agiscono su questo codice "duplicato". Con questa conoscenza puoi vedere le ramificazioni della deduplicazione.
- Se si esegue la deduplicazione di questo codice, solo per un altro membro del team lo si dividerà di nuovo perché qui deve avvenire una modifica, ma non altrove. Hai creato un ostacolo che ha reso il lavoro fuori dal nulla.
- D'altra parte, se la deduplicazione di questo codice consente a quell'altro membro del team di correggere facilmente un bug in quell'area. Hai rimosso gli ostacoli a tale lavoro.