Rimozione del codice non raggiungibile
In un linguaggio a caratteri statici di principio, devi sempre sapere se il codice è effettivamente raggiungibile o meno: rimuovilo, compila, se non ci sono errori non è raggiungibile.
Sfortunatamente, non tutte le lingue sono tipizzate in modo statico e non tutte le lingue tipizzate in modo statico sono di principio. Le cose che potrebbero andare storte includono (1) riflessione e (2) sovraccarico senza principi.
Se usi un linguaggio dinamico o una lingua con una riflessione sufficientemente potente che il pezzo di codice sotto esame possa essere potenzialmente accessibile in fase di esecuzione tramite la riflessione, non puoi fare affidamento sul compilatore. Tali linguaggi includono Python, Ruby o Java.
Se si utilizza una lingua con sovraccarico senza principi, la semplice rimozione di un sovraccarico potrebbe semplicemente spostare la risoluzione di sovraccarico su un altro sovraccarico in modo silenzioso. Alcuni di questi linguaggi consentono di programmare un avvertimento / errore in fase di compilazione associato all'uso del codice, altrimenti non si può fare affidamento sul compilatore. Tali linguaggi includono Java (usa @Deprecated
) o C ++ (usa [[deprecated]]
o = delete
).
Quindi, a meno che tu non sia molto fortunato a lavorare con linguaggi rigorosi (Rust viene in mente), potresti davvero spararti ai piedi affidandoti al compilatore. E sfortunatamente le suite di test sono in genere incomplete, quindi non serve molto più.
Cue la prossima sezione ...
Rimozione del codice potenzialmente inutilizzato
Più probabilmente, il codice è effettivamente referenziato, tuttavia sospetti che in pratica i rami di codice che lo fanno riferimento non vengono mai presi.
In questo caso, indipendentemente dalla lingua, il codice è raggiungibile in modo dimostrabile e può essere utilizzata solo la strumentazione run-time.
In passato, ho utilizzato con successo un approccio a 3 fasi per la rimozione di tale codice:
- Su ogni ramo sospettato di NON essere preso, registra un avviso.
- Dopo un ciclo, genera un'eccezione / restituisce un errore dopo aver inserito il codice specifico.
- Dopo un altro ciclo, elimina il codice.
Che cos'è un ciclo? È il ciclo di utilizzo del codice. Ad esempio, per un'applicazione finanziaria mi aspetto un breve ciclo mensile (con gli stipendi pagati alla fine del mese) e un ciclo annuale lungo. In questo caso, devi attendere almeno un anno per verificare che non venga mai emesso alcun avviso per lo spazio pubblicitario di fine anno che potrebbe utilizzare percorsi di codice altrimenti non utilizzati.
Si spera che la maggior parte delle applicazioni abbia cicli più brevi.
Raccomando di inserire un commento TODO, con una data, consigliando su quando passare al passaggio successivo. E un promemoria nel tuo calendario.