Comment 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 est principalement intéressé par les relations d’héritage, et légèrement intéressé par les 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 n’est pas terriblement diabolique - il ne fait pas de magie de méta-classe fantaisiste.

Selon votre expérience quelle est la meilleure solution existante à recommander pour générer un diagramme UML à partir du code source Python ?

Vous avez peut-être entendu parler de Pylint qui permet de vérifier statiquement le code Python. Peu de gens savent qu’il est accompagné d’un outil nommé Pyreverse qui dessine des diagrammes UML à partir du code Python qu’il lit. Pyreverse utilise Graphviz comme backend.

Il s’utilise comme suit :

pyreverse -o png -p tonpackage .

où le . peut également être un fichier unique.

Epydoc est un outil permettant de générer de la documentation sur les 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.

Comme Epydoc réalise à la fois l’introspection des objets et l’analyse du code source, il peut recueillir plus d’informations que les analyseurs de code statique tels que Doxygen : il peut inspecter un grand nombre de classes et de fonctions générées dynamiquement, mais il peut également utiliser les commentaires ou les chaînes non assignées comme source de documentation, par exemple pour les variables et les attributs publics des classes.

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

Si vous utilisez Eclipse, vous pouvez peut-être utiliser PyUML.