Cách tốt nhất để tạo sơ đồ UML từ mã nguồn Python là gì? [đóng cửa]


258

Một đồng nghiệp đang tìm cách tạo sơ đồ lớp UML từ hàng đống mã nguồn Python. Anh ta chủ yếu quan tâm đến các mối quan hệ thừa kế và quan tâm nhẹ đến các mối quan hệ thành phần và không quan tâm nhiều đến các thuộc tính lớp chỉ là nguyên thủy của Python.

Mã nguồn khá đơn giản và không quá tệ - chẳng hạn, nó không thực hiện bất kỳ phép thuật siêu dữ liệu ưa thích nào. (Phần lớn là từ thời Python 1.5.2, với một số thứ rắc rối "hiện đại" 2.3ish.)

Giải pháp tốt nhất hiện có để đề xuất là gì?


29
Mod không tìm thấy câu hỏi này mang tính xây dựng. Tôi (và nhiều người khác đã ủng hộ điều này) thấy nó hữu ích. Vậy thì sao? đó không phải là một thỏa thuận lớn hơn việc này không mang tính "xây dựng"!
yati sagade

13
Không mang tính xây dựng vì nó sẽ thu hút các cuộc tranh luận, tranh luận, thảo luận ?????? Đó không phải là những gì chúng ta muốn sao? Đây là một câu hỏi rất phù hợp ..
Bhushan

2
@yatisagade nếu bạn lưu ý rằng nó đã bị đóng, không bị xóa (và với điều này, nhiều upvote có thể thực tế không bao giờ bị xóa). Đóng cửa chỉ có nghĩa là nó không thể nhận được câu trả lời mới.
tacaswell

7
@Bhushan Không, chúng tôi không muốn thảo luận, chúng tôi muốn các cặp câu hỏi và câu trả lời có câu trả lời rõ ràng. Đây không phải là một đánh giá về nó là một câu hỏi thú vị hay một câu hỏi hữu ích, đó là vấn đề thuộc về chủ đề của SO. Chắc chắn bạn đồng ý rằng "biên tập viên tốt nhất là gì?" (obs emacs) không phải là một câu hỏi mang tính xây dựng, câu hỏi này hoàn toàn giống nhau.
tacaswell

@tacaswell Một số cuộc thảo luận rất phù hợp khi tinh chỉnh các câu hỏi thành định dạng Hỏi và Đáp.
user32882

Câu trả lời:


128

Bạn có thể đã nghe nói về Pylint giúp kiểm tra tĩnh mã Python. Ít người biết rằng nó đi kèm với một công cụ có tên Pyreverse vẽ sơ đồ UML từ mã python mà nó đọc. Pyreverse sử dụng graphviz như một phụ trợ.


Bạn có biết cách trực quan hóa các phương thức riêng tư bắt đầu bằng "_"
gustavz

1
Thật không may, sơ đồ gói pyreverse là rất lớn vì mọi thứ được đặt theo chiều ngang (nhiều hơn giới hạn graphviz, nhưng vẫn còn). Không hữu ích để bao gồm trong các tài liệu.
oarfish

@oarfish như một cách giải quyết, bạn có thể chọn các mô-đun bạn muốn đưa vào và tạo một số biểu đồ riêng biệt.
jjmontes

95

Epydoc là một công cụ để tạo tài liệu API từ mã nguồn Python. Nó cũng tạo ra các sơ đồ lớp UML, sử dụng Graphviz theo những cách ưa thích. Dưới đây là một ví dụ về sơ đồ được tạo từ mã nguồn của chính Epydoc.

Vì Epydoc thực hiện cả nội dung đối tượng và phân tích nguồn, nó có thể thu thập nhiều thông tin hơn đối với các máy phân tích mã tĩnh như Doxygen: nó có thể kiểm tra một lượng lớn các lớp và hàm được tạo động, nhưng cũng có thể sử dụng các nhận xét hoặc chuỗi không được gán làm nguồn tài liệu, ví dụ cho các biến và các thuộc tính công cộng lớp.


Có cách nào để có nó đầu ra đồ họa vector thay vì gifs không? Tôi không tìm thấy tài liệu nào về điều đó và các biểu đồ khá vô dụng đối với mọi thứ ngoài tài liệu html.
oarfish

3
Hiện tại, epydocdường như không thể tạo ra đồ thị. Kiểm tra báo cáo lỗi này .
Luís de Sousa

14
không hoạt động với python 3
tomsv 15/03/2017

23

Kiểm tra danh sách bảy công cụ uml cho python


