2010-03-02 12 views
7

Tengo un proyecto Java en el que he estado trabajando durante un tiempo. El diseño comenzó bastante bien, pero se degradó lentamente a medida que se realizaban cambios. Estoy buscando algún tipo de herramienta que analizará el proyecto. Sería realmente agradable tener un mapa de las dependencias de diferentes clases/métodos. Siento que ciertos métodos solo están ahí para cumplir un objetivo muy específico. Me gustaría eliminar el código innecesario y mejorar mi diseño.Mapa de dependencias para clases y métodos Java

¡Cualquier sugerencia sería genial! ¡Gracias!

+0

Muchos de los grandes respuestas! ¡Gracias por tu ayuda! – Ryan

+0

Esto no está relacionado, pero la herramienta UML Umbrello generará diagramas UML de su código. Eso hubiera sido útil para mí en ese momento. – Ryan

+0

Acabo de detectar esto debido a su comentario reciente, pero para futuras referencias puede consultar Structure101. –

Respuesta

5

Es posible que desee comprobar JDepend. Fue desarrollado específicamente para resolver el problema al que se enfrenta.

Trabajando como consultor es muy común que me incluyan en una gran base de código heredado. Normalmente, lo primero que hago es ejecutar JDepend en él para tratar de orientarme en la base de código y en todas las dependencias.

Buena suerte.

+1

JDepend solo proporciona dependencias entre paquetes, no clases y métodos –

-1

Tenga una mirada en Apache Ivy

+0

Ivy no es un mal administrador de dependencias pero no responde a su pregunta, está buscando algo que analice las dependencias de sus proyectos existentes. – Matt

1

Doxygen puede ayudar, especialmente con representaciones gráficas de las dependencias entre las clases y métodos.

1

Esta no es una respuesta perfecta, pero puede ser útil para revisiones rápidas. Si está utilizando Eclipse para su desarrollo, puede ver el gráfico de llamadas de un método seleccionando su nombre y presionando Ctrl-Alt-H (o haciendo clic con el botón derecho y seleccionando "Abrir jerarquía de llamadas"). Puede usar la vista que se abre para ver qué llama el método y qué métodos usa el método.

+0

Eso ayuda mucho en realidad. ¡Gracias! – Ryan

1

Hay varios buenos analizadores para Java. He estado jugando con PMD hasta ahora y he tenido suerte decente con eso.

1

Quizás también quieras probar FindBugs. Ayuda mucho con estos y muchos otros problemas.

1

Muchas herramientas están disponibles para esto, dependiendo del tamaño de su sistema. El abuelo de todos ellos es Structure101, un producto comercial.

http://structure101.com

He utilizado este en algunos proyectos grandes - es complejo, pero sin duda el más exhaustivo de todas las herramientas que conozco. Puede graficar una gran arquitectura y te permite desentrañar algunas cosas complejas. Tiene un producto hermano llamado reStructure101 en el que puedes hacer escenarios hipotéticos.

Un buen competidor es Stan4j. No está tan completo como completo, pero mejora algunas cosas, mostrando particularmente el contexto de dependencia en el nivel de clase.

http://www.stan4j.com

(I poseer ambos productos, pero no tienen ninguna afiliación comercial con cualquiera)

Otra forma de ver las dependencias complejas, sobre todo a nivel de proyecto, es una matriz de estructura de dependencias (DSM).Aunque S101 puede hacer un DSM, Lattix tiene más apoyo - que puede manejar Spring e Hibernate dependencias: lattix

http://lattix.com/

(No he utilizado - que hacen que sea muy difícil de evaluar, lo cual es extraño porque yo trabajo en algunos sistemas muy grandes)

Si el software es bastante pequeño, y que están más interesados ​​en el nivel de clase simple, entonces algo así como Architexa puede ayudar a entender mejor la estructura:

http://www.architexa.com/

Finalmente, si quiere hacer su propia versión, puede hacerlo fácilmente con ASM. Incluso incluye una herramienta de matriz de dependencias que realiza un seguimiento a nivel de paquete:

http://asm.ow2.org/doc/tutorial-asm-2.0.html (ver abajo de la página para la matriz de dependencias nify)

Aquí está la fuente para ello - es muy simple, pero inteligente. Funciona con bytecodes. http://cvs.forge.objectweb.org/cgi-bin/viewcvs.cgi/asm/asm/examples/dependencies/src/org/objectweb/asm/depend/

Cuestiones relacionadas