分析和比较类似功能逻辑的工具?

Joh*_*her 8 c# static-analysis

我最近选择了一个包含大量重复代码的大型代码库.问题是重复的功能不是由同一个人编写的,也不是在它们之间复制的.

那么,我可以使用哪些工具来比较两个函数的实际逻辑吗?以下是一些有用的约束.

  • 忽略订单不重要的订单(例如设置属性)
  • 应分析变量名称的相似性,但如果出于相同原因使用,则不需要匹配
  • 深入研究被比较函数调用的其他方法,并将逻辑展平以进行比较

理想情况下,该工具将生成单个函数输出.实际的逻辑差异将以某种方式突出显示.它甚至可以采用一种形式,为逻辑中的差异定义单独的函数,将它们传递给包含相同逻辑的main函数.

这听起来像一个很高的订单,但有没有人遇到试图做这些事情的工具?

编辑

虽然提到了一些很酷的工具,但在比较两种方法的逻辑时,它们看起来并不会将被调用函数的内容考虑在内.如果我不对,请告诉我!

Jar*_*ver 6

如果您下载Visual Studio vNext Ultimate的开发者预览版,它将包含一个新的代码克隆检测功能:http://msdn.microsoft.com/en-us/library/hh205279( v = vs.110) .aspx

http://blogs.msdn.com/b/zainnab/archive/2011/12/13/visual-studio-11-developer-preview-code-clone-detection-aka-code-clone-analysis.aspx

开发人员预览Visual Studio的下载链接:http: //www.microsoft.com/download/en/details.aspx?id = 27543

  • 我不知道为什么这个答案被赞成,更不用说以赏金为标志了.Visual Studio克隆检测器匹配令牌序列.它无法可靠地找到函数边界,更不用说解析代码,找出名称和类型,或确定函数是否相似.它会找到复制和粘贴的代码; OP明确表示他想要匹配的代码未被复制和粘贴. (2认同)

brg*_*ner 5

如果您有ReSharper,则有一个ReSharper插件代理Ralf.

代理拉尔夫的主页引用:

在某些情况下,两种给定的方法在功能上是等效的(相同的输入产生相同的输出和副作用)但不是文本上等同的.例如,两种方法可能仅在局部变量的命名方面有所不同,并且在其他方​​面是相同的.代理Ralph可以检测到这种情况,以及其他类似情况,并确定方法在功能上是等效的.