【问题标题】:Reverse Engineering C++ code using "Enterprise Architect"使用“Enterprise Architect”对 C++ 代码进行逆向工程
【发布时间】:2011-05-28 06:14:25
【问题描述】:

这又是一种“如何正确地做”的问题。如果有人生气了,请见谅。

我必须了解 ca 150 TLOC 的 C/C++ 混合物。我已经在 UML-Tool "Enterprise Architect" 中导入了代码并且得到了一个凌乱的图表。由于这种 C-ish 结构,许多结构和枚举具有匿名名称:typedef struct/enum {...} MyType;

在第二次运行中,我已将其转换为 C++ 形式:struct/enum MyType{...};,但得到了一堆不相关的结构。不幸的是,Enterprise Architect 不解析 typedef。例如没有识别出 A、B 和 C 之间的关系:

struct A;
struct B;
typedef A *PtrA;
typedef List<B> BList;
struct C{ PtrA pA; BList lB; };

感谢整个命名约定,我能够将所有 typedef 替换为原始类型,如下所示:

struct C{ A pA; B lB; };

现在在“Enterprise Architect”中导入源代码给出了一个包含所有关系的漂亮图表。 当然,代码无法编译,并且不一样。代码中的所有更改都需要进行烦人的转换,以使 EA 再次可以理解此“伪”代码。因此我的问题:

  1. 有没有可能教 EA 识别原始类型?
  2. 其他 UML 工具是否识别类型 (并在它们之间建立关系) 更健壮?

非常感谢您的任何建议! 瓦伦丁·海尼茨

【问题讨论】:

  • 这里有不止一个问题。 EA 似乎在 typedefs 上失败了,但即使你找到了解决方法,你会发现它不知道(在 8.0 版)B 和 List 之间的关系,这使得逆向工程代码非常有用使用 STL 很痛苦。 Sparx 意识到了这个问题,并已向我的雇主报告他们正在“解决这个问题”。
  • 我还发现我通常必须更改 EA 创建的关联类型 - 它似乎总是在类之间创建一般关联,我必须根据需要手动更改为聚合或组合。我通常还必须进行一定程度的手动布局。无论如何,考虑到 EA 中的所有这些工作,是否真的值得更改代码以使导入工作?你不能在之后将缺少的链接添加到 UML 吗?
  • @Tony:谢谢你的信息。我会检查一个新版本。评论 2:是的,值得修改代码,因为大约有 100 个类,并且代码修改几乎是在 VI 中自动完成的。

标签: c++ uml reverse-engineering


【解决方案1】:

我有 Enterprise Architect,几乎总是为了在大型代码体上做你正在尝试的事情,我使用 doxygen 代替。它生成类图和调用图。将它与GraphViz 和“UML 风格”的类图一起使用,您就拥有了一个相当不错的代码导航和理解工具,可以根据需要灵活配置添加或排除细节。

【讨论】:

    猜你喜欢
    • 2016-06-10
    • 2013-10-07
    • 1970-01-01
    • 2017-11-16
    • 2013-07-29
    • 2013-12-03
    • 2013-07-22
    • 1970-01-01
    • 2010-09-11
    相关资源
    最近更新 更多