如何在开发过程中检测代码重复? 我们有相当大的代码库,C++的4K LOC,代码复制是个问题。是否有任何工具可以有效地检测重复的代码块
理想情况下,这将是开发人员在开发过程中可以使用的东西,而不仅仅是偶尔运行以查看问题所在。如果我们能够将这样一个工具与CruiseControl集成在一起,在每次签入后提供一个报告,那将是一件好事 前一段时间我看了一下,它显示了一个很好的图形,但是需要一个smalltalk环境来使用它,这使得自动运行它相当困难如何在开发过程中检测代码重复? 我们有相当大的代码库,C++的4K LOC,代码复制是个问题。是否有任何工具可以有效地检测重复的代码块,c++,code-duplication,C++,Code Duplication,理想情况下,这将是开发人员在开发过程中可以使用的东西,而不仅仅是偶尔运行以查看问题所在。如果我们能够将这样一个工具与CruiseControl集成在一起,在每次签入后提供一个报告,那将是一件好事 前一段时间我看了一下,它显示了一个很好的图形,但是需要一个smalltalk环境来使用它,这使得自动运行它相当困难 自由工具会很好,但是如果有一些好的商业工具,我也会感兴趣。检测C++项目中的重复代码。 更新:也适用于Java、C#、C、COBOL、Ruby、JSP、ASP、HTML、XML、Visua
自由工具会很好,但是如果有一些好的商业工具,我也会感兴趣。
检测C++项目中的重复代码。 更新:也适用于Java、C#、C、COBOL、Ruby、JSP、ASP、HTML、XML、Visual Basic、Groovy源代码甚至纯文本文件查看
查找“相同”的代码片段相对容易,现有的工具已经做到了这一点(请参阅其他答案)
有时是好事,有时不是;如果在一个太精细的“水平”上进行,它可能会使开发时间陷入停滞;i、 试图重构这么多代码,你失去了你的目标(可能会破坏你的里程碑和时间表)
更难的是,在没有适当文档的情况下,找到多个函数/方法来完成相同的事情,但具有不同(但相似)的输入和/或算法
如果您必须使用两种或不同的方法来执行相同的操作,而程序员试图修复一个实例,但忘记(或不知道它们存在)修复其他实例,则会增加软件的风险。似乎是Duploc中使用的算法的C实现。编译和安装很简单,虽然选项有限,但它似乎或多或少是开箱即用的。好的,您可以在源代码上运行克隆检测器 每晚都有代码库 许多克隆检测器通过比较源线来工作, 并且只能找到精确的重复代码 上面的CCFinder通过比较语言来工作 标记,因此它对空格不敏感 变化。它可以检测变异的克隆 如果只有一个令牌,则为原始代码的 更改(例如,将中的变量X更改为Y 克隆人) 理想情况下,你想要的是上述能力,但是 在哪里找到克隆人 允许相对任意的变化, e、 例如,用表达式、语句替换变量 靠街区等 <我们的克隆克隆检测器是针对java、C++、COBOL、VB.NET、VB6、FORTRAN和各种类型的 其他语言。可在以下网址查看: 除了能够处理多种语言外,CloneDR engine还能够处理各种输入编码样式,包括ASCII、ISO-8859-1、UTF8、UTF16、EBCDIC、许多Microsoft编码和(日语)Shift JIS <>网站有几个克隆检测运行示例报告,包括一个C++, <编辑> 2014:现在处理所有C++ 14。 同()是非常简单的,但是它在文本行上而不是令牌上工作,如果你使用一个不喜欢的克隆查找器支持的语言,这是有用的。 < P>还有java、C++、C++、C、Objto-C、JavaScript……/P>支持的Java语言。 它得到了哈德逊公司(如CPD)的支持
除非您是一个开源项目,否则您必须为Simian付费。这些Debian软件包似乎在做以下事情:
- (也称为)
由于它的灵活性,安装起来并不容易。我找到了 您可以使用我们的工具检测代码重复。它是一个命令行工具(非常类似于编译器),所以你可以很容易地集成到连续的集成工具中,就像你提到的,或者./P>我认为PMD只是java,但是现在我看到CPD(它也是PMD的一部分)也可以用于C++。谢谢这个链接。我一定会看的。更好的是,每当有人使用粘贴按钮:-}Relate时,都会有一个日文版本(项目中除我之外的所有其他开发人员都是日文)