¿Cómo puedo generar diagramas UML (especialmente diagramas de secuencia) a partir de código Java existente?
¿Cómo puedo generar diagramas UML (especialmente diagramas de secuencia) a partir de código Java existente?
Respuestas:
Es lo que usé. Se instala fácilmente desde el repositorio:
Name: ObjectAid UML Explorer
Location: http://www.objectaid.com/update/current
Y produce diagramas UML bastante bonitos:
El ObjectAid UML Explorer es diferente de otras herramientas UML. Utiliza la notación UML para mostrar una representación gráfica del código existente que es tan precisa y actualizada como su editor de texto, a la vez que es muy fácil de usar. Varias características únicas lo hacen posible:
- Su código fuente y sus bibliotecas son el modelo que se muestra, no están diseñados en un formato diferente.
- Si actualiza su código en Eclipse, su diagrama también se actualiza; no es necesario realizar ingeniería inversa del código fuente.
- La refactorización actualiza su diagrama y su código fuente. Cuando cambia el nombre de un campo o mueve una clase, su diagrama simplemente refleja los cambios sin perder la sincronización.
- Todos los diagramas en su espacio de trabajo de Eclipse se actualizan con cambios de refactorización según corresponda. Si es necesario, se sacan de su sistema de control de versiones.
- Los diagramas están completamente integrados en el IDE de Eclipse. Puede arrastrar las clases de Java desde cualquier otra vista al diagrama, y la información relacionada con el diagrama se muestra en otras vistas cuando corresponda.
An error occurred while installing the items session context was:(profile=epp.package.java, phase=org.eclipse.equinox.internal.p2.engine.phases.Install, operand=null --> [R]com.objectaid.uml 1.1.3, action=). Failed to prepare partial IU: [R]com.objectaid.uml 1.1.3.
EDITAR: si eres diseñador, entonces Papyrus es tu mejor opción, es muy avanzado y está lleno de características, pero si solo quieres esbozar algunos diagramas UML y una instalación fácil, ObjectAid es bastante bueno y no requiere ningún complemento I ¡acaba de instalarlo sobre Eclipse-Java EE y funciona muy bien!
ACTUALIZACIÓN 11 de octubre de 2013
Mi publicación original fue en junio de 2012, muchas cosas han cambiado, muchas herramientas han crecido y otras no. Como voy a volver a modelar y a obtener algunas respuestas a la publicación, decidí instalar papyrus nuevamente e investigaré otras posibles soluciones de modelado UML nuevamente. La generación UML (con función de sincronización) es realmente importante no para el diseñador de software sino para el desarrollador promedio.
Desearía que papyrus tuviera una forma sencilla de revertir las clases de ingeniero en el diagrama de clases UML y sería genial si esa ingeniería inversa tuviera una función de sincronización, pero desafortunadamente el proyecto papyrus está lleno de características y creo que los desarrolladores ya tienen mucho a mano ya que también Es posible que las acciones que realice sobre papiro no le den ninguna respuesta y simplemente no suceda nada, pero eso está fuera del alcance de esta pregunta de todos modos.
La respuesta (11 de octubre de 2013)
Herramientas
Pasos
Haga clic derecho en MyProject_kdm.xmi -> Discovery -> Discoverer -> Descubrir el modelo UML desde el código KDM nuevamente, obtendrá un cuadro de diálogo de propiedad, establezca el accesorio de serialización en TRUE para generar un archivo llamado MyProject.uml
Mueva MyProject.uml generado que se generó en la raíz, a la carpeta UML, Eclipse le preguntará si desea reemplazarlo, haga clic en sí. Lo que hicimos aquí fue que reemplazamos un modelo vacío por uno generado.
ALT + W -> mostrar vista -> papiro -> explorador de modelos
En esa vista, encontrarás tus clases como en la imagen
En la vista Haga clic derecho en el modelo raíz -> Nuevo diagrama
Luego comienza a tomar clases del diagrama desde la vista
Algunas caracteristicas
Para mostrar los elementos de la clase (variables, funciones, etc.) Haga clic derecho en cualquier clase -> Filtros -> mostrar / ocultar contenido ¡¡Voila !!
Puede tener configuraciones de color amigables predeterminadas desde Ventana -> pereferences -> papyrus -> class diagram
una configuración muy importante es Organizar cuando suelta las clases, obtienen un clic derecho apretado en cualquier espacio vacío en un diagrama de clase y hacen clic en Organizar todo
Las flechas en la vista del explorador de modelos se pueden agarrar al diagrama para mostrar generalización, realización, etc.
Después de todo eso, su configuración mostrará diagramas como
La sincronización no está disponible hasta donde sé que necesitará importar manualmente cualquier clase nueva.
Eso es todo, y no compre productos comerciales a menos que realmente lo necesite, el papiro es realmente genial y sofisticado, en lugar de donar o algo así.
Descargo de responsabilidad: no tengo ninguna relación con la gente de papiro, de hecho, no me gustó el papiro al principio hasta que investigué mucho y lo experimenté con un poco de paciencia. Y volveré a esta publicación nuevamente cuando pruebe otras herramientas gratuitas.
¿Cuál es tu código base? Java o C ++?
eUML2 para Java es un poderoso modelador UML diseñado para desarrolladores Java en Eclipse. La edición gratuita se puede utilizar para uso comercial. Es compatible con las siguientes características:
- CVS y soporte de equipo
- Diseñado para proyectos grandes con vistas de modelos múltiples y personalizables
- Helios obediente
- Código en tiempo real / sincronización de modelo
- Compatible con UML2.1 y compatible con OMG XMI
- Soporte JDK 1.4 y 1.5
La edición comercial proporciona:
Ingeniería inversa avanzada
- Potentes herramientas de análisis de dependencia real
- Perfil UML y MDD
- Herramientas de base de datos
- Soporte de plantillas personalizables
Soy uno de los autores, por lo que la respuesta puede ser parcial. Es de código abierto (Apache 2.0), pero el complemento no es gratuito. No tiene que pagar (obviamente) si clona y construye localmente.
En Intellij IDEA, ZenUML puede generar diagramas de secuencia a partir de código Java.
Compruébelo en https://plugins.jetbrains.com/plugin/12437-zenuml-support
Código fuente: https://github.com/ZenUml/jetbrains-zenuml
¿Qué tal PlantUML ? ¡No es para ingeniería inversa! Es para la ingeniería antes de codificar.
Desarrollé un complemento de Maven que puede ejecutarse desde la CLI como un objetivo del complemento o importar como dependencia y usar mediante programación el analizador @see Main#main()
para tener una idea de cómo.
Se hace que PlantUML código de paquetes deseados src recursiva que se puede editar manualmente si es necesario (esperemos que no). Luego, al pegar el código en la página plantUML, o al descargar el tarro de la planta, puede representar el diagrama UML como una imagen png.
Compruébalo aquí https://github.com/juanmf/Java2PlantUML
Ejemplo de diagrama de salida:
Cualquier contribución es más que bienvenida. Tiene un conjunto de filtros que personalizan la salida, pero aún no los expuse en los parámetros de la CLI del complemento.
Es importante tener en cuenta que no se limita a sus archivos * .java, también puede representar diagramas UML src de sus dependencias de Maven. Esto es muy útil para comprender las bibliotecas de las que depende. Realmente inspecciona las clases compiladas con reflexión, por lo que no se necesita fuente
Sé el primero en protagonizarlo en GitHub: P
Recomendaría EclipseUML de Omondo para uso general, aunque tuve algunos problemas hace unos meses con mis proyectos web. Tenían una edición gratuita en un momento dado, pero supuestamente ya no se promociona.
Si realmente le gustan los diagramas de secuencia de ingeniería inversa del código fuente, recomendaría jTracert .
En lo que respecta a los proyectos de Eclipse, el proyecto Eclipse UML2 Tools podría admitir ingeniería inversa, aunque nunca he visto su uso en la práctica.
El proyecto MoDisco (Model Discovery) Eclipse GMT parece ser más claro para lograr su objetivo. La lista de herramientas específicas de tecnología sería un buen lugar para comenzar.
jSonde
no está disponible en la URL que se muestra arriba. Puede encontrar un sitio web y el código fuente en Github: github.com/bedrin/jsonde .
Encontré el complemento verde muy simple de usar y generar un diagrama de clase a partir del código fuente. Darle una oportunidad :). Simplemente copie el complemento a su directorio de complementos.
También puedes probar el modelizador UML de netbeans. Lo he usado para generar javacode que usé en mis proyectos de eclipse. Incluso puede importar proyectos de eclipse en netbeans y mantener la configuración del eclipse sincronizada con la configuración del proyecto netbeans.
Probé varios modeladores UML para eclipse y no estuve satisfecho con ellos. Eran inestables, complicados o simplemente feos. ;-)
Usando IntelliJ IDEA. Para generar el diagrama de clase, seleccione el paquete y presione Ctrl+ Alt+ U:
Por defecto, muestra solo nombres de clase y no todas las dependencias. Para cambiarlo: haga clic derecho -> Mostrar categorías ... y Mostrar dependencias:
Para generar el diagrama de dependencias (diagrama de implementación UML) y usar maven, vaya a Ver -> Herramienta Windows -> Proyectos Maven y presione Ctrl+ Alt+ U:
También es posible generar más diagramas de otros. Ver documentación .
Puede usar la versión de evaluación de 30 días de EclipseUML para Eclipse 3.5: http://www.uml2.org/eclipse-java-galileo-SR2-win32_eclipseUML2.2_package_may2010.zip Esta no es la última versión 3.6, pero es bastante buena y no requiere que lo compre para pruebas e ingeniería inversa.
Ingeniería inversa: http://www.forum-omondo.com/documentation_eclipseuml_2008/reverse/reverse/reverse_engineering_example.html
Demo flash en vivo: http://www.ejb3.org/reverse.swf
EclipseUML Omondo es la mejor herramienta del mundo para Java. Solo eUML parece competir con él en este mercado de sincronización de Java en vivo, pero eUML agrega etiquetas de modelo en el código, lo cual es realmente muy malo y definitivamente no es para mí.
Con mucho, la mejor herramienta que he utilizado para la ingeniería inversa, y el viaje redondo de Java -> UML es Borland's Together . Se basa en Eclipse (no solo un complemento) y realmente funciona bien.
Sugiero PlantUML. Esta herramienta es muy útil y fácil de usar. PlantUML tiene un complemento para Netbeans que puede crear diagramas UML a partir de su código java.
Puede instalar el complemento PlantUML en los netbeans mediante este método:
Menú Netbeans -> Herramientas -> Complemento
Ahora seleccione Plugins disponibles y luego busque PlantUML e instálelo.
Para obtener más información, visite el sitio web: www.plantuml.com
Me di cuenta de que el complemento SequenceDiagram para Intellij también es una buena opción.
Otra herramienta de modelado para Java es (mi) sitio web GitUML . Genere diagramas UML a partir de código Java o Python almacenado en repositorios GitHub.
Una idea clave con GitUML es abordar uno de los problemas con la "documentación": que los diagramas están siempre desactualizados. Con GitUML, los diagramas se actualizan automáticamente cuando inserta código usando git.
Explore los diagramas UML de la comunidad, hay algunos patrones de diseño de Java allí. Navegue por los repositorios populares de GitHub y visualice las arquitecturas y patrones en ellos.
Cree diagramas usando apuntar y hacer clic. No hay un editor de arrastrar y soltar, solo haga clic en las clases en el árbol de repositorio que desea visualizar:
La tecnología subyacente está basada en PlantUML, lo que significa que puede refinar sus diagramas con un marcado adicional de PlantUML.
Hay una herramienta gratuita llamada binarydoc que puede generar UML Sequence Diagram
, o Control Flow Graph
( CFG
) a partir del bytecode
(en lugar del código fuente) de un método Java.
Aquí hay un diagrama de ejemplo binarydoc generado para el método java java.net.AbstractPlainSocketImpl.getInputStream :
java.net.AbstractPlainSocketImpl.getInputStream
:java.net.AbstractPlainSocketImpl.getInputStream
: