phuml code bouml php uml class-diagram

code - Generador PHP UML



phuml (11)

phUML

phUML es un generador de diagramas de clase UML completamente automático escrito en PHP, licenciado bajo la licencia BSD. Es capaz de analizar cualquier código fuente orientado a objetos PHP5 y crear una representación de imagen apropiada de la estructura oo basada en la especificación UML.

./phuml -r /var/www/my_project -graphviz -createAssociations false -neato out.png

Guía paso por paso

¿Cómo puedo generar un diagrama UML basado en clases existentes en PHP?


¿ Autodia has probado Autodia ? La última vez que lo probé no fue perfecto, pero fue lo suficientemente bueno.


Así es como lo hice (directamente desde el código al dibujo PDF sin un dibujo manual de nada):

  1. Utilice BOUML para "ingeniería inversa de código PHP" [sic] para extraer el modelo de clase (BOUML está disponible en el repositorio de "universo" de Ubuntu). Recomiendo seriamente BOUML para este paso porque es muy rápido en comparación con muchos otros programas que he probado. Además, parece que BOUML parece extraer el modelo correctamente (para las partes que BOUML incluso intenta extraer).
  2. Use BOUML para exportar el modelo como archivo XMI 1.4
  3. Use ArgoUML para importar dicho archivo XMI (puede usar la versión webstart para este paso)
  4. Exportar XMI desde ArgoUML (no sé qué versión XMI / variante es la salida pero no es el mismo resultado que la salida de BOUML. El argouml-graphviz no puede manejar el archivo XMI directamente desde BOUML).
  5. Utilice argouml-graphviz para convertir el archivo XMI exportado de ArgoUML a formato de puntos (puede que necesite usar saxon lugar de xsltproc para que funcione debido al uso de XSLT2)
  6. Use dot o fdp o sfdp para representar el diagrama de clases.

Aquí hay un ejemplo de línea de comando adecuada para usar fdp para generar un diagrama PDF (suponiendo que el archivo de puntos generado por el proceso argouml-graphviz XLST se guarda como xmi-model.dot):

fdp -Tpdf -Gmaxiter=1000 -Gmindist=0.5 -Gpackmode=node / -Eweight=0.05 -Elen=1.0 -Eminlen=1.0 -Gsplines=true / -Goverlap=false xmi-model.dot -oxmi-model.pdf

Como alternativa, puede probar pear o php2xmi lugar de BOUML para realizar la parte de "ingeniería inversa". Todavía no lo he intentado.

(Estoy usando la frase "ingeniería inversa" porque parece que las personas UML están usando esas palabras cuando significan extraer información de clases y métodos del código fuente . Personalmente interpretaría esas palabras como extraer información del archivo binario ejecutable o capturada en crudo datos de cable.)

Si prefiere dibujar el diagrama de clase a mano (en lugar de usar la computadora para hacer todo el dibujo), puede usar BOUML o ArgoUML para el dibujo. Usar los datos de "ingeniería inversa" a través de BOUML ayudará en ese caso.


Bueno, para ser sincero, lo primero y más importante es que no debe generar un modelo UML a partir del código, sino un código del modelo UML;).

Incluso si se encuentra en una situación extraña, cuando necesita hacer esta ingeniería inversa, generalmente se sugiere que lo haga a mano o al menos que ponga en orden los diagramas, ya que el UML generado automáticamente tiene muy poca información visual (= información) valorar la mayor parte del tiempo.

Si solo necesita generar los diagramas, probablemente sea bueno preguntarse por qué exactamente. ¿Quién es el público previsto y cuál es el objetivo? ¿Qué tiene que ofrecer el diagrama autogenerado, qué código no?

Básicamente, acepto solo una respuesta a esa pregunta. Simplemente es demasiado grande e incomprensible.

Lo cual de nuevo es una razón para comenzar con UML en primer lugar, en lugar de comenzar a codificar;) Se llama análisis y está en declive, porque cada segundo en el negocio piensa que es un poco caro y no realmente necesario.


En teoría, puedes usar PhpStorm para visualizar tus clases usando UML. La generación no es muy buena, pero se puede refaccionar eficazmente y otra vez, al menos previsualizar padres, implementaciones, constantes, atributos, métodos y su visibilidad de una manera agradable.

Situación

