类似代码检测器
我正在寻找一种可以比较源代码的相似性的工具。类似代码检测器
现在我们有一个非常微不足道的系统,它有大量的误报,真正的积极因素可以很容易地被埋入其中。
我的要求是:
- 相当少量的误报
- 良好的检出率(是的,这些都是违背对方) 的不仅仅是单个值一个更加复杂的输出
- 理想
- 可用于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;
我用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
看来,链接到fie1012.org不再有效。你能提供一个替代的链接吗? – Eric
试试这个:http://www3.nd.edu/~kwb/nsf-ufe/1110.pdf – Throwback1986
您在计算机科学术语中的问题可能被称为源代码抄袭检测。一个好的开始是阅读Dobbs博士的这篇文章:Detecting Source-Code Plagiarism。它列出了在源代码中检测剽窃的算法。
注意:你问什么确实是一个艰难的计算问题:)
差异是否满足您的一些需求? –
@HighPerformanceMark大声笑,不,它不。 –
它看起来好像您需要一种工具来比较2个代码的语义相似性,而不是语法。我怀疑这是一个未解决的问题,因此将很难为您找到满意的解决方案。我认为,正如你所写的,你原来的问题会误导很多读者,就像它误导了我。我也认为你应该完全重写,以清楚地说明你对哪种比较感兴趣。 –