类似的代码检测器

Similar code detector

本文关键字:检测器 代码      更新时间:2023-10-16

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

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

我的要求是:

  • 合理少量的误报
  • 良好的检测率(是的,这些是相互对抗的)
  • 理想情况下,输出比单个值更复杂
  • 可用于 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;

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

注意:几年前,当我在研究生院教授计算机科学时,我使用了这个工具,它在检测从互联网上提取的代码方面非常有效。 以下是类似应用程序的有据可查的说明: http://fie2012.org/sites/fie2012.org/history/fie99/papers/1110.pdf

如果你谷歌"衡量软件相似性",你应该找到一些更有用的点击:http://web.archive.org/web/20150219121637/http://www.ics.heacademy.ac.uk/resources/assessment/plagiarism/detectiontools_sourcecode.html

您在计算机科学术语中的问题可能表示为源代码抄袭检测。一个好的开始是阅读这篇关于多布斯博士的文章:检测源代码抄袭。它列出了用于检测源代码中抄袭的算法。

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

可能是来自PMD的复制粘贴检测器?

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

你可以

试试duplo。它将找到共同的行。它具有忽略空格更改的某些功能,但不会检测具有重命名变量的代码,因此在检测抄袭时,它更像是一种清理辅助而不是帮助。

(回答很晚,但问题的相关性永远不会消失)

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

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

我用javascript和python教学,所以这些是它处理的语言。它不处理 C/C++(当前)。我很想知道Javascript解释器如何处理C。

在 GitHub 上可用

<小时 />

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

有趣的是,我认为它可能以一种独特的方式满足您的"低误报"标准。作业之间总是有一些相似之处,但使用独特的技术来识别事物"开始看起来可疑"的点。

我发现它在确定课堂上的群体动态(谁在与谁一起工作/学习)方面更有用。

它有一些有趣的实时图形,因此在本科生提交第一份作业后向他们展示很有用。在第一次作业中总是有高度的相似性,所以现场展示它没有坏处(提交名称是匿名的)。

我总是讲述我认为(严重而公然)作弊的学生的故事。他们的工作与另一个学生非常独特的答案非常相似。将学生的作业与班上其他同学进行比较,显示与班上其他同学没有显着相似之处。它远低于"有趣"的门槛。这导致了对提交的更深入的调查......原来有一个教程,风格表现出来,但工作是独一无二的。

什么也没发生,那些学生也不知道他们离得有多近。