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 s'intéresse légèrement aux relations de composition, et ne se soucie pas beaucoup des attributs de classe qui ne sont que des primitives Python.
Le code source est assez simple et pas terriblement mauvais - il ne fait pas de magie de métaclasse fantaisie, par exemple. (C'est principalement à l'époque de Python 1.5.2, avec quelques arrosages de trucs 2.3ish "modernes".)
Quelle est la meilleure solution existante à recommander?
Réponses:
Vous avez peut-être entendu parler de Pylint qui aide à vérifier statiquement le 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.
Il est utilisé comme ceci:
où le
.
peut également être un seul fichier.la source
Epydoc est un outil pour générer de la documentation API à partir du code source Python. Il génère également des diagrammes de classes UML, en utilisant Graphviz de manière sophistiquée. Voici un exemple de diagramme généré à partir du code source d'Epydoc lui-même.
Parce qu'Epydoc effectue à la fois une introspection d'objets et une analyse de source, il peut recueillir plus 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.
la source
epydoc
semble incapable de générer des graphiques. Consultez ce rapport de bogue .Consultez cette liste de sept outils uml pour python
la source
Certaines classes de programmes bien comportés 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 des objets de tout type peuvent être affectés à n'importe quelle variable d'instance. Déterminer à quelles classes un objet peut contenir des pointeurs vers (composition) nécessiterait une compréhension complète du comportement d'exécution du programme.
Les capacités de métaclasse de Python signifient que le raisonnement sur la structure d'héritage nécessiterait également une compréhension complète du comportement d'exécution du programme.
Pour prouver que cela est impossible, vous soutenez que si un tel diagramme UML existait, alors vous pourriez prendre un programme arbitraire, convertir des instructions "halt" en instructions qui auraient un impact sur le diagramme UML et utiliser le diagramme UML pour résoudre le problème d'arrêt, qui, comme nous le savons, est impossible.
la source
Si vous utilisez Eclipse, peut-être PyUML . Je ne l'ai pas utilisé, cependant.
la source
.zip
archive.Il convient de mentionner Gaphor . Un outil de modélisation Python / UML.
la source
Umbrello fait ça aussi. dans le menu, accédez à Code -> importer le projet, puis pointez sur le répertoire racine de votre projet. puis il inverse le code pour toi ...
la source
vipera est un petit concepteur d'applications, et uml est inclus. Vous pouvez le voir dans:
vipera
Meilleures salutations.
la source
L' IDE SPE 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 cela correspond à vos besoins, mais cela ne nécessite aucun téléchargement ou configuration supplémentaire à utiliser.
la source
L' architecte d'entreprise de Sparx effectue un aller-retour de la source Python. Ils ont une édition d'essai gratuite limitée dans le temps.
la source