类似代码检测器

问题描述:

我正在寻找一种可以比较源代码的相似性的工具。类似代码检测器

现在我们有一个非常微不足道的系统,它有大量的误报,真正的积极因素可以很容易地被埋入其中。

我的要求是:

  • 相当少量的误报
  • 良好的检出率(是的,这些都是违背对方)
  • 的不仅仅是单个值一个更加复杂的输出
  • 理想
  • 可用于C(C99)和C++(C++ 03和最佳C++ 11)
  • 仍然保持
  • 可用于共mparing在非交互式模式相对于彼此
  • 可用两个源文件

编辑:

为了避免混淆,以下两个代码段是相同的,并应被检测为这样:

for (int i = 0; i < 10; i++) { bla; }

int i; while (i < 10) { bla; i++; }

同样在这里:

int x = 10; y = x + 5;

int a = 10; y = a + 5;

+1

差异是否满足您的一些需求? –

+1

@HighPerformanceMark大声笑,不,它不。 –

+2

它看起来好像您需要一种工具来比较2个代码的语义相似性,而不是语法。我怀疑这是一个未解决的问题,因此将很难为您找到满意的解决方案。我认为,正如你所写的,你原来的问题会误导很多读者,就像它误导了我。我也认为你应该完全重写,以清楚地说明你对哪种比较感兴趣。 –

我用MOSS过去:http://theory.stanford.edu/~aiken/moss/检测抄袭代码。由于它在语义层面上工作,因此它将检测您在上面显示的情况。该工具是语言感知的,所以在分析中不考虑注释,并且在通过简单的搜索和替换变量和/或函数名称来检测已被修改的代码方面有很长的路要走。

注意:几年前,当我在研究生院教授计算机科学时,我使用了该工具,它在检测从互联网上跳出的代码时非常有效。这是一个证据充分的考虑类似的应用:http://fie2012.org/sites/fie2012.org/history/fie99/papers/1110.pdf

如果谷歌“测量软件相似性”,你应该多找几个有用的结果: http://www.ics.heacademy.ac.uk/resources/assessment/plagiarism/detectiontools_sourcecode.html

+0

看来,链接到fie1012.org不再有效。你能提供一个替代的链接吗? – Eric

+1

试试这个:http://www3.nd.edu/~kwb/nsf-ufe/1110.pdf – Throwback1986

可能是复制粘贴探测器从PMD

您在计算机科学术语中的问题可能被称为源代码抄袭检测。一个好的开始是阅读Dobbs博士的这篇文章:Detecting Source-Code Plagiarism。它列出了在源代码中检测剽窃的算法。

注意:你问什么确实是一个艰难的计算问题:)

你可以尝试duplo。它会找到共同的线。它有一些能够忽略空白变化的能力,但是不会检测带有重命名变量的代码,所以它在检测抄袭时更像是一种帮助。

我开始使用JPLAG(https://github.com/jplag/jplag)来检查代码相似性,并比较学生在Java和文本文件中的作品。 它可以很好地检查相同的代码结构和变量替换。