2011-08-10 10 views
12

¿Alguien sabe de una herramienta para detectar código muerto en un proyecto Java EE?¿Cómo puedo detectar el código muerto en un proyecto de Java empresarial (Java + JSP + Javascript)?

He examinado muchas herramientas que lo hacen bien para proyectos Java puros, pero nada parece realmente manejar proyectos que incluyen JSP y archivos Javascript también. Por ejemplo, detectar que un método Java está en uso porque se está llamando desde un JSP, o detectar que algún archivo JSP que previamente se usó como una solicitud AJAX ya no se llame desde ningún Javascript.

Gracias.

+2

Esto es en gran medida imposible ya que no se pueden determinar fácilmente todas las posibles solicitudes de Ajax que una pieza de JavaScript generará/podría generar. –

+0

También podría tener escenarios donde un formulario en el HTML se está enviando a uno de ustedes JSP, por lo que tendría que inspeccionar el HTML también ... pero +1 ya que esta es una buena pregunta. – Endophage

Respuesta

5

¿Qué pasa con el muestreo de la vida real? Enchufa el agente JaCoCo a tu aplicación, ejecútalo y úsalo por un tiempo. Si tiene pruebas funcionales completas, ejecútelas. Si tienes un equipo de probadores, haz clic en tu aplicación. JaCoCo grabará todas las líneas ejecutadas (se usa para la cobertura del código) mientras tanto.

Si algunas líneas no se ejecutaron durante un período extenso de tiempo (recuerde que debería tocar todas las pantallas, llamadas, rutas y ramas posibles en su aplicación) debería examinar si realmente no están muertas (o tal vez simplemente olvidó ejecutar su aplicación en esta configuración particular).

Es comprensible que esto sea muy frágil, pero no creo que encuentre nada automático.

+0

No conozco JaCoCo, pero utilizar una herramienta de cobertura me parece la única solución lógica. Sin embargo, no le dará ningún dato para los archivos javascript. –

0

Propongo utilizar el indicador JVM -verbose:class (http://java.dzone.com/articles/how-use-verbose-options-java). Permitirá la información de registro sobre clases cargadas por JVM, ej.

[Loaded java.lang.Object from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
[Loaded java.io.Serializable from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
[Loaded java.lang.Comparable from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
[Loaded java.lang.CharSequence from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 

Si alguna clase no se carga durante un período de tiempo prolongado, es muy posible que no se utilice.

Por supuesto, esta solución solo le dará información sobre las clases no utilizadas, pero no tiene que utilizar ninguna biblioteca externa.

Cuestiones relacionadas