web-dev-qa-db-ja.com

PythonソースコードからUMLダイアグラムを生成する最良の方法は何ですか?

同僚がPythonソースコードのヒープからUMLクラス図を生成しようとしています。彼は主に継承関係に興味があり、構成関係にやや興味があり、単にPythonプリミティブであるクラス属性についてはあまり気にしません。

ソースコードは非常に単純であり、それほど悪ではありません。たとえば、派手なメタクラスマジックは実行しません。 (ほとんどがPython 1.5.2の時代のもので、「モダンな」2.3ishのものが散りばめられています。)

推奨する既存の最適なソリューションは何ですか?

225
Mike Pirnat

Pythonコードを静的にチェックするのに役立つ Pylint を聞いたことがあるかもしれません。読み込むpythonコードからUML図を描画する Pyreverse というツールが付属していることを知っている人はほとんどいません。 Pyreverseはgraphvizをバックエンドとして使用します。

108
Nicolas Chauvat

Epydoc は、PythonソースコードからAPIドキュメントを生成するツールです。また、 Graphviz を派手な方法で使用して、UMLクラス図を生成します。 ダイアグラムの例 Epydoc自体のソースコードから生成されます。

Epydocはオブジェクトのイントロスペクションとソース解析の両方を実行するため、Doxygenなどの静的コードアナライザーに関する詳細情報を収集できます:動的に生成されたかなりの量のクラスと関数を検査できますが、コメントや未割り当ての文字列をドキュメントソースとして使用することもできます(例:変数およびクラスのパブリック属性用。

91
piro
18
Jordi Cabot

正常に動作するプログラムの特定のクラスは図式化できますが、一般的なケースでは実行できません。 Pythonオブジェクトは実行時に拡張でき、任意のタイプのオブジェクトを任意のインスタンス変数に割り当てることができます。オブジェクトがどのクラス(構成)へのポインタを含むことができるかを理解するには、プログラムの実行時の動作を完全に理解する必要があります。

Pythonのメタクラス機能により、継承構造についての推論には、プログラムの実行時の動作を完全に理解する必要があります。

これらが不可能であることを証明するために、そのようなUMLダイヤグラムが存在する場合、任意のプログラムを使用し、「停止」ステートメントをUMLダイアグラムに影響するステートメントに変換し、UMLダイヤグラムを使用して停止問題を解決できると主張します。私たちが知っているようにそれは不可能です。

8
Andru Luvisi

Eclipseを使用している場合は、おそらく PyUML です。ただし、使用していません。

7
David Arcos

Gaphor に言及する価値があります。 Pythonモデリング/ UMLツール。

7
Ali Afshar

Sparxの Enterprise Architect は、Pythonソースのラウンドトリップを実行します。無料の期間限定トライアル版があります。

4
chimp

viperaは小さなアプリケーションデザイナーであり、umlが含まれています。あなたはそれを見ることができます:

vipera

宜しくお願いします。

4
Ángel Luis

SPE IDEにはUMLクリエーターが組み込まれています。 SPEでファイルを開き、UMLタブをクリックするだけです。

私はそれがあなたのニーズにとってどれほど包括的かわかりませんが、使用するために追加のダウンロードや構成を必要としません。

3
crystalattice

Umbrelloもそれを行います。メニューで[コード]-> [プロジェクトのインポート]に移動し、プロジェクトのルートdeirectoryをポイントします。次に、yaのコードを逆にします...

3
Hosane