web-dev-qa-db-fra.com

Quel est le meilleur moyen de générer un diagramme UML à partir du code source Python?

Un collègue cherche à générer des diagrammes de classes UML à partir de tas de code source Python. Il s'intéresse principalement aux relations d'héritage, et modérément aux relations de composition, et se moque bien des attributs de classe qui ne sont que des primitives Python.

Le code source est assez simple et n'est pas terriblement mauvais - il ne fait pas de magie de métaclasse sophistiquée, par exemple. (C'est principalement du temps de Python 1.5.2, avec quelques éclaboussures de trucs "modernes" 2.3ish.)

Quelle est la meilleure solution existante à recommander?

238
Mike Pirnat

Vous avez peut-être entendu parler de Pylint qui facilite la vérification statique du code Python. Peu de gens savent qu'il est livré avec un outil nommé Pyreverse qui dessine des diagrammes UML à partir du code python qu'il lit. Pyreverse utilise graphviz comme backend.

113
Nicolas Chauvat

Epydoc est un outil permettant de générer une documentation API à partir du code source Python. Il génère également des diagrammes de classes UML, en utilisant Graphviz de manière très élégante. Voici n exemple de diagramme généré à partir du code source d’Epydoc lui-même.

Etant donné que Epydoc effectue à la fois l’introspection des objets et l’analyse de source, il peut collecter davantage d’informations sur les analyseurs de code statiques tels que Doxygen: il peut inspecter une bonne quantité de classes et de fonctions générées dynamiquement, mais peut également utiliser des commentaires ou des chaînes non attribuées comme source de documentation, par exemple. pour les variables et les attributs publics de classe.

90
piro

Vérifiez cette liste de sept outils uml pour python

19
Jordi Cabot

Certaines classes de programmes bien conçus peuvent être schématisées, mais dans le cas général, cela ne peut pas être fait. Les objets Python peuvent être étendus au moment de l'exécution et les objets de tout type peuvent être affectés à toute variable d'instance. Déterminer à quelles classes un objet peut contenir des pointeurs (composition) nécessiterait une compréhension complète du comportement du programme à l'exécution.

Les capacités de métaclasse de Python signifient que le raisonnement sur la structure d'héritage nécessite également une compréhension complète du comportement du programme à l'exécution.

Pour prouver que cela est impossible, vous soutenez que si un tel diagrammeur UML existait, vous pourriez alors prendre un programme arbitraire, convertir les instructions "halt" en instructions qui auraient une incidence sur le diagramme UML et utiliser le diagrammeur UML pour résoudre le problème d'arrêt, ce qui, comme nous le savons, est impossible.

7
Andru Luvisi

Il convient de mentionner Gaphor . Un outil de modélisation/UML Python.

7
Ali Afshar

Si vous utilisez Eclipse, peut-être PyUML . Je ne l'ai pas utilisé, cependant.

6
David Arcos

vipera est un petit concepteur d’applications, et l’umml est inclus. Vous pouvez le voir dans:

vipera

Meilleures salutations.

4
Ángel Luis

Umbrello le fait aussi. Dans le menu, sélectionnez Code -> Importer un projet, puis pointez sur le répertoire racine de votre projet. alors il inverse le code pour toi ...

4
Hosane

Le SPE IDE a un créateur UML intégré. Ouvrez simplement les fichiers dans SPE et cliquez sur l'onglet UML.

Je ne sais pas à quel point c'est compréhensif pour vos besoins, mais cela ne nécessite aucun téléchargement ni configuration supplémentaire à utiliser.

3
crystalattice

Sparx Enterprise Architect effectue un aller-retour de la source Python. Ils ont une édition d'essai gratuite limitée dans le temps.

3
chimp