如何为我的Native(C,C++)代码生成序列图?

Sen*_*Sen 10 c native sequence-diagram


我想知道如何为我的Native(C,C++)代码生成序列图.我用vim编辑器编写了我的C代码.

谢谢,

mni*_*tic 10

首先,序列图是面向对象的概念.它旨在一目了然地以顺序方式传达在面向对象的程序中的对象之间传递的消息,这应该有助于理解对象之间的时间考虑的交互.因此,在像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++代码足够复杂,您宁愿使用工具为其制作序列图而不是手动执行,那么它很可能太复杂了.工具给你任何有用的东西,无论如何你必须自己解决它.


Pet*_*ald 1

您可以通过 doxygen 来探索trace2uml 。