Was ist der beste Weg, ein UML-Diagramm aus Python-Quellcode zu erstellen?

Ein Kollege sucht nach UML-classndiagrammen aus Python-Quellcode. Er interessiert sich in erster Linie für die inheritancesverhältnisse und interessiert sich ein wenig für kompositorische Beziehungen, und kümmert sich nicht um classnattribute, die nur Python-Primitive sind.

Der Quellcode ist ziemlich geradlinig und nicht enorm böse – es macht zum Beispiel keine ausgefallene Metaklassenmagie. (Es ist hauptsächlich aus den Tagen von Python 1.5.2, mit einigen Sprenkeln von “modernen” 2.3ish Zeug.)

Was ist die beste vorhandene Lösung, um zu empfehlen?

Epydoc ist ein Werkzeug zum Generieren von API-Dokumentation aus Python-Quellcode. Es generiert auch UML-classndiagramme, die Graphviz auf raffinierte Weise verwenden. Hier ist ein Beispiel für ein Diagramm, das aus dem Quellcode von Epydoc selbst generiert wurde.

Da Epydoc sowohl Objekt-Introspektion als auch Quell-Parsing durchführt, kann es mehr Informationen zu statischen Code-Analysatoren wie Doxygen sammeln: Es kann eine große Anzahl dynamisch generierter classn und functionen untersuchen, aber auch Kommentare oder nicht zugewiesene Strings als Dokumentationsquelle verwenden für Variablen und öffentliche Attribute der class.

Sie haben vielleicht von Pylint gehört , das hilft, Python-Code statisch zu überprüfen. Wenige Leute wissen, dass es mit einem Tool namens Pyreverse kommt , das UML-Diagramme aus dem gelesenen Python-Code zeichnet. Pyreverse verwendet graphviz als Backend.

Überprüfen Sie diese Liste von sieben UML-Tools für Python

Bestimmte classn von Programmen, die sich gut benehmen, können zwar diagrammierbar sein, aber im allgemeinen Fall ist dies nicht möglich. Python-Objekte können zur Laufzeit erweitert werden, und jeder Instanzvariable können Objekte beliebigen Typs zugewiesen werden. Um herauszufinden, in welchen classn ein Objekt pointers auf (Komposition) enthalten kann, wäre ein vollständiges Verständnis des Laufzeitverhaltens des Programms erforderlich.

Die Metaklassenfunktionen von Python bedeuten, dass das Nachdenken über die inheritancesstruktur auch ein vollständiges Verständnis des Laufzeitverhaltens des Programms erfordert.

Um zu beweisen, dass dies unmöglich ist, argumentieren Sie, dass, wenn ein solches UML-Diagramm existiert, Sie ein beliebiges Programm verwenden, “Halt” -statementen in statementen umwandeln können, die das UML-Diagramm beeinflussen, und das UML-Diagramm verwenden, um das Anhalteproblem zu lösen. was, wie wir wissen, unmöglich ist.

Wenn du Eclipse benutzt, vielleicht PyUML . Habe es aber nicht benutzt.

Erwähnenswert ist Gaphor . Ein Python-Modellierungs- / UML-Tool.

Die SPE IDE verfügt über einen integrierten UML-Creator. Öffnen Sie einfach die Dateien in SPE und klicken Sie auf die Registerkarte UML.

Ich weiß nicht, wie umfassend es für Ihre Bedürfnisse ist, aber es erfordert keine zusätzlichen Downloads oder Konfigurationen zu verwenden.

Sparx Enterprise Architect führt eine Rundum-Auslösung der Python-Quelle durch. Sie haben eine kostenlose zeitlich begrenzte Testversion.

Umbrello macht das auch. Gehen Sie im Menü zu Code -> Projekt importieren und zeigen Sie auf das Wurzelverzeichnis Ihres Projekts. dann kehrt es den Code für ya um …

vipera ist ein kleiner Anwendungsdesigner und uml ist im Lieferumfang enthalten. Sie können es sehen in:

Vipera

Freundliche Grüße.