In informatica il codice morto è un termine della programmazione con il quale si indica del codice sorgente di un programma che viene eseguito, ma produce un risultato che non sarà mai utilizzato in nessun'altra computazione.Appel, A. W. 1998 Modern Compiler Implementation in Java. Cambridge University Press. L'esecuzione di codice morto comporta inoltre uno spreco di tempo computazionale.
Mentre il risultato di una computazione morta non dovrebbe essere usato, il codice morto può generare eccezioni o influire sullo stato globale, in tal modo la rimozione di tale codice può modificare l'output del programma e dar luogo a bug involontari. Se vi è ambiguità nel garantire una ininfluenza dell'output di programma, le ottimizzazioni del compilatore mantengono tipicamente un approccio conservativo e tendono quindi a non rimuovere il codice morto.
Esempi
int foo (int iX, int iY) { int iZ = iX/iY; // Può accadere una divisione per zero return iX*iY; }
Nell'esempio sopra, la divisione di iX e iY è computata ma mai utilizzata. È perciò codice morto e può essere rimosso.
public void Metodo(){ final boolean bDebug = false;
if (bDebug){ //fai qualcosa…
Nell'esempio sopra, "fai qualcosa" non verrà mai eseguito, è perciò codice morto. Il compilatore Java è intelligente a sufficienza da non compilarlo.
Rimozione del codice morto Eliminare il codice morto comporta due principali vantaggi: riduce la dimensione del programma, un'importante considerazione in alcuni contesti, e permette al programma di evitare l'esecuzione di operazioni irrilevanti, riducendo quindi il tempo d'esecuzione. Il codice morto include codice che non sarà mai eseguito e codice che influisce solo su variabili morte, ovvero variabili irrilevanti nell'output di programma. Consideriamo il seguente esempio scritto in C.
int foo(void) { int iA = 24; int iB = 25; /* Assegnamento della variabile morta */
int iC = iA << 2; return iC;
iB = 24; /* Codice irraggiungibile */ return 0;
A causa dell'esecuzione incondizionata dell'istruzione , l'assegnazione di iB non verrà mai raggiunta. È pertanto possibile rimuovere tale codice.
Note
Voci correlate Codice ridondante
Collegamenti esterni
UCDetector Plugin di Eclipse per trovare codice morto in Java
Morto