Rimozione di codice non raggiungibile
In un linguaggio di principio staticamente tipizzato, dovresti sempre sapere se il codice è effettivamente raggiungibile o meno: rimuovilo, compila, se non c'è errore non è raggiungibile.
Sfortunatamente, non tutte le lingue sono tipicamente statiche e non tutte le lingue tipicamente statiche sono basate su principi. Le cose che potrebbero andare male includono (1) la riflessione e (2) un sovraccarico senza principi.
Se si utilizza un linguaggio dinamico o un linguaggio con una riflessione sufficientemente potente da consentire l'accesso al pezzo di codice esaminato in fase di esecuzione tramite reflection, non è possibile fare affidamento sul compilatore. Tali lingue includono Python, Ruby o Java.
Se si utilizza una lingua con sovraccarico senza principi, la semplice rimozione di un sovraccarico potrebbe semplicemente commutare la risoluzione del sovraccarico su un altro sovraccarico in silenzio. Alcune di queste lingue consentono di programmare un avviso / errore in fase di compilazione associato all'utilizzo del codice, altrimenti non è possibile fare affidamento sul compilatore. Tali linguaggi includono Java (uso @Deprecated
) o C ++ (uso [[deprecated]]
o = delete
).
Quindi, a meno che tu non sia molto fortunato a lavorare con linguaggi rigorosi (mi viene in mente Rust), potresti davvero spararti al piede fidandoti del compilatore. E sfortunatamente le suite di test sono generalmente incomplete, quindi non c'è molto altro aiuto.
Indica la prossima sezione ...
Rimozione di codice potenzialmente inutilizzato
Più probabilmente, al codice viene effettivamente fatto riferimento, tuttavia si sospetta che in pratica i rami del codice che fanno riferimento non vengano mai presi.
In questo caso, indipendentemente dalla lingua, il codice è raggiungibile in modo dimostrabile e può essere utilizzata solo la strumentazione di runtime.
In passato, ho usato con successo un approccio in 3 fasi per rimuovere tale codice:
- Su ogni ramo sospettato di NON essere preso, registra un avviso.
- Dopo un ciclo, genera un'eccezione / restituisci un errore quando inserisci il codice specifico.
- Dopo un altro ciclo, eliminare il codice.
Che cos'è un ciclo? È il ciclo di utilizzo del codice. Ad esempio, per un'applicazione finanziaria mi aspetterei un breve ciclo mensile (con gli stipendi pagati alla fine del mese) e un lungo ciclo annuale. In questo caso, è necessario attendere almeno un anno per verificare che non venga mai emesso alcun avviso per l'inventario di fine anno che potrebbe utilizzare percorsi di codice che altrimenti non sarebbero mai stati utilizzati.
Si spera che la maggior parte delle applicazioni abbia cicli più brevi.
Consiglio di inserire un commento su TODO, con una data, indicando quando passare al passaggio successivo. E un promemoria nel tuo calendario.