Cómo encontrar código no utilizado/inactivo en proyectos java [cerrado]
¿Qué herramientas utiliza para encontrar código no utilizado o inactivo en grandes proyectos de Java? Nuestro producto ha estado en desarrollo durante algunos años y cada vez es más difícil detectar manualmente el código que ya no está en uso. Sin embargo, intentamos eliminar la mayor cantidad posible de código no utilizado.
También se agradecen sugerencias de estrategias/técnicas generales (además de herramientas específicas).
Editar: tenga en cuenta que ya utilizamos herramientas de cobertura de código (Clover, IntelliJ), pero son de poca ayuda. El código inactivo todavía tiene pruebas unitarias y aparece como cubierto. Supongo que una herramienta ideal identificaría grupos de código que tienen muy poco código dependiente, lo que permitiría la inspección manual de documentos.
Un complemento de Eclipse que funciona razonablemente bien es Unused Code Detector .
Procesa un proyecto completo o un archivo específico y muestra varios métodos de código inactivo o no utilizado, además de sugerir cambios de visibilidad (es decir, un método público que podría estar protegido o privado).
CodePro fue lanzado recientemente por Google con el proyecto Eclipse. Es gratuito y muy eficaz. El complemento tiene una función ' Buscar código muerto ' con uno o varios puntos de entrada. Funciona bastante bien.
Instrumentaría el sistema en ejecución para mantener registros del uso del código y luego comenzaría a inspeccionar el código que no se usa durante meses o años.
Por ejemplo, si está interesado en clases no utilizadas, todas las clases podrían instrumentarse para registrar cuando se crean instancias. Y luego, un pequeño script podría comparar estos registros con la lista completa de clases para encontrar clases no utilizadas.
Por supuesto, si pasa al nivel del método, debe tener en cuenta el rendimiento. Por ejemplo, los métodos sólo podían registrar su primer uso. No sé cuál es la mejor manera de hacer esto en Java. Hemos hecho esto en Smalltalk, que es un lenguaje dinámico y, por lo tanto, permite la modificación del código en tiempo de ejecución. Instrumentamos todos los métodos con una llamada de registro y desinstalamos el código de registro después de que un método se haya registrado por primera vez, por lo que después de un tiempo no se producen más penalizaciones de rendimiento. Quizás se pueda hacer algo similar en Java con indicadores booleanos estáticos...