Как создать диаграмму последовательности для моего кода Native (C, C++)?


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

Спасибо,
Сен


person Sen    schedule 07.01.2011    source источник
comment
Что такое диаграмма последовательности?   -  person Stargateur    schedule 18.09.2018
comment
Взгляните на stackoverflow.com/questions/49817793/   -  person mevets    schedule 19.09.2018


Ответы (4)


Прежде всего, диаграмма последовательности является объектно-ориентированной концепцией. Он предназначен для того, чтобы с первого взгляда передать передачу сообщений между объектами в объектно-ориентированной программе в последовательной форме, что должно помочь понять взаимодействие между объектами с учетом времени. Таким образом, нет смысла говорить о диаграммах последовательности в контексте процедурного языка, такого как 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++ настолько сложен, что вы предпочитаете использовать инструмент для создания диаграммы последовательности вместо того, чтобы делать это вручную, то, скорее всего, он слишком сложен для инструмент, чтобы дать вам что-нибудь полезное, и вам все равно придется исправить это самостоятельно.

person mnistic    schedule 23.09.2018
comment
Очень хороший ответ. Всего один комментарий: диаграммы последовательности очень полезны для последовательного языка, такого как C. В этом случае вы описываете взаимодействие между модулями, а не объектами. Вместо публичных методов вы вызываете нестатические функции из заголовочного файла модуля. - person Paul R.; 23.09.2019

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

person James from CppDepend Team    schedule 24.09.2018

Вы пробовали с плантумлом? Это очень хорошо работает с 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

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

person Wambitz    schedule 24.09.2018

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

person Peter G. McDonald    schedule 13.01.2011