Générateur PHP UML [fermé]

110

Comment générer un diagramme UML basé sur des classes existantes en PHP?

Jeffrey04
la source
2
Je ne travaille plus avec PHP, donc je n'ai pas de code à tester. Quand j'ai posté cela, aucune des réponses initiales n'en faisait assez, mais beaucoup de choses ont changé depuis. Je travaillais avec PHP 5.2, et c'est maintenant PHP7 de nos jours.
Jeffrey04

Réponses:

42

Il existe également l'outil PHP UML disponible chez pear .

PHP_UML:

  • Peut générer des fichiers UML / XMI en version 1.4 ou en version 2.1 (vues logiques, de composants et de déploiement)
  • Peut générer une documentation API au format HTML
  • Peut générer du code PHP (squelette de code) à partir d'un fichier XMI donné
  • Peut convertir le contenu UML / XMI de la version 1.4 à la version 2.1

Installez-le sur la ligne de commande via:

$ pear install pear/php_uml

(C'était autrefois, $ pear install pear/php_uml-alphamais le paquet est devenu stable depuis.)

Générez votre xmi:

$ phpuml -o project.xmi

kguest
la source
2
pour une raison quelconque, pear.com n'aime pas ce lien sans barre oblique: pear.php.net/package/PHP_UML
Stephen Fuhry
1
@Stephen, oui j'ai remarqué ça aussi! Si vous cliquez sur le lien, cela vous donne un 404, mais si vous sélectionnez la barre d'adresse et appuyez sur Entrée, cela fonctionne.
nickf
1
Quelques années plus tard, la commande est maintenant pear install PHP_UML-1.6.1(voir pear.php.net/package/PHP_UML/download/All ou pear.php.net/package/PHP_UML )
Ben
1
Cela devrait être la réponse acceptée. L'outil est spectaculaire.
Xofo
3
ne fonctionne pas avec php 7
DevWL
41

Je recommande fortement BOUML qui:

  • est extrêmement rapide (outil UML le plus rapide jamais créé, consultez les benchmarks ),
  • a un support d' importation et d'exportation PHP solide (prend également en charge C ++, Java, Python)
  • est multiplateforme (Linux, Windows, autres OS),
  • est complet, développé de manière impressionnante et intensive (regardez l' historique du développement , il est difficile de croire qu'un progrès aussi rapide soit possible).
  • prend en charge les plugins, a une architecture modulaire (cela permet les contributions des utilisateurs , on dirait que la communauté BOUML se forme)
Daniel Gelling
la source
Les repères sont vraiment impressionnants. J'adore l'architecte d'entreprise mais il n'a pas de support PHP. Je vais transmettre cet outil, merci.
Paul Dragoonis
1
@Paul Dragoonis Sparx Systems Enterprise Architect prend en charge PHP - et pas le pire .
hache.
5
La page Web de BOUML indique maintenant: "ATTENTION: En raison des violations de licence, attaques et insultes continues de la part des gens de wikipedia [...], j'ai décidé d'arrêter de travailler sur Bouml sauf pour corriger des bogues."
MPV
1
"[18 décembre 2011] Les téléchargements sont suspendus jusqu'à nouvel ordre" sur leur site Web officiel. http://bouml.free.fr/download.html - c'est parce que j'avais besoin d'une version pour Win7. J'imagine qu'il peut encore être disponible dans les référentiels Ubuntu - besoin de vérifier
Val Redchenko
4
Version 6.1 publiée le 23 septembre 2012 . Apparemment, le développement a repris. Aucun avis sur le ralentissement, l'arrêt, etc. bouml.fr/historic.html
Andrew Ensley
24

phUML

phUML est un générateur de diagrammes de classes UML entièrement automatique écrit en PHP, sous licence BSD. Il est capable d'analyser tout code source orienté objet PHP5 et de créer une représentation image appropriée de la structure oo basée sur la spécification UML.

Exemple UML

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

Guide étape par étape

Anthony Hatzopoulos
la source
nécessite SVN / subversion pour télécharger et ne dit pas vraiment quelle est la licence du code source, mais ça a l'air bien! yah je ferais attention à regarder le code source il n'y a absolument aucune licence dessus et le seul readme est sur le site je pense
La licence est liée juste là dans la barre latérale du site Web du projet, sous l'auteur, Creative Commons: creativecommons.org/licenses/by-nc-sa/3.0
Anthony Hatzopoulos
c'est la licence pour le contenu du site, la LICENCE pour le projet doit être incluse avec le projet lui-même.
3
J'ai envoyé un e-mail à l'auteur, Jakob et il a répondu avec une mise à jour du référentiel avec une licence BSD
Anthony Hatzopoulos
Je l'ai téléchargé et je l'ai fait fonctionner après un peu de bricolage. C'était vraiment très gentil, sauf que je ne peux pas faire fonctionner les associations, mais je suis sûr que je vais le comprendre. Sympa, simple. Pas de GUI cependant, mais pas si grave.
Impulss
19

le meilleur logiciel (Windows) que j'ai trouvé pour faire PHP et UML est Sparx Systems Enterprise Architect . outre une pléthore de fonctionnalités , il prend en charge les éléments suivants pour PHP:

  • Reverse engineering de PHP orienté objet dans des diagrammes de classes UML
  • Générer des définitions de classe PHP à partir de diagrammes de classes UML
  • Synchronisez les modifications apportées à une classe UML dans la définition de classe PHP correspondante
  • Synchronisez les modifications apportées dans une définition de classe PHP dans la classe UML correspondante
  • Créez des diagrammes de séquence UML pour montrer ce que les classes PHP utilisent et comment elles sont utilisées
  • Produisez une documentation détaillée de votre code PHP au format RTF et HTML standard
  • Effectuer l'ingénierie de code sur des modèles pour générer des pages PHP de base.

pas gratuit (199 $), mais ça vaut vraiment le coup.

hache.
la source
1
Wow, c'est un programme vraiment utile et professionnel, merci pour le conseil !! Je viens d'essayer le diagramme de classes UML générant avec la méthode d'ingénierie inverse de Sparx EA à partir du code source PHP, et cela a fonctionné comme un charme, j'ai été choqué de voir à quel point cela fonctionnait. : D Au fur et à mesure que nos projets grandissent et que nous créons de plus en plus d'objets, il devient de plus en plus difficile de garder un œil sur notre propre code, mais c'est d'une grande aide, car il génère les diagrammes UML de la bonne manière (de Bien sûr, peut-être que des exceptions peuvent se produire) APRÈS avoir terminé le code. Cela permet même de simplifier les relations entre les objets.
Sk8erPeter
@ax - Je suis un débutant, et je me perds un peu dans leur liste de fonctionnalités (sous "comparer les éditions"). Quel serait le nom de la fonctionnalité qui me permet de saisir du code PHP (ou un lien vers des fichiers PHP), et d'obtenir un diagramme en retour? Essayer de savoir de quelle version j'aurais besoin.
JDelage
7

Avez-vous déjà essayé Autodia ? La dernière fois que je l'ai essayé, ce n'était pas parfait, mais c'était assez bon.

Vinko Vrsalovic
la source
J'ai essayé autodia mais je ne peux pas générer un diagramme de classes précis (php5)
Jeffrey04
7

Il y a aussi php2xmi . Vous devez faire un peu de travail manuel, mais cela génère toutes les classes, donc tout ce que vous avez à faire est de les faire glisser dans un diagramme de classes dans Umbrello .

Sinon, générer un diagramme avec l'utilisation de la réflexion et du graphviz, est assez simple. J'ai un extrait ici , que vous pouvez utiliser comme point de départ.

troelskn
la source
7

Voici comment je l'ai fait (directement du code au dessin PDF sans dessin manuel de quoi que ce soit):

  1. Utilisez BOUML pour "reverse engineering de code PHP" [sic] pour extraire le modèle de classe (BOUML est disponible à partir du référentiel "Univers" d'Ubuntu). Je recommande sérieusement BOUML pour cette étape car c'est vraiment rapide par rapport à de nombreux autres programmes que j'ai essayés. De plus, il semble que BOUML semble extraire correctement le modèle (pour les pièces que BOUML tente même d'extraire).
  2. Utilisez BOUML pour exporter le modèle sous forme de fichier XMI 1.4
  3. Utilisez ArgoUML pour importer ledit fichier XMI (vous pouvez utiliser la version webstart pour cette étape)
  4. Exporter XMI depuis ArgoUML (je ne sais pas de quelle version / variante XMI la sortie est mais ce n'est pas le même résultat que la sortie de BOUML. Le argouml-graphviz ne peut pas gérer le fichier XMI directement depuis BOUML).
  5. Utilisez argouml-graphviz pour convertir le fichier XMI exporté par ArgoUML au format point (vous devrez peut-être utiliser saxon au lieu de xsltproc pour le faire fonctionner en raison de l'utilisation de XSLT2)
  6. Utilisez dot ou fdp ou sfdp pour rendre le diagramme de classes.

Voici un exemple de ligne de commande appropriée pour utiliser fdp pour générer un diagramme PDF (en supposant que le fichier de points généré par le traitement argouml-graphviz XLST est enregistré sous 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

Comme alternative, vous pouvez essayer PHP_UML ou php2xmi au lieu de BOUML pour faire la partie "reverse engineering". Je n'ai pas encore essayé ça.

(J'utilise l'expression "ingénierie inverse" car il semble que les gens UML utilisent ces mots lorsqu'ils veulent dire extraire des informations de classe et de méthode à partir du code source . j'interpréterais ces mots comme l'extraction d'informations d'un fichier binaire exécutable ou capturé brut données de fil.)

Si vous préférez dessiner le diagramme de classes à la main (au lieu d'utiliser l'ordinateur pour faire tout le dessin), vous pouvez utiliser BOUML ou ArgoUML pour le dessin. L'utilisation des données "reverse engineering" via BOUML aidera dans ce cas.

Mikko Rantalainen
la source
5

Si vous cherchez à générer facilement UML à partir de vos classes PHP existantes, vous pouvez envisager PHPStorm 3.0 IDE. Il fait un bon travail de réplication du code existant dans UML.

Jetez un œil à la liste des fonctionnalités de PHP Storm .

David Lundquist
la source
2
Ne visualise pas les dépendances, uniquement l'héritage.
Basil Musa
1

Vous pouvez utiliser Visual Paradigm pour UML. Ce n'est peut-être pas le produit le mieux payé (699 $ US), juste comme option si quelqu'un souhaite essayer. Il peut créer un diagramme de classes à partir de PHP et vice versa, et pas seulement de PHP, vous pouvez choisir un tas de langages tels que C #, C ++, Ruby, Java, VB.NET, Python, Objective C, Perl, etc. essai que vous pouvez vérifier.

Hendra Uzia
la source
1

En théorie, vous pouvez utiliser PhpStorm pour visualiser vos classes en utilisant UML. La génération n'est pas vraiment géniale mais vous pouvez efficacement refactoriser les choses et encore une fois, au moins prévisualiser les parents, les implémentations, les constantes, les attributs, les méthodes et leur visibilité de manière agréable.

Situation

Je souhaite visualiser une communication entre des composants déjà existants avec un collègue.

Processus à l'aide de PHPStorm

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

Avantages

  • Belle interface utilisateur, schéma final.
  • Capable de refactoriser le code à partir d'un diagramme.
  • Capable d'ajouter des notes.
  • Le diagramme de classes symbolise bien les propriétés privées / publiques, les constructeurs, les méthodes.

Désavantages

  • Pas de support pour PHP 7.
  • Douloureusement à utiliser. Impossible de redimensionner les boîtes générées.
  • Lors de l'ajout d'une nouvelle relation, les précédentes sont perdues au hasard: O wtf?
  • Le redémarrage de PhpStorm détruit les diagrammes
  • J'ai changé d'avis, impossible d'utiliser les relations

Résultat

Quoi qu'il en soit, après une heure pénible de travail, je n'ai pu générer que des boîtes sans rapport et j'ai dû utiliser un programme supplémentaire pour lier les relations. Vraiment mauvais. Mais je crois qu'une fois qu'ils le feront fonctionner correctement, ce sera une excellente fonctionnalité car à mesure que le code changera, les diagrammes seront automatiquement mis à jour!

Pour l'instant, n'utilisez pas PhpStorm pour les diagrammes UML.

Lukas Lukac
la source
Je suppose que c'est nouveau (:
Jeffrey04
Correct. Actuellement, je suis dans la même situation. J'ai développé une partie complexe d'un système et je souhaite la visualiser pour mon collègue. J'ai essayé plusieurs outils mais ils sont merdiques et moche :) Je vais le faire avec PHPStorm et mettre à jour ma réponse à quoi il ressemble et à quel point il est vraiment puissant. Je vous ferai part aujourd'hui du résultat @ Jeffrey04
Lukas Lukac
ça va, je ne fais pas PHP depuis un certain temps en fait
Jeffrey04
0

Eh bien, pour être honnête, avant tout, vous ne devez pas générer de modèle UML à partir du code, mais du code à partir du modèle UML;).

Même si vous êtes dans une situation rare, lorsque vous avez besoin de faire cette ingénierie inverse, il est généralement suggéré de le faire à la main ou au moins de ranger les diagrammes, car UML généré automatiquement a un visuel vraiment médiocre (= information) valeur la plupart du temps.

Si vous avez juste besoin de générer les diagrammes, c'est probablement une bonne chose de vous demander pourquoi exactement? Quel est le public visé et quel est le but? Qu'est-ce que le diagramme généré automatiquement a à offrir, quel code ne le fait pas?

Fondamentalement, je n'accepte qu'une seule réponse à cette question. C'est devenu trop gros et incompréhensible.

Ce qui est encore une fois une raison de commencer avec UML en premier lieu, par opposition à commencer à coder;) Cela s'appelle l'analyse et c'est en déclin, car chaque homme sur deux en entreprise pense que c'est un peu trop cher et pas vraiment nécessaire.

trueanalysis.eu
la source
7
C'est vrai, mais la vie est plus compliquée que certains principes, qui sont sages à utiliser. Vous devrez peut-être comparer le code réel avec le diagramme UML d'origine, ou analyser le code de quelqu'un ou du code, qui a été implémenté sans diagrammes UML.
DAH
3
Être en désaccord. Grande valeur obtenue en visualisant une base de code / module avec un diagramme. Le code est comme les directions de rue, mais avec trop de directions parfois on peut trouver une carte utile.
Basil Musa
1
La plupart des programmes de dessin UML ont une interface utilisateur si mauvaise qu'il est plus rapide d'écrire le code et de générer automatiquement le diagramme UML, même si vous jetez ensuite le code que vous avez utilisé pour générer le diagramme ...
Mikko Rantalainen