Quiero visualizar una comunicación entre componentes ya existentes a un colega.

Proceso usando PHPStorm

https://blog.jetbrains.com/phpstorm/2017/09/uml-diagrams-in-phpstorm-2017-2/

Ventajas

  • Nice UI, diagrama final.
  • Capaz de refactorizar el código de un diagrama.
  • Capaz de agregar notas.
  • El diagrama de clases simboliza propiedades privadas / públicas, constructores, métodos muy bien.

Desventajas

  • Sin soporte para PHP 7.
  • Dolorosamente para usar. No se puede cambiar el tamaño de los cuadros generados.
  • Al agregar una nueva relación, las anteriores se pierden al azar: O wtf?
  • Reiniciar PhpStorm destruye los diagramas
  • Cambié mi mente, relaciones imposibles de usar

Resultado

De todos modos, después de una dolorosa hora de trabajo, solo pude generar recuadros no relacionados y tuve que usar un programa adicional para vincular las relaciones. Muy mal. Pero creo que una vez que lo hagan funcionar correctamente será una gran característica porque a medida que el código cambie, ¡los diagramas se actualizarán automáticamente!

Por ahora, no use PhpStorm para diagramas UML.


Puede usar Visual Paradigm para UML. Este podría no ser el producto mejor pagado (es US $ 699), solo como una opción si alguien quisiera probarlo. Puede crear un diagrama de clases a partir de PHP y viceversa, y no solo PHP, hay un montón de idiomas que puede elegir como C #, C ++, Ruby, Java, VB.NET, Python, Objective C, Perl, etc. También hay un prueba que puedes verificar


Recomiendo BOUML que:

  • es extremadamente rápido (la herramienta UML más rápida que se haya creado, consulte los benchmarks ),
  • tiene soporte de importación y exportación de PHP sólida como una roca (también es compatible con C ++, Java, Python)
  • es multiplataforma (Linux, Windows, otros SO),
  • tiene todas las funciones, impresionantemente desarrollado intensamente (mira el historial de desarrollo , es difícil creer que un progreso tan rápido sea posible).
  • admite complementos, tiene una arquitectura modular (esto permite contribuciones de los usuarios , parece que la comunidad BOUML se está formando)

Si está buscando generar UML fácilmente a partir de sus clases de PHP existentes, es posible que desee considerar PHPStorm 3.0 IDE. Hace un buen trabajo al replicar el código existente en UML.

Eche un vistazo a la lista de características de PHP Storm .


También está disponible la herramienta PHP UML de pear .

PHP_UML:

  • Puede generar archivos UML / XMI en la versión 1.4, o en la versión 2.1 (lógica, componente y vistas de implementación)
  • Puede generar una documentación API en formato HTML
  • Puede generar código PHP (código esqueleto) desde un archivo XMI dado
  • Puede convertir contenido UML / XMI de la versión 1.4 a la versión 2.1

Instálalo en la línea de comando a través de:

$ pear install pear/php_uml

(Esto solía ser $ pear install pear/php_uml-alpha pero el paquete desde entonces se ha estabilizado.)

Genera tu xmi:

$ phpuml -o project.xmi


También hay php2xmi . Tienes que hacer un poco de trabajo manual, pero genera todas las clases, así que todo lo que tienes que hacer es arrastrarlas a un diagrama de clase en Umbrello .

De lo contrario, generar un diagrama con el uso de reflection y graphviz es bastante simple. Tengo un fragmento aquí , que puedes usar como punto de partida.


el mejor software (Windows) que he encontrado para hacer PHP y UML es Sparx Systems Enterprise Architect . además de una pletora de features , admite lo following para PHP:

  • Invertir objeto orientado PHP en diagramas de clase UML
  • Generar definiciones de clase PHP a partir de diagramas de clase UML
  • Sincronice los cambios realizados en una clase UML en la definición de clase PHP correspondiente
  • Sincronice los cambios realizados en una definición de clase PHP en la clase UML correspondiente
  • Crear diagramas de secuencia UML para mostrar qué clases de PHP usan y cómo se usan
  • Produzca documentación detallada de su código PHP en formato RTF y HTML estándar
  • Realice ingeniería de código en modelos para generar páginas PHP base.

no gratis ($ 199), pero definitivamente vale la pena el dinero.