Apa cara terbaik untuk menghasilkan diagram UML dari kode sumber Python? [Tutup]


258

Seorang kolega sedang mencari untuk menghasilkan diagram kelas UML dari tumpukan kode sumber Python. Dia terutama tertarik pada hubungan warisan, dan sedikit tertarik pada hubungan komposisi, dan tidak terlalu peduli tentang atribut kelas yang hanya primitif Python.

Kode sumbernya cukup mudah dan tidak terlalu jahat - misalnya, tidak melakukan keajaiban metaclass mewah. (Ini sebagian besar dari zaman Python 1.5.2, dengan beberapa taburan hal-hal 2.3ish "modern".)

Apa solusi terbaik yang ada untuk direkomendasikan?


29
Mod tidak menganggap pertanyaan ini konstruktif. Saya (dan banyak orang lain yang telah menyukai ini) merasa bermanfaat. Terus? itu bukan masalah yang lebih besar daripada ini tidak "konstruktif"!
yati sagade

13
Tidak konstruktif karena akan mengumpulkan debat, argumen, diskusi ?????? Bukankah itu yang kita inginkan? Ini adalah pertanyaan yang sangat relevan ..
Bhushan

2
@yatisagade jika Anda perhatikan ditutup, tidak dihapus (dan dengan ini banyak upvotes mungkin praktis tidak pernah bisa dihapus). Menutup berarti tidak bisa mendapatkan jawaban baru.
tacaswell

7
@Bhushan Tidak, kami tidak ingin diskusi, kami ingin pasangan tanya jawab yang memiliki jawaban yang jelas. Ini bukan penilaian tentang itu menjadi pertanyaan yang menarik atau pertanyaan yang berguna, itu adalah masalah menjadi topik untuk SO. Tentunya Anda setuju bahwa "Apa editor terbaik?" (obs emacs) bukan pertanyaan yang konstruktif, pertanyaan ini persis sama.
tacaswell

@tacaswell Beberapa diskusi sangat relevan dalam hal memperbaiki pertanyaan menjadi format tanya jawab.
user32882

Jawaban:


129

Anda mungkin pernah mendengar tentang Pylint yang membantu memeriksa kode Python secara statis. Beberapa orang tahu bahwa itu datang dengan alat bernama Pyreverse yang menarik diagram UML dari kode python yang dibacanya. Pyreverse menggunakan graphviz sebagai backend.


apakah Anda tahu cara memvisualisasikan metode pribadi yang dimulai dengan "_"
gustavz

1
Sayangnya, diagram paket pyreverse sangat besar karena semuanya ditempatkan secara horizontal (lebih dari batasan graphviz, tetapi masih). Tidak berguna untuk dimasukkan dalam dokumen.
oarfish

@oarfish sebagai solusi, Anda dapat memilih modul yang ingin Anda sertakan, dan membuat beberapa grafik terpisah.
jjmontes

95

Epydoc adalah alat untuk menghasilkan dokumentasi API dari kode sumber Python. Ini juga menghasilkan diagram kelas UML, menggunakan Graphviz dengan cara mewah. Berikut adalah contoh diagram yang dihasilkan dari kode sumber Epydoc itu sendiri.

Karena Epydoc melakukan introspeksi objek dan parsing sumber, ia dapat mengumpulkan lebih banyak informasi sehubungan dengan penganalisa kode statis seperti Doxygen: ia dapat memeriksa sejumlah adil kelas dan fungsi yang dihasilkan secara dinamis, tetapi juga dapat menggunakan komentar atau string yang tidak ditetapkan sebagai sumber dokumentasi, misalnya untuk variabel dan atribut publik kelas.


Apakah ada cara untuk mengeluarkan grafis vektor, bukan gif? Saya tidak menemukan dokumentasi tentang itu dan grafiknya cukup berguna untuk apa pun selain html doc.
oarfish

3
Saat ini, epydoctampaknya tidak dapat menghasilkan grafik. Lihat laporan bug ini .
Luís de Sousa

14
tidak bekerja dengan python 3
tomsv

23

