11


我想知道如何为我的本机(C、C++)代码生成序列图。我已经使用 vim 编辑器编写了我的 C 代码。

谢谢,

4

4 回答 4

11

首先,序列图是一个面向对象的概念。它旨在以顺序方式在面向对象的程序中一目了然地传达对象之间的消息传递,这应该有助于理解对象之间的时间考虑交互。因此,在像 C 这样的过程语言的上下文中讨论序列图是没有意义的。

对于 C++,序列图是由 UML 规范在一般意义上定义的,这对于所有面向对象的语言都是相同的。UML 被认为是源代码中更高级别的概念,对于所有语言看起来都相同,将源代码转换为 UML 的过程称为代码逆向工程。有一些工具允许您将 Java、C++ 和其他语言的源代码转换为显示类之间关系的 UML 图,例如 Enterprise Architect、Visual Paradigm 和 IBM Rational Software Architect。

然而,序列图是一种特殊的 UML 图,事实证明,对序列图进行逆向工程非常具有挑战性。首先,如果您想通过静态分析生成序列图,您必须回答的第一个问题是,给定两个对象和它们之间传递的消息,是否会返回结果。这意味着,给定一个方法,您必须分析它的算法并确定它是永远循环还是返回。这被称为停机问题并且已被证明在计算机科学中是不可判定的。这意味着为了通过静态分析生成序列图,您将不得不牺牲准确性。动态分析通过实际运行代码并在运行时映射对象之间的交互来工作。这提出了自己的挑战。首先,您必须检测代码。然后,如果没有用户干预,将无法从库和系统调用以及代码中存在的其他绒毛中过滤掉您感兴趣的交互。

这并不是说创建一个可以生成可用序列图的工具是不可能的,但市场兴趣显然不足以证明这一努力是合理的,除了一些关于该主题的研究论文,如CPP2XMI,我m 不知道有任何商用工具可以将 C++ 逆向工程为序列图。

使问题更加复杂的是,C++ 是最复杂的面向对象语言之一,因此即使有人设计了一种逆向工程序列图的好方法,C++ 也将是最后一种接受这种处理的语言。恰当的例子:Visual Paradigm 提供了将Java 代码反转为序列图的基本支持,但不支持 C++。

即使 C++ 存在这样的工具,可悲的事实是,如果您的 C++ 代码足够复杂以至于您宁愿使用工具为其制作序列图而不是手动完成,那么它很可能对工具可以为您提供任何有用的东西,无论如何您都必须自己修复它。

于 2018-09-23T03:11:46.223 回答
3

你可以试试CppDepend,它提供了依赖图和依赖矩阵来探索目录、文件和函数之间的依赖关系。

于 2018-09-24T08:40:50.003 回答
2

你试过植物吗?它与 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

我希望这会有所帮助,干杯。

于 2018-09-24T02:16:35.530 回答
1

您可以使用 doxygen探索trace2uml 。

于 2011-01-13T04:00:07.587 回答