파이썬 소스 코드에서 UML 다이어그램을 생성하는 가장 좋은 방법은 무엇입니까? [닫은]


258

동료가 파이썬 소스 코드의 힙에서 UML 클래스 다이어그램을 생성하려고합니다. 그는 주로 상속 관계에 관심이 있고 구성 관계에 약간 관심이 있으며 Python 기본 요소 인 클래스 속성에 대해서는 크게 신경 쓰지 않습니다.

소스 코드는 매우 간단하고 사악하지는 않습니다. 예를 들어 멋진 메타 클래스 마술은하지 않습니다. (이것은 대부분 파이썬 1.5.2 시절에 ​​시작되었으며, "현대"2.3ish 것들이 뿌려졌습니다.

권장하는 가장 좋은 기존 솔루션은 무엇입니까?


29
개조는이 질문을 건설적으로 찾지 못했습니다. 나는 (그리고 이것을 좋아 한 많은 다른 사람들) 그것이 유용하다고 생각했다. 그래서 무엇? 그것은 이것보다 더 큰 거래는 "건설적인"되지 않는하지 않습니다!
yati sagade

13
토론, 논쟁, 토론을 요구하기 때문에 건설적이지 않다 ?????? 우리가 원하는 것이 아닌가? 이것은 매우 관련이있는 질문입니다.
Bhushan

2
@yatisagade 당신이 그것이 닫히고 닫히지 않았다면 주목하십시오. 닫는 것은 새로운 답변을 얻을 수 없다는 것을 의미합니다.
tacaswell

7
@Bhushan 아니요, 우리는 토론을 원하지 않습니다. 명확한 답변을 가진 질문과 답변을 원합니다. 그것은 흥미로운 질문이나 유용한 질문이라는 판단이 아니며, SO에 대한 주제입니다. "최고의 편집자는 무엇입니까?" (이맥스)는 건설적인 질문이 아닙니다.이 질문은 정확히 같은 형입니다.
tacaswell

@tacaswell 일부 토론은 질문을 Q & A 형식으로 구체화 할 때 매우 관련이 있습니다.
user32882

답변:


128

파이썬 코드를 정적으로 검사하는 데 도움 이되는 Pylint에 대해 들어 보셨을 것입니다 . 파이썬 코드에서 UML 다이어그램을 그리는 Pyreverse 라는 도구가 포함되어 있다는 것을 아는 사람은 거의 없습니다 . Pyreverse는 graphviz를 백엔드로 사용합니다.


"_"로 시작하는 개인 메소드를 시각화하는 방법을 알고 계십니까
gustavz

1
불행히도, 모든 것이 수평으로 배치되어 있기 때문에 pyreverse 패키지 다이어그램은 거대합니다 (그래프 한계 제한은 더 많지만 여전히). 문서에 포함하는 데 유용하지 않습니다.
oarfish

해결 방법으로 @ oarfish를 사용하면 포함하려는 모듈을 체리 선택하고 여러 개의 개별 그래프를 만들 수 있습니다.
jjmontes

95

Epydoc 은 Python 소스 코드에서 API 문서를 생성하는 도구입니다. 또한 멋진 방법으로 Graphviz 를 사용하여 UML 클래스 다이어그램을 생성 합니다. 다음은 Epydoc 자체의 소스 코드에서 생성 된 다이어그램의 예입니다 .

Epydoc은 객체 검사와 소스 파싱을 모두 수행하기 때문에 Doxygen과 같은 정적 코드 분석기와 관련하여 더 많은 정보를 수집 할 수 있습니다. 변수 및 클래스 공용 속성


gif 대신 벡터 그래픽을 출력하는 방법이 있습니까? 나는 그것에 관한 문서를 찾지 못했고 그래프는 html doc 이외의 다른 것에 대해서는 쓸모가 없습니다.
oarfish

3
현재 epydoc그래프를 생성 할 수없는 것 같습니다. 이 버그 리포트를 확인하십시오 .
루이스 드 수사

14
python 3에서 작동하지 않습니다
tomsv

23

파이썬을위한 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 객체는 런타임에 확장 할 수 있으며 모든 유형의 객체를 모든 인스턴스 변수에 할당 할 수 있습니다. 객체가 (컴포지션)에 대한 포인터를 포함 할 수있는 클래스를 파악하려면 프로그램의 런타임 동작을 완전히 이해해야합니다.

파이썬의 메타 클래스 기능은 상속 구조에 대한 추론이 프로그램의 런타임 동작을 완전히 이해해야한다는 것을 의미합니다.

이것이 불가능하다는 것을 증명하기 위해, 그러한 UML 다이어그램 머가 존재한다면, 임의의 프로그램을 가지고 "halt"문장을 UML 다이어그램에 영향을 줄 문장으로 변환하고 UML 다이어그램 머를 사용하여 정지 문제를 해결할 수 있다고 주장합니다. 아시다시피 불가능합니다.


8
좋은 점이 있지만, 손을 멈춘 채 손을 대면 망가집니다. 병리학 적 사례는 여기서 중요하지 않습니다. 행동이 충분합니다.
ddaa

"손대기"란 무엇입니까? 나는 전체 증거를 작성하지는 않았지만 비슷한 증거를 본 사람이라면 누구나 구성과 상속에 대한 증거를 만들 수있는 충분한 정보를 제공했습니다.
Andru Luvisi

14
차이점은 다음과 같습니다. diff / patch는 많은 다른 방식으로 실패 할 수 있습니다. 많은 실제 사례에서 여전히 매우 유용합니다. 합리적인 경우 상속 다이어그램을 작성하는 것은 쉽지 않습니다. 위임은 더 까다 롭지 만 패키지 경계 내에서 형식 유추에 의해 실현 가능합니다.
ddaa

7

이클립스를 사용한다면 아마도 PyUML 일 것 입니다 . 그래도 사용하지 않았습니다.


1
정말 좋은 제안이지만 FyWol은 PyUML 프로젝트 사이트에서 아직 Eclipse 3.4 (Ganymede)를 지원하지 않는다는 것을 알았습니다. 그들이 그것을 해결할 때 그것을 시도하기를 기대합니다.
Bill Karwin

PyUML이 3.4에서 작동하게 되었습니까?
anijhaw

2
이 프로젝트에 대한 마지막 커밋은 2009 년으로 거슬러 올라갑니다. Marketplace에 표시되지 않으며 Eclipse가 .zip아카이브 에서이를 설치할 수 없습니다 .
루이스 드 수사


5

우산도 그렇게합니다. 메뉴에서 코드-> 프로젝트 가져 오기로 이동 한 다음 프로젝트의 루트 deirectory를 가리 킵니다. 그런 다음 나중에 코드를 뒤집습니다 ...


Umbrello가 완전한 클래스 다이어그램을 생성하게하는 방법에 대해 알고 있습니까? (그리고 클래스 자체가 아니라 이들 간의 관계-다이어그램이 어떻게 호출되는지 기억하지 마십시오)
vlad-ardelean

2
AAhh, 파일을 가져와야하며 클래스를 도면 영역으로 끌어다 놓으면 연결이 자동으로 추가됩니다.
Hosane

5

vipera는 작은 응용 프로그램 디자이너이며 uml이 포함되어 있습니다. 당신은 그것을 볼 수 있습니다 :

비 페라

친애하는.


4

SPE IDE가 내장 된 UML 창조자. SPE에서 파일을 열고 UML 탭을 클릭하십시오.

귀하의 요구에 얼마나 포괄적인지 알지 못하지만 사용할 추가 다운로드 또는 구성이 필요하지 않습니다.


슬프게도 개발이 중단되었지만 여전히 작동합니다! (2013)
Abdelouahab

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.