有人在源代码中尝试过任何用于设计模式识别的工具吗?
我正在寻找一个或多或少有效的并期望一些合理的输入(例如,由逆向工程工具生成的xmi文件或可以从源代码轻松生成的其他数据)。
我找到了一些像CrocoPat,Columbus + Maisa这样的学术工具,但还没有尝试过。
如果有人分享他/她在此类实验中的经验,我们将不胜感激。
答案 0 :(得分:1)
我不知道有什么用。当你在代码中意识到你的模式时会有很多信息丢失,所以对它们进行逆向工程肯定会失败。
答案 1 :(得分:1)
设计模式通常不直接出现在代码中;通常,代码包含设计模式的实现。
要进行此类模式识别,您需要:
没有很多工具可以做到这一点。虽然我们没有明确地寻找一般设计模式,但我们已经构建了一个符合上述标准的工具:DMS Software Reengineering Toolkit。 DMS可以与编译器以相同的精度解析C,Java和COBOL,可以使用显式模式进行模式匹配,并计算这些语言的控制和数据流分析。
DMS的一个有趣的应用是识别用于在3500万行C应用程序中生成交互式屏幕的“设计模式”。您知道这种设计模式:“使用printf生成屏幕输出的片段”。虽然很容易识别模式的片段(大多数 printf 调用都是示例),但真正的问题是从实现它的一堆纠结的代码中识别屏幕图像本身。我们完成的任务是通过将各个printf调用绑定在一起来提取打印屏幕输出的图像(报告为包含屏幕文字文本的XML文件和表示可变内容输出的XML标记)。实现这一目标的细节非常复杂;你必须找到通常跨越函数调用并受许多条件控制的printfs序列(XML也记录了屏幕的条件部分)。该工具为从主要开始的代码打印的所有屏幕生成屏幕图像。
如果您希望找到一个简单的设计模式识别解决方案,我认为您不会有太多运气,但这是可能的。