Código muerto
En programación, se conoce como código muerto a una parte del código fuente que se ejecuta pero sus resultados nunca se usan.[1][2] La ejecución de este tipo de código consume tiempo de computo en algo que jamás se utiliza.
Es frecuente confundirlo con el código inalcanzable aunque conservan una diferencia (este jamás se ejecuta, y si bien los dos son indeseables el código muerto es más grave que el inalcanzable).
Además de consumir tiempo de computo el código muerto puede arrojar excepciones o afectar un estado global del programa. por lo tanto si bien los resultados jamás se utilizan remover este código puede cambiar la salida del programa y evitar bugs innecesarios. Esta es una razón por la cual el código muerto es menos deseado que el código inalcanzable.
Análisis
Se puede utilizar una optimización de compilador llamada eliminación de código muerto para eliminar este código. Este análisis se puede llevar a cabo mediante el análisis de variable viva, que es una forma de análisis estático de software y análisis de flujo de datos. Esta también es una diferencia con respecto al código inalcanzable que se descubre mediante un análisis de control del flujo.
La eliminación de código en general es la misma técnica que se usa para eliminar el código inalcanzable y el código redundante.
En los proyectos de programación grandes, a veces es difícil de reconocer y eliminar código muerto, especialmente cuando algún módulo entero quede muerto.[3]
Algunos IDE (como Visual Studio 2010[4] y Eclipse[5]) poseen la habilidad de detectar código muerto durante tiempo de compilación.
Ejemplo
int foo (int X, int Y) {
int Z = X/Y;
return X*Y;
}
En el código anterior la división entre X e Y se calcula pero jamás se utiliza, además, en el caso de que Y sea 0 el programa arrojaría una excepción con posibilidad de abortar la ejecución, por lo tanto la salida del programa se ve afectada por esta línea.
Véase también
Referencias
- Debray, S. K., Evans, W., Muth, R., and De Sutter, B. 2000. Compiler techniques for code compaction. ACM Trans. Program. Lang. Syst. 22, 2 (Mar. 2000), 378-415.
- Appel, A. W. 1998 Modern Compiler Implementation in Java. Cambridge University Press.
- Douglas W. Jones Dead Code Maintenance, Risks 8.19 (Feb. 1, 1989) Archivado el 8 de julio de 2011 en Wayback Machine.
- Habib Heydarian, Microsoft Corp.
- Eclipse Developer Guide
Bibliografía
- Muchnick S. S. 1997 Advanced Compiler Design and Implementation. Morgan Kaufmann.
- Appel, A. W. 1998 Modern Compiler Implementation in Java. Cambridge University Press.
Enlaces externos
- Optimización de código
- Dead Code Detector (DCD) Java/JEE
- Comparación de DCD para Java
- UCDetector Plugin Eclipse para encontrar código muerto Java