Eliminar dependencias innecesarias en un proyecto de Java

Este problema son las dependencias de Java no estáticas, sino dinámicas. Leí este enlace de stackoverflow, pero se trata de dependencias estáticas y buscar en Google me da resultados similares.

Pues aqui esta mi problema:

Este es un proyecto muy grande (20K + archivos Java) que se ejecuta desde hace 10 años con más de 50 desarrolladores ahora. Aquí la re-arquitectura ocurre todo el tiempo, por lo que tiene una nueva pila y una vieja pila de capas. La mayoría de las veces, la mitigación de riesgos significa que no puede deshacerse de una clase inmediatamente, en su lugar, el método de calle mantiene las llamadas a la clase nueva y antigua tanto. La instrucción estándar para el desarrollador es: no se debe llamar a la clase anterior durante la ejecución de la aplicación en el entorno de producción.

Solución actual:

Lo que hacen es mantener una "bandera falsa" en la vieja clase y rezar para que no se la llame. Si lo hace (como un desarrollador puede fallar en señalar a la nueva clase) y las cosas fallan en la producción, entonces establezca la bandera contra la clase anterior como verdadera y todo está bien en el mundo. (de esta manera, simplemente cambian un archivo de propiedades que tiene la bandera y no tienen que volver a compilar) Después de un año más o menos de tales pruebas en prod, dejan de lado el archivo de clase anterior. Ahora, este podría no ser el mejor enfoque técnicamente, pero en la práctica con una aplicación de misión crítica no se arriesga y nadie es capaz de recordar / saber qué están haciendo estas clases de 20K en Java o incluso funcionalmente.

Lo que estoy buscando:

Una herramienta o método para descubrir clases no utilizadas.

  1. Ahora, esto es un huevo de gallina de alguna manera, ya que hasta que ejecute un cierto escenario raro, no descubrirá qué clase antigua se llama en tiempo de ejecución y, por lo tanto, la solución existente.

  2. Si usa herramientas de análisis de código estático como PMD, etc., no le dirán las que no se utilizan, ya que en realidad están siendo llamadas por alguna u otra clase al menos a nivel de código.

  3. Tal vez, y solo son pensamientos descabellados, alguna herramienta que atraviesa todas las cadenas / árboles de dependencia a partir de la capa de acción de nivel superior, y obtiene el resultado

Y, por supuesto, la forma reactiva es construir un conjunto de pruebas de regresión totalmente automatizado y ejecutar todos los escenarios posibles, que desafortunadamente no es posible aquí debido al presupuesto, las limitaciones humanas, etc.

Lo que necesito es una forma proactiva que optimice mi código. Tal vez sea una ilusión pensar que esto es incluso posible, pero tengo la persistente sensación de que este problema no es aleatorio y está estructurado, por lo que podría haber una solución en alguna parte.

Cualquier pensamiento apreciado. !!

Respuesta 1

Estoy copiando mi archivo db a sd car usando este método, por favor dígame si el archivo en sdcard ya existe, ¿se reemplazará o no se copiará? public boolean copyDbToSDCard () {...

Estoy buscando ejemplos de uso del uso de la API del compilador Java de Oracle. Quiero construir algo cercano a javac para personalizar / extender las capacidades de registro de errores.

He estado buscando en esto. Necesito construir una utilidad independiente que debería: Convertir la secuencia de imágenes al formato .mov Tomar la entrada del usuario y mostrarla dentro del mov. Planeo hacer esto usando ...

Recibo esta advertencia en la consola: WARN: class org.newdawn.slick.opengl.PNGImageData no pudo leer los datos Después de cambiar entre archivos png, parece que la advertencia aparece porque estaba ...