PythonソースコードからUML図を生成する最良の方法は何ですか?[閉まっている]


258

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

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

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


29
Modsはこの質問を建設的にはしなかった。私(およびこれを支持した他の多くの人)は、それが有用だと感じました。だから何?これは、「建設的」でないことよりも大きな問題はありません。
yati sagade 2013

13
議論、議論、議論を求めるため、建設的ではありません?????? それが私たちの望みではありませんか?これは非常に関連した質問です...
Bhushanの

2
@yatisagadeあなたがそれが削除されずに閉じられたことに気付いた場合(そしてこの多くの賛成投票ではおそらく実際には削除されないでしょう)。締めくくると、新しい答えを得ることができません。
tacaswell 14

7
@Bhushanいいえ、議論はしたくない、明確な答えを持つ質問と回答のペアが欲しい。それは、それが興味深い質問または有用な質問であるという判断ではなく、SOのトピックであることの問題です。きっとあなたは「最高の編集者とは何か」に同意するでしょう。(obs emacs)は建設的な質問ではありません。この質問はまったく同じです。
tacaswell 2014

@tacaswell質問をQ&A形式に洗練することに関して、いくつかの議論は非常に関連があります。
user32882

回答:


128

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


「_」で始まるプライベートメソッドを視覚化する方法を知っていますか
gustavz

1
残念ながら、すべてが水平に配置されているため、pyreverseパッケージ図は巨大です(graphvizの制限の詳細ですが、それでも変わりません)。ドキュメントに含めるのには役立ちません。
oarfish '10 / 10/18

回避策として@oarfishを使用して、含めるモジュールを選択し、いくつかの個別のグラフを作成できます。
jjmontes

95

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

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


GIFの代わりにベクターグラフィックスを出力する方法はありますか?それに関するドキュメントは見つかりませんでした。グラフは、htmlドキュメント以外にはまったく役に立ちません。
oarfish 2016

3
現在、epydocグラフを生成できないようです。このバグレポートを確認してください。
ルイス・デ・スーザ

14
python 3では機能しません
tomsv 2017年

23

Python用7つのUMLツールのこのリストを確認してください


2
上記のページで言及した私のオープンソースUMLツールPynsource pynsource.comは、言及されてから多くのバージョン変更が行われました。現在、Python 3を解析し、ズーム、レイアウト、ASCII UML、PlantUMLレンダリングをサポートしています。Pynsourceは、私が知る限り、(クラス属性だけでなく)Pythonインスタンス属性を認識する唯一のUMLツールでもあります。つまり、self.myattrのような式は、結果のUMLクラスに適切な属性「myattr」を生成します。実行可能なバイナリは、Mac、Windows、Ubuntu 18および16で利用できます。オープンソースのGithubリポジトリも利用できます。
abulka

8

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

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

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


8
良い点もいくつかありますが、停止を解決する手放しはそれを台無しにします。病理学的症例はここでは問題ではありません。行儀の良いもので十分です。
ddaa 2008年

「手放す」とはどういう意味ですか?完全な証明を書き出すことはしませんでしたが、同様の証明を見た人なら誰でも、構成用と継承用に作成できるように十分な情報を提供しました。
Andru Luvisi 2008

14
これが類推です:diff / patchは、さまざまな方法で失敗する可能性があり、そのいくつかは簡単です。それはまだ多くの実際のケースで非常に便利です。合理的なケースでは、継承のダイアグラムは簡単です。委任はよりトリッキーですが、パッケージの境界内での型推論によって実現可能です。
ddaa 2008年

7

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


1
これは本当に良い提案ですが、PyUMLプロジェクトサイトでFWIWがEclipse 3.4(Ganymede)をまだサポートしていないことに気付きました。彼らがそれを解決するとき、私はそれを試すのを楽しみにしています。
Bill Karwin、

PyUMLを3.4で動作させましたか?
anijhaw

2
このプロジェクトの最後のコミットは2009年までさかのぼります。それはマーケットプレイスに表示されず、Eclipseは.zipアーカイブからインストールできません。
ルイス・デ・スーザ


5

アンブレロもそうします。メニューで、コード->プロジェクトのインポートに移動し、プロジェクトのルートディレクトリをポイントします。次に、yaのコードを逆にします...


Umbrelloに完全なクラス図を生成する方法を知っていますか(およびクラス間の関係だけでなく、クラス間の関係-その図の呼び出し方法を覚えていません)
vlad-ardelean

2
ああ、ファイルをインポートする必要があります。その後、クラスを描画領域にドラッグアンドドロップすると、接続が自動的に追加されます。
Hosane 2013年

5

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

バイペラ

宜しくお願いします。


4

SPE IDE内蔵しているUMLの作成者。SPEでファイルを開き、UMLタブをクリックするだけです。

あなたのニーズにどの程度包括的であるかはわかりませんが、追加のダウンロードや設定を使用する必要はありません。


悲しいことに、それは開発を停止しましたが、まだここで動作します!(2013)
Abdelouahab

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.