类似的代码检测器

时间:2012-06-06 10:23:25

标签: c++ c detection copy-paste plagiarism-detection

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

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

我的要求是:

  • 相当少量的误报
  • 良好的检测率(是的,这些是相互对立的)
  • 理想情况下,输出比单个值更复杂
  • 可用于C(C99)和C ++(C ++ 03和最佳C ++ 11)
  • 仍然保持
  • 可用于比较两个源文件
  • 可在非交互模式下使用

编辑:

为避免混淆,以下两个代码段是相同的,应按原样检测:

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;

6 个答案:

答案 0 :(得分:16)

我过去曾使用过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

答案 1 :(得分:6)

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

注意:您所要求的确实是一个棘手的计算问题:)

答案 2 :(得分:3)

可以是PMD的复制粘贴检测器吗?

答案 3 :(得分:1)

您可以尝试duplo。它会找到共同的线条。它有一些忽略空白变化的能力,但是没有用重命名的变量来检测代码,所以它更像是一种清理帮助,而不是检测抄袭时的帮助。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

(响应迟到了,但问题的相关性从未消失)

我遇到了类似的问题,并编写了一个基于Web的应用程序。

https://jefferey-cave.gitlab.io/miss/

我当时使用javascript和python进行教学,因此这些语言可以处理。 (当前)它不处理C / C ++。我很想知道Javascript解释器如何处理C。

available on gitlab


我面临的问题是跨国际边界提交学生代码是非法的(禁止使用MOSS),因此需要可以在本地运行的代码。该实现是纯客户端浏览器。

我发现它对于确定教室中的小组动态(谁在与谁一起学习/与谁一起学习)更有用。

它具有一些有趣的实时图形,因此在他们提交首次作业后向Undergrad班级展示非常有用。第一次作业始终具有高度的相似性,因此在现场展示它(对提交的名称进行匿名化)时没有任何害处。

我总是讲一个我以为(粗俗地)作弊的学生的故事。他们的作品与另一个学生的独特答案有着惊人的相似之处。将学生的作品与班级其余成员进行比较,发现与班级其余部分相比无显着相似性。这导致对提交的内容进行了更深入的调查。。。事实证明,这里有一个教程,其风格得以体现,但这项工作是独一无二的。

什么也没发生,那些学生从来没有接近他们。