Eliminar código inalcanzable
En un lenguaje con principios de tipo estático, siempre debe saber si el código es realmente accesible o no: eliminarlo, compilar, si no hay error, no fue accesible.
Desafortunadamente, no todos los idiomas están estáticamente tipados, y no todos los lenguajes tipados estáticamente tienen principios. 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 se pueda acceder al código bajo escrutinio en tiempo de ejecución a través de la reflexión, no puede confiar en el compilador. Tales lenguajes incluyen Python, Ruby o Java.
Si utiliza un lenguaje con sobrecarga sin principios, simplemente eliminar una sobrecarga podría simplemente cambiar la resolución de sobrecarga a otra sobrecarga en silencio. 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. Dichos lenguajes incluyen Java (uso @Deprecated
) o C ++ (uso [[deprecated]]
o = delete
).
Entonces, a menos que sea muy afortunado de trabajar con lenguajes estrictos (viene a la mente Rust), realmente puede estar disparándose en el pie al confiar en el compilador. Y desafortunadamente, los conjuntos de pruebas generalmente están incompletos, por lo que tampoco hay mucha más ayuda.
Cue la siguiente sección ...
Eliminar código potencialmente no utilizado
Lo más probable es que se haga referencia al código, sin embargo, sospecha que en la práctica nunca se toman las ramas del código que hacen referencia a él.
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 que se sospeche que NO se tomará, registre una advertencia.
- Después de un ciclo, arroje una excepción / devuelva un error al ingresar el fragmento de código específico.
- Después de otro ciclo, elimine 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 no se emita ninguna advertencia para que el inventario de fin de año pueda usar rutas de código que de otro modo 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.