2
Alat UML open source saya Pynsource pynsource.com yang dimaksud pada halaman di atas telah mengalami banyak perubahan versi sejak disebutkan. Sekarang mem-parsing Python 3, memiliki zoom, tata letak, ASCII UML dan dukungan rendering PlantUML. Pynsource juga, sejauh yang saya tahu, satu-satunya alat UML yang mengenali atribut instance Python (bukan hanya atribut kelas). Ini berarti bahwa ekspresi seperti self.myattr akan menghasilkan atribut yang tepat "myattr" di kelas UML yang dihasilkan. Binari yang siap dijalankan tersedia untuk Mac, Windows, Ubuntu 18 dan 16 - serta repo Github open source.
abulka

8

Kelas-kelas tertentu dari program yang berperilaku baik mungkin diagram diagram, tetapi dalam kasus umum, itu tidak dapat dilakukan. Objek Python dapat diperpanjang pada saat run time, dan objek dari tipe apa pun dapat ditugaskan ke variabel instan apa pun. Mencari tahu kelas apa objek dapat berisi pointer ke (komposisi) akan membutuhkan pemahaman penuh tentang perilaku runtime program.

Kemampuan metaclass Python berarti bahwa penalaran tentang struktur warisan juga akan membutuhkan pemahaman penuh tentang perilaku runtime program.

Untuk membuktikan bahwa ini tidak mungkin, Anda berpendapat bahwa jika diagram UML seperti itu ada, maka Anda dapat mengambil program sewenang-wenang, mengonversi pernyataan "berhenti" menjadi pernyataan yang akan memengaruhi diagram UML, dan menggunakan diagrammer UML untuk menyelesaikan masalah penghentian, yang kita tahu tidak mungkin.


8
Beberapa hal baik, tetapi pengabaian tangan yang berhenti menghentikannya. Kasus-kasus patologis bukan masalah di sini. Berperilaku baik sudah cukup.
ddaa

Apa maksudmu, "melepaskan tangan"? Saya tidak menulis bukti lengkap, tetapi saya memberikan informasi yang cukup sehingga siapa pun yang telah melihat bukti serupa dapat membuatnya, satu untuk komposisi dan satu untuk warisan.
Andru Luvisi

14
Berikut ini analogi: diff / patch bisa gagal dalam banyak cara yang berbeda, beberapa di antaranya sepele. Itu masih sangat berguna dalam banyak kasus dunia nyata. Dalam kasus-kasus yang wajar, pembuatan diagram warisan adalah sepele. Delegasi lebih rumit, tetapi layak dengan tipe inferensi dalam batas-batas paket.
ddaa

7

Jika Anda menggunakan gerhana, mungkin PyUML . Tapi belum pernah menggunakannya.


1
Itu saran yang sangat bagus, tetapi FWIW saya perhatikan di situs proyek PyUML bahwa mereka belum mendukung Eclipse 3.4 (Ganymede). Saya akan menantikan untuk mencobanya ketika mereka berhasil.
Bill Karwin

Apakah Anda mendapatkan PyUML bekerja dengan 3.4?
anijhaw

2
Komitmen terakhir pada tanggal proyek ini kembali ke 2009. Itu tidak muncul di Marketplace dan Eclipse tidak dapat menginstalnya dari .ziparsip.
Luís de Sousa


5

Umbrello juga melakukannya. di menu buka Kode -> proyek impor dan kemudian arahkan ke direktori root proyek Anda. maka itu membalikkan kode untuk ya ...


apakah Anda tahu cara untuk membuat Umbrello menghasilkan diagram kelas lengkap (dan hubungan di antara mereka, bukan hanya kelas sendiri - tidak ingat bagaimana diagram itu disebut)
vlad-ardelean

2
AAhh, Anda perlu mengimpor file dan kemudian ketika Anda menyeret dan melepaskan kelas ke area gambar, koneksi secara otomatis ditambahkan.
Hosane

5

vipera adalah perancang aplikasi kecil, dan uml disertakan. Anda bisa melihatnya di:

vipera

Salam Hormat.


4

The SPE IDE memiliki built-in UML pencipta. Cukup buka file di SPE dan klik pada tab UML.

Saya tidak tahu seberapa komprensifnya untuk kebutuhan Anda, tetapi tidak memerlukan unduhan atau konfigurasi tambahan untuk digunakan.


sayangnya itu telah berhenti berkembang, tetapi masih bekerja di sini! (2013)
Abdelouahab

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.