【发布时间】: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 再次可以理解此“伪”代码。因此我的问题:
- 有没有可能教 EA 识别原始类型?
- 其他 UML 工具是否识别类型 (并在它们之间建立关系) 更健壮?
非常感谢您的任何建议! 瓦伦丁·海尼茨
【问题讨论】:
-
这里有不止一个问题。 EA 似乎在 typedefs 上失败了,但即使你找到了解决方法,你会发现它不知道(在 8.0 版)B 和 List 之间的关系,这使得逆向工程代码非常有用使用 STL 很痛苦。 Sparx 意识到了这个问题,并已向我的雇主报告他们正在“解决这个问题”。
-
我还发现我通常必须更改 EA 创建的关联类型 - 它似乎总是在类之间创建一般关联,我必须根据需要手动更改为聚合或组合。我通常还必须进行一定程度的手动布局。无论如何,考虑到 EA 中的所有这些工作,是否真的值得更改代码以使导入工作?你不能在之后将缺少的链接添加到 UML 吗?
-
@Tony:谢谢你的信息。我会检查一个新版本。评论 2:是的,值得修改代码,因为大约有 100 个类,并且代码修改几乎是在 VI 中自动完成的。
标签: c++ uml reverse-engineering