2
Công cụ UML mã nguồn mở Pynsource pynsource.com của tôi được đề cập trên trang trên đã trải qua nhiều thay đổi phiên bản kể từ khi được đề cập. Bây giờ nó phân tích cú pháp Python 3, có thu phóng, bố cục, hỗ trợ kết xuất ASCII UML và PlantUML. Theo như tôi biết, Pynsource là công cụ UML duy nhất nhận ra các thuộc tính cá thể Python (không chỉ các thuộc tính lớp). Điều này có nghĩa là các biểu thức như self.myattr sẽ dẫn đến một thuộc tính thích hợp là my myrrr trong lớp UML kết quả. Sẵn sàng để chạy nhị phân có sẵn cho Mac, Windows, Ubuntu 18 và 16 - cũng như một repo Github mã nguồn mở.
abulka

8

Một số loại chương trình ứng xử tốt có thể được lập biểu đồ, nhưng trong trường hợp chung, nó không thể được thực hiện. Các đối tượng Python có thể được mở rộng trong thời gian chạy và các đối tượng thuộc bất kỳ loại nào cũng có thể được gán cho bất kỳ biến thể hiện nào. Chỉ ra các lớp mà một đối tượng có thể chứa con trỏ tới (thành phần) sẽ đòi hỏi sự hiểu biết đầy đủ về hành vi thời gian chạy của chương trình.

Các khả năng siêu dữ liệu của Python có nghĩa là lý do về cấu trúc kế thừa cũng sẽ đòi hỏi sự hiểu biết đầy đủ về hành vi thời gian chạy của chương trình.

Để chứng minh rằng những điều này là không thể, bạn lập luận rằng nếu tồn tại một sơ đồ UML như vậy, thì bạn có thể sử dụng một chương trình tùy ý, chuyển đổi các câu lệnh "tạm dừng" thành các câu lệnh sẽ tác động đến sơ đồ UML và sử dụng trình lập sơ đồ UML để giải quyết vấn đề tạm dừng, mà như chúng ta biết là không thể


8
Một số điều tốt, nhưng sự khước từ giải quyết bằng tay làm hỏng nó. Các trường hợp bệnh lý không phải là vấn đề ở đây. Cư xử tốt là đủ.
ddaa

Bạn có ý nghĩa gì, "từ bỏ"? Tôi đã không viết ra các bằng chứng đầy đủ, nhưng tôi đã cung cấp đủ thông tin rằng bất kỳ ai đã xem các bằng chứng tương tự đều có thể tạo ra chúng, một cho sáng tác và một cho thừa kế.
Andru Luvisi

14
Đây là một sự tương tự: diff / patch có thể thất bại theo nhiều cách khác nhau, một số trong số chúng không quan trọng. Nó vẫn rất hữu ích trong rất nhiều trường hợp thực tế. Trong trường hợp hợp lý, kế thừa biểu đồ là tầm thường. Phân quyền là khó khăn hơn, nhưng khả thi bằng cách suy luận trong phạm vi của một gói.
ddaa

7

Nếu bạn sử dụng nhật thực, có thể là PyUML . Không được sử dụng nó, mặc dù.


1
Đó là một gợi ý thực sự tốt, nhưng FWIW tôi nhận thấy trên trang dự án PyUML rằng họ chưa hỗ trợ Eclipse 3.4 (Ganymede). Tôi sẽ mong muốn được thử nó khi họ làm việc đó.
Bill Karwin

Bạn đã tình cờ để PyUML hoạt động với 3,4?
anijhaw

2
Các cam kết cuối cùng của dự án này bắt đầu từ năm 2009. Nó không hiển thị trong Thị trường và Eclipse không thể cài đặt nó từ .zipkho lưu trữ.
Luís de Sousa


5

Umbrello cũng làm điều đó. trong menu đi tới Code -> nhập dự án và sau đó trỏ đến thư mục gốc của dự án của bạn. sau đó nó đảo ngược mã cho ...


bạn có biết cách để Umbrello tạo ra sơ đồ lớp hoàn chỉnh (và các mối quan hệ giữa chúng, không chỉ các lớp - không nhớ cách gọi sơ đồ đó)
vlad-ardelean

2
À, bạn cần nhập các tệp và sau đó khi bạn kéo và thả các lớp vào vùng vẽ, các kết nối sẽ tự động được thêm vào.
Ô

5

vipera là một nhà thiết kế ứng dụng nhỏ, và uml được bao gồm. Bạn có thể thấy nó trong:

vipera

Trân trọng.


4

Các SPE IDE đã được xây dựng trong UML đấng sáng tạo. Chỉ cần mở các tệp trong SPE và nhấp vào tab UML.

Tôi không biết mức độ phù hợp cho nhu cầu của bạn, nhưng nó không yêu cầu bất kỳ tải xuống hoặc cấu hình bổ sung nào để sử dụng.


thật đáng buồn khi nó đã ngừng phát triển, nhưng vẫn hoạt động ở đây! (2013)
Abdelouahab

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.