【发布时间】:2012-02-14 16:21:02
【问题描述】:
我最近选择了一个包含大量重复代码库的项目。问题是重复的功能不是由同一个人编写的,也不是在他们之间复制的。
那么,有没有工具可以用来比较两个函数的实际逻辑?以下是一些有用的限制条件。
- 忽略顺序不重要的顺序(例如设置属性)
- 应分析变量名称的相似性,但如果出于相同原因使用,则不需要匹配
- 深入研究被比较的函数调用的其他方法,并扁平化比较逻辑
理想情况下,该工具将生成单个函数输出。实际的逻辑差异将以某种方式突出显示。它甚至可以是为逻辑上的差异定义单独的函数的形式,将它们传递给包含相同逻辑的主函数。
这听起来确实是一项艰巨的任务,但有没有人遇到过试图做这些事情的工具?
编辑
虽然提到了一些很酷的工具,但在比较两种方法的逻辑时,它们似乎都不会考虑被调用函数的内容。如果我不正确,请告诉我!
【问题讨论】:
-
我认为这样的“工具”是存在的,它是一个人类程序员:)
-
@vulkanino:这是否意味着你会来为我分析代码?我只需要花 50-200 美元一次,就可以在需要时随时使用这个“工具”?
-
:) 我的成本更高,但你肯定会在 VWorker 上找到更便宜的“工具”;)
-
如果你用谷歌搜索,那里有很多工具。我看到 Simian 在结果列表中高居榜首。尝试其中一些,看看它们是否满足您的需求。不过,我怀疑它们中的任何一个都达到了你想要的程度。
-
@DBM:这正是我的问题。所有工具似乎都停留在它们开始的功能级别。我真正需要的是能够深入研究子函数的东西。
标签: c# static-analysis