【问题标题】:How to generate sequence diagram for my Native (C, C++) code?如何为我的本机(C、C++)代码生成序列图?
【发布时间】:2011-06-05 07:25:21
【问题描述】:


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

谢谢,

【问题讨论】:

标签: c native sequence-diagram


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 非常好的答案。只有一条评论:序列图对于像 C 这样的顺序语言非常有用。在这种情况下,您描述的是模块之间的交互,而不是对象之间的交互。您可以从模块的头文件中调用非静态函数,而不是公共方法。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    你试过植物吗?它与 Doxygen 配合得非常好,我在公司模板中使用它,它的语法非常简单,但你必须自己编写调用序列。页面中有很多示例,如果您在 Linux 中工作,您可以使用您的本地打包工具来安装它,这同样适用于 Doxygen(例如 sudo apt-get plantuml)。否则,如果您使用的是 Windows,您也可以使用官方页面中的安装程序。

    您必须进行一些配置,但这很简单,我会给您提供每个工具的链接。

    下载页面: http://plantuml.com/download http://www.doxygen.nl/download.html

    植物例子: http://plantuml.com/sequence-diagram

    您可以在每个页面中找到文档,对于plantmul您使用java可执行文件(.jar)然后您无需安装任何东西,您只需要配置doxygen即可找到可执行文件,您可以在doxygen中找到如何文档页面:

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

    如果您想在不阅读文档的情况下对其进行配置,也可以观看此视频: https://www.youtube.com/watch?v=LZ5E4vEhsKs

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

    【讨论】:

      【解决方案4】:

      您可以使用 doxygen 探索 trace2uml

      【讨论】:

        猜你喜欢
        • 2020-07-25
        • 2011-07-19
        • 1970-01-01
        • 2013-08-22
        • 1970-01-01
        • 2011-09-06
        • 1970-01-01
        • 2017-07-08
        • 1970-01-01
        相关资源
        最近更新 更多