Каков наилучший способ создания диаграммы UML из исходного кода Python? [закрыто]


258

Коллега хочет создать диаграммы классов UML из кучи исходного кода Python. Он в первую очередь интересуется отношениями наследования и слегка интересуется композиционными отношениями, и его мало волнуют атрибуты класса, которые являются просто примитивами Python.

Исходный код довольно прост и не очень злой - например, он не делает никакой волшебной метаклассической магии. (Это в основном со времен Python 1.5.2, с несколькими каплями «современного» 2.3ish материала.)

Какое лучшее существующее решение порекомендовать?


29
Моды не сочли этот вопрос конструктивным. Я (и многие другие, кто одобрил это) нашел это полезным. Ну и что? это не большее дело, чем не быть «конструктивным»!
Яти Сагаде

13
Не конструктивно, потому что это вызовет дебаты, споры, дискуссии ?????? Разве это не то, что мы хотим? Это очень актуальный вопрос ..
Бхушан

2
@yatisagade, если вы заметили, что он был закрыт, а не удален (и при этом многие отклики, вероятно, практически никогда не будут удалены). Закрытие просто означает, что он не может получить новые ответы.
tacaswell

7
@Bhushan Нет, мы не хотим обсуждения, мы хотим, чтобы пары вопросов и ответов имели четкие ответы. Это не суждение о том, что это интересный вопрос или полезный вопрос, это вопрос того, чтобы быть темой для SO. Конечно, вы согласны с тем, "Какой лучший редактор?" (obs emacs) не является конструктивным вопросом, этот вопрос имеет точно такую ​​же форму.
Такасуэлл

@tacaswell Некоторые обсуждения очень актуальны, когда речь идет об уточнении вопросов в формате вопросов и ответов.
user32882

Ответы:


129

Возможно, вы слышали о Pylint, который помогает статически проверять код Python. Мало кто знает, что он поставляется с инструментом под названием Pyreverse, который рисует UML-диаграммы из кода Python, который он читает. Pyreverse использует graphviz в качестве бэкэнда.

Используется так:

pyreverse -o png -p yourpackage .

где также .может быть один файл.


Знаете ли вы, как визуализировать частные методы, начинающиеся с "_"
gustavz

1
К сожалению, диаграммы обратного пакета огромны, так как все расположено горизонтально (больше ограничения графика, но все же). Не полезно для включения в документы.
oarfish

В качестве обходного пути @oarfish вы можете выбрать модули, которые хотите включить, и создать несколько отдельных графиков.
jjmontes

95

Epydoc - это инструмент для генерации документации API из исходного кода Python. Он также генерирует диаграммы классов UML, используя Graphviz причудливыми способами. Вот пример диаграммы, сгенерированной из исходного кода самого Epydoc.

Поскольку Epydoc выполняет как самоанализ объекта, так и анализ исходного кода, он может собирать больше информации относительно статических анализаторов кода, таких как Doxygen: он может проверять значительное количество динамически генерируемых классов и функций, но также может использовать комментарии или неназначенные строки в качестве источника документации, например для переменных и публичных атрибутов класса.


Есть ли способ заставить его выводить векторную графику вместо GIF-файлов? Я не нашел документации по этому вопросу, и графики довольно бесполезны для чего-либо, кроме html doc.
oarfish

3
В настоящее время, epydocкажется, не в состоянии генерировать графики. Проверьте это сообщение об ошибке .
Луис де Соуза

14
не работает с питоном 3
tomsv

23

Проверьте этот список из семи инструментов UML для Python


2
Мой UML-инструмент с открытым исходным кодом Pynsource pynsource.com, упомянутый на приведенной выше странице, претерпел много изменений в версии с момента упоминания. Теперь он анализирует Python 3, имеет масштабирование, макет, поддержку рендеринга ASCII UML и PlantUML. Насколько мне известно, Pynsource является единственным инструментом UML, который распознает атрибуты экземпляра Python (а не только атрибуты класса). Это означает, что выражения типа self.myattr приведут к правильному атрибуту «myattr» в результирующем классе UML. Готовые к запуску бинарные файлы доступны для Mac, Windows, Ubuntu 18 и 16, а также для репозитория Github с открытым исходным кодом.
Абулька

8

Некоторые классы программ с хорошим поведением могут быть диаграммируемыми, но в общем случае это невозможно сделать. Объекты Python могут быть расширены во время выполнения, и объекты любого типа могут быть назначены любой переменной экземпляра. Чтобы выяснить, на какие классы объект может содержать указатели (состав), потребуется полное понимание поведения программы во время выполнения.

Возможности метакласса Python означают, что рассуждение о структуре наследования также потребует полного понимания поведения программы во время выполнения.

Чтобы доказать, что это невозможно, вы утверждаете, что если бы существовал такой UML-диаграммщик, то вы могли бы взять произвольную программу, преобразовать операторы «halt» в операторы, которые повлияют на UML-диаграмму, и использовать UML-диаграммщик для решения проблемы остановки, что, как мы знаем, невозможно.


8
Некоторые хорошие вещи, но ручное освобождение от решения проблемы останавливает это. Патологические случаи не имеют значения здесь. Хорошо себя ведет достаточно.
ddaa

Что вы имеете в виду, "отказ от рук"? Я не выписывал полные доказательства, но я дал достаточно информации, чтобы любой, кто видел подобные доказательства, мог создать их, один для композиции и один для наследования.
Андру Лувизи

14
Вот аналогия: diff / patch может дать сбой разными способами, некоторые из которых тривиальны. Это все еще очень полезно во многих реальных случаях. В разумных случаях построение диаграмм наследования тривиально. Делегирование является более сложным, но выполнимым путем определения типа в пределах пакета.
ddaa

7

Если вы используете Eclipse, возможно, PyUML . Тем не менее, не использовал его.


1
Это действительно хорошее предложение, но FWIW Я заметил на сайте проекта PyUML, что они еще не поддерживают Eclipse 3.4 (Ganymede). Я с нетерпением жду возможности попробовать это, когда они решат это.
Билл Карвин

Вам довелось работать с PyUML с 3.4?
anijhaw

2
Последняя фиксация этого проекта относится к 2009 году. Он не отображается на торговой площадке, и Eclipse не может установить его из .zipархива.
Луис де Соуза


5

Умбрелло тоже так делает. в меню выберите «Код» -> «импортировать проект», а затем укажите корневой каталог вашего проекта. тогда он переворачивает код для тебя ...


знаете ли вы способ заставить Umbrello генерировать полную диаграмму классов (и отношения между ними, а не только сами классы - не помните, как называется эта диаграмма)
vlad-ardelean

2
AAhh, вам нужно импортировать файлы, а затем, когда вы перетаскиваете классы в область рисования, соединения автоматически добавляются.
Хосане

5

vipera - это небольшой дизайнер приложений, в который входит uml. Вы можете увидеть это в:

Vipera

С уважением.


4

В SPE IDE есть встроенный UML-создатель. Просто откройте файлы в SPE и нажмите на вкладку UML.

Я не знаю, насколько это полно для ваших нужд, но для этого не требуется никаких дополнительных загрузок или конфигураций.


к сожалению, это прекратило развиваться, но все еще работает здесь! (2013)
Абделуахаб,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.