Eliminando código inalcanzable
En un lenguaje de tipo estático de principios, siempre debe saber si el código es realmente accesible o no: elimínelo, compile, si no hay un error no se pudo acceder.
Lamentablemente, no todos los idiomas se escriben estáticamente, y no todos los idiomas están tipificados de manera estática. Las cosas que podrían salir mal incluyen (1) reflexión y (2) sobrecarga sin principios.
Si utiliza un lenguaje dinámico o un lenguaje con una reflexión lo suficientemente potente como para que pueda accederse a la pieza de código bajo escrutinio en tiempo de ejecución a través de la reflexión, entonces no puede confiar en el compilador. Tales lenguajes incluyen Python, Ruby o Java.
Si usa un idioma con una sobrecarga sin principios, simplemente eliminando una sobrecarga podría simplemente cambiar la resolución de sobrecarga a la sobrecarga de otra silenciosamente. Algunos de estos lenguajes le permiten programar una advertencia / error en tiempo de compilación asociado con el uso del código, de lo contrario no puede confiar en el compilador. Tales lenguajes incluyen Java (use @Deprecated
) o C ++ (use [[deprecated]]
o = delete
).
Por lo tanto, a menos que tenga mucha suerte de trabajar con idiomas estrictos (Rust viene a la mente), puede que realmente se esté disparando a sí mismo al confiar en el compilador. Y, desafortunadamente, las suites de prueba generalmente están incompletas, por lo que tampoco son de mucha ayuda.
Indica la siguiente sección ...
Eliminando código potencialmente no utilizado
Es más probable que se haga referencia al código, sin embargo, sospecha que en la práctica las ramas del código que lo hacen referencia nunca se toman.
En este caso, sin importar el idioma, el código es demostrablemente accesible y solo se puede utilizar la instrumentación en tiempo de ejecución.
En el pasado, he utilizado con éxito un enfoque de 3 fases para eliminar dicho código:
- En cada rama sospechosa de NO ser tomada, registre una advertencia.
- Después de un ciclo, lanza una excepción / devuelve un error al ingresar el código específico.
- Después de otro ciclo, elimina el código.
¿Qué es un ciclo? Es el ciclo de uso del código. Por ejemplo, para una aplicación financiera esperaría un ciclo mensual corto (con los salarios pagados al final del mes) y un ciclo anual largo. En este caso, debe esperar al menos un año para verificar que nunca se emite una advertencia para el inventario de fin de año que podría usar rutas de código que de otra manera nunca se usarían.
Con suerte, la mayoría de las aplicaciones tienen ciclos más cortos.
Aconsejo poner un comentario TODO, con una fecha, aconsejando cuándo pasar al siguiente paso. Y un recordatorio en tu calendario.