2011-11-16 26 views
8

Sé que se han formulado muchas preguntas relacionadas en SO, pero no he podido encontrar nada completamente satisfactorio, probablemente porque mi requisito es ligeramente diferente de cada una de esas preguntas.Herramientas de Dependencia de Clase para Java

Tengo una base de código gigantesca que me gustaría dividir en unidades lógicas más pequeñas. Para hacer esto, necesito encontrar todas las dependencias enredadas/circulares y resolverlas. Debido al tamaño de los spaghetti existentes, la única estrategia viable parece ser dividir y conquistar, por lo que primero tengo que dividir el gran proyecto en piezas más pequeñas o pelar las piezas independientes y abordar las piezas más pequeñas por separado.

La mayoría de las herramientas que puedo encontrar parecen funcionar solo en el nivel de clase o paquete, pero no parecen respaldar el concepto de subpaquetes. Por ejemplo, si tengo un paquete raíz, 3 paquetes debajo de eso y luego 5 subpaquetes debajo de cada uno de los 3, obtendré 1 + 3 + 15 = 19 paquetes, lo que me dará un gráfico increíblemente complicado. Ahora lo que espero poder hacer es analizar primero la relación de dependencia entre los 3 paquetes de nivel superior (cantidad de paquetes entrantes/salientes y qué clases originan estas dependencias), limpiarlo en ese nivel, antes de sumergirme en estos niveles. paquetes de nivel para trabajar en el siguiente nivel.

Ahora, he utilizado Structure 101 para este propósito, y funciona muy bien, pero cuando la prueba expira, el precio del producto es un poco elevado para mi presupuesto. ¿Hay alguna solución de código abierto/gratuito?

¡Gracias de antemano!

Respuesta

5

Que yo sepa, no existe una herramienta gratuita que sea remotamente comparable con structure 101. (¡No estoy afiliado!)

Ya tiene una solución, pero dice que el precio es demasiado alto. Esto puede ser una falacia.

Tengo una gran base de código que me gustaría dividir en unidades lógicas más pequeñas.

Es de suponer que no estás haciendo esto por diversión pero alguien te está pagando por hacerlo. El USD 900 para la estructura 101 es de alrededor de 3-4 días de trabajo, suponiendo que gana algo como HKD 40k (USD 5200) por mes como desarrollador sénior de software en Hong Kong. Debería ser posible argumentar que esto realmente ahorrará mucho dinero al final.

+0

Economía no se trata de 'guardar' pero 'optimizar'. – DerMike

+1

Estoy de acuerdo, pero en marketing siempre "ahorras dinero", incluso si lo gastas :-) –

+0

Gracias. "pagar por lo que obtienes" es exactamente el punto aquí. Verán, estoy de acuerdo en que la estructura 101 es una obra increíble, pero hace mucho más de lo que necesito, por lo que el precio que tendré que pagar solo me está comprando algo que vale mucho menos que eso. No estoy buscando un software completo que lo haga todo. He encontrado un par de alternativas que casi hacen todo lo que necesito, y es solo este bit "incluidos los subpaquetes" que la mayoría de ellos parece no hacer, lo que no me parece "desafiante". Así que estoy pensando que alguien allí debe haberlo puesto a disposición. – RAY

1

una versión de prueba de JAVADepend ofrece la posibilidad de analizar la relación de dependencia que desee sin limitaciones en el tiempo.

es una buena herramienta.

+0

¿No sería una versión paga que es un poco más barata por casualidad? – clinux

1

Eche un vistazo a CodePro Analytix. Tiene varias herramientas para dependency analysis más toneladas de otras cosas que debe tener en cuenta.

Para el análisis fuera de línea, mira SonarQube. No tiene gráfico de dependencia pero tiene un módulo para ciclos de dependencia en sus clases más una tonelada de módulos de medición de calidad.

0

¿Has mirado ya sea ObjectAID o plug-ins PlantUML para eclipse? No es tan robusto como lo que pregunta, pero definitivamente proporciona algunos buenos mecanismos de modelado UML de forma gratuita.

0

Negación: Soy el autor de coffea

me enseñó que debía compartir, ya que estoy frente a un problema similar, otra vez (es decir, una base de código gigante con varios niveles, dependencias de paquetes complejas y difícilmente cualquier estructura), y no estoy al tanto de ninguna alternativas gratuitas disponibles por el momento.

En mi opinión, nada supera las reglas de scripting y/o agrupamiento explícito cuando se trata de una estructura caótica de paquetes, y como no encontré ninguna forma razonable de hacerlo antes, implementé mi propio tool.

Por supuesto, esto no superará ninguna alternativa comercial, pero es un enfoque bastante simple, que debería permitirle investigar las partes interesantes sin el ruido del entorno.

0

proyecto: https://github.com/lukehutch/fast-classpath-scanner

cómo utilizar últimas sugerencias/noticias: https://github.com/lukehutch/fast-classpath-scanner/releases

frascos pre-compilados + fuente: https://oss.sonatype.org/#nexus-search;quick~fast-classpath-scanner

ejemplo: https://github.com/lukehutch/fast-classpath-scanner/wiki/3.9.-Generating-a-GraphViz-dot-file-from-the-classgraph

ScanResult scanResult = new FastClasspathScanner(
    MyClass.class.getPackage().getName()).scan(); 
String str = scanResult.generateClassGraphDotFile(9.2f, 8.0f); 

Files.write(str, new File("GraphViz.dot"), StandardCharsets.UTF_8); 

System.out.println("now run this at terminal: dot -Tsvg <GraphViz.dot> GraphViz.svg"); 
Cuestiones relacionadas