Как создать диаграмму последовательности для моего родного (C, C ++) кода? - PullRequest
10 голосов
/ 07 января 2011


Я хотел бы знать, как сгенерировать диаграмму последовательности для моего собственного кода (C, C ++).Я написал свой код на C, используя редактор vim.

Спасибо,
Сен

Ответы [ 4 ]

9 голосов
/ 23 сентября 2018

Прежде всего, диаграмма последовательности - это объектно-ориентированное понятие.Он предназначен для быстрой передачи сообщений между объектами в объектно-ориентированной программе последовательным образом, что должно помочь понять временное взаимодействие между объектами.Таким образом, не имеет смысла говорить о диаграммах последовательности в контексте процедурного языка, такого как C.

Когда речь идет о C ++, диаграммы последовательности определяются в общем смысле спецификацией UML, котораяодинаково для всех объектно-ориентированных языков.UML считается концепцией более высокого уровня из исходного кода, которая выглядит одинаково для всех языков, а процесс преобразования исходного кода в UML называется обратным инжинирингом кода.Существуют инструменты, которые позволяют преобразовывать исходный код Java, C ++ и других языков в диаграммы UML, которые показывают отношения между классами, например Enterprise Architect, Visual Paradigm и IBM Rational Software Architect.

Однако диаграмма последовательностиэто особый вид UML-диаграммы, и оказывается, что обратное проектирование диаграммы последовательности является довольно сложной задачей.Во-первых, если вы хотите сгенерировать диаграмму последовательности с помощью статического анализа, один из первых вопросов, на которые вы должны ответить, заключается в том, будет ли когда-либо возвращаться результат с учетом двух объектов и сообщения, передаваемого между ними.Это означает, что для данного метода вам придется проанализировать его алгоритм и выяснить, зацикливается ли он вечно или возвращается.Это известно как проблема остановки , и было доказано, что она неразрешима в компьютерной науке.Это означает, что для создания диаграммы последовательности с помощью статического анализа вам придется пожертвовать точностью.Динамический анализ работает, фактически выполняя код и отображая взаимодействия между объектами во время выполнения.Это представляет свои собственные проблемы.Во-первых, вам нужно будет применить код.Тогда отфильтровывание интересующих вас взаимодействий из библиотечных и системных вызовов и других ошибок, присутствующих в коде, было бы невозможным без вмешательства пользователя.

Это не означает, что создание инструмента, который бы создавал пригодные для использования диаграммы последовательности, невозможно, но рыночный интерес, по-видимому, был недостаточно сильным, чтобы оправдать усилия, и, кроме нескольких исследовательских работ на эту темуКак и CPP2XMI , мне неизвестны какие-либо коммерчески доступные инструменты для преобразования C ++ в диаграммы последовательности.

Сложность проблемы заключается в том, что C ++ является одним из наиболее сложных объектно-ориентированныхязыков, поэтому даже если кто-то изобрел хороший способ обратного конструирования диаграмм последовательности, C ++ будет последним языком, который получит лечение.Пример: Visual Paradigm предлагает элементарную поддержку для преобразования Java-кода в диаграммы последовательности , но не для C ++.

Даже если такой инструмент существовал для C ++, печальная правда в том, что если вашКод C ++ достаточно сложен, чтобы вы могли использовать инструмент для создания диаграммы последовательности вместо того, чтобы делать это вручную, тогда он, скорее всего, слишком сложен для инструмента, чтобы дать вам что-нибудь полезное, и вам все равно придется все исправлять самостоятельно.

3 голосов
/ 24 сентября 2018

Вы можете попробовать CppDepend , который предоставляет граф зависимостей и матрицу зависимостей для изучения зависимостей между каталогами, файлами и функциями.

2 голосов
/ 24 сентября 2018

Вы пробовали с Plantuml?Он действительно хорошо работает с Doxygen, я использую его при работе с фирменным шаблоном, и синтаксис очень прост, хотя вы должны сами написать последовательность вызовов.На странице есть множество примеров, если вы работаете в Linux, вы можете использовать собственный инструмент для упаковки, чтобы установить его, то же самое относится и к Doxygen (например, sudo apt-get plantuml).В противном случае, если вы используете Windows, вы также можете использовать установщики с официальных страниц.

Вам придется выполнить некоторую настройку, но это довольно просто, я оставлю вам ссылки на каждый инструмент.

Страницы загрузки: http://plantuml.com/download http://www.doxygen.nl/download.html

Примеры Plantuml: http://plantuml.com/sequence-diagram

Документацию можно найти на каждой странице, для plantmul вы используете исполняемый файл java (.jar) тогда вам не нужно ничего устанавливать, вам просто нужно настроить doxygen, чтобы найти исполняемый файл, как на странице документации doxygen:

http://www.doxygen.nl/manual/index.html

Если выхотите настроить его, не читая документацию, вы также можете посмотреть это видео: https://www.youtube.com/watch?v=LZ5E4vEhsKs

Надеюсь, это поможет, ура.

0 голосов
/ 13 января 2011

Вы можете изучить trace2uml с работами с Doxygen.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...