三种用于检测学生抄袭的流行源代码相似性检验工具的比较外文翻译资料
2022-08-09 10:52:16
英语原文共 6 页,剩余内容已隐藏,支付完成后下载完整资料
三种用于检测学生抄袭的流行源代码相似性检验工具的比较
作者
Alireza Ahadi University of Technology, Sydney, Australia Alireza.Ahadi@uts.edu.au
Luke Mathieson University of Technology, Sydney, Australia Luke.Mathieson@uts.edu.au
CCS Concepts
应用计算教育:计算机辅助指导
软件及其工程学:软件维护工具
关键词
软件相似性检测,剽窃,编码,计算机科学教育
ACM 引用格式:
Alireza Ahadi and Luke Mathieson. 2019. A Comparison of Three Popular Source code Similarity Tools for Detecting Student Plagiarism. In Proceedings of Twenty-First Australasian Computing Education Conference (ACErsquo;19), January 29–31, 2019, Sydney, NSW, Australia, Sydney, Australia, January 29–31, 2019 (ACErsquo;19), 6 pages. DOI: 10.1145/3286960.3286974
摘要
本文研究了自动代码抄袭检测在本科水平的数据结构和算法模块范围内的应用。我们比较了三种旨在检测学生程序源码中抄袭行为的软件工具,逐个评估了这些工具的性能以及它们结果之间的一致性程度。 基于此评估,我们发现这些工具结果之间的一致性程度相对较低。我们还报告了在使用这些方法期间面临的挑战,并提出了此类工具未来可以改进的地方。这些检测技术结果的差异已经被用于设计能有效检测代码抄袭的准则。
引入
学习编程不易,因此,相当数量的学生在尝试编写出程序模块时以失败告终。由于编程的困难性和其他与模块无关的已知/未知因素,一些学生使用另一名学生的答案作为编程作业的行为一直是编程课程讲师的一个问题,因为不幸的是,学生经常提交其他同学完成的作业,这源于他们对获得分数比对学习和获得编程经验更感兴趣。多种用于检测学生在不同情况下提交答案中剽窃行为的工具已经开发出来。本文的目的是测试三种公开可用的编程剽窃检测工具评估结果之间的一致性程度,这些结果源于在以C 为基础的数据结构和算法课程的作业。我们报告了使用这些工具时观察到的困难,并以此提出对未来源代码剽窃检测工具进行改进的建议。目的是描述所获得的可能对其他学者有用的见解。这些见解可能会帮助其他人通过使用识别代码剽窃的策略扩展其当前的教学实践。本文的组织如下:在第2节中,对文献进行了回顾。第3节专门探讨应用背景,包括有关数据的简介以及对本研究中所使用工具的详细说明。第4节报告了这项研究的结果,随后在第5节中讨论了对于当前剽窃检测工具使用策略的警示,并根据本研究的观察提出了一些建议。在本节中,我们总结了我们的发现,探讨了本研究的局限性,并为这些工具的发展提供了建议。
背景
剽窃被定义为某人对某作品未经原作者授权的使用 [9]。Web上免费编程练习答案的存在以及可轻松复制源代码的特性,已使抄袭成为计算机编程教育者遇到的重大问题。对于规模较大的班级,手动检查学生编程任务的答案是不切实际的(即使彻底比较100名学生的作业也不可行)。此外,仅通过检查来确定两个代码的相似度是一项艰巨的任务。结果就是,专门设计用于解决该问题的计算机辅助抄袭检测工具已经被用来检测抄袭的代码。为此目的而开发的大多数工具,例如MOSS [12]和JPlag [10],都在语法水平上部署了基于文本的方法来检测抄袭。这些工具的核心配备了一个称为winnowing [12]的本地指纹算法。这些工具中的大多数都遵循将每个提交与其他所有提交进行对齐和比较的基本模型。但是,它们在完成剽窃检测任务的方式上存在技术差异。例如,MOSS执行最长公共序列搜索,而[5]中提出的成品背后的思想是在两个编程提交之间搜索相似的n-gram(小字符串)。在Cruz及其同事[11]的工作中,使用了五个高级特性(包括词汇特性,编程风格特性,注释特性,作者的文本特性和结构特性)对源代码对进行了对齐,其中词汇、注释和作者的文本特性以及源代码被视为一组字符n-gram。在[8]中,Luo和同事提出了一种面向二进制的模糊复原软件剽窃检测方法,该方法寻找语义等效基本块的最长公共子序列,并将程序语义与基于最长公共子序列的模糊匹配结合在一起。事实证明,当前可用的源代码相似性检测工具非常有用,但是每种工具都有其缺点。例如,MOSS假定源代码存在并且代码混淆最少。二进制相似性检测工具,例如Bdiff(请参阅http://sourceforge.net/projects/bdi/),通常不会考虑混淆,因此对混淆适应性很差。动态系统调用胎记(例如SCDG胎记[15]和SCSSB / IDSCSB [16])方法也已经被提出,但实际上,它们“在系统调用数量不足或应用系统调用替换混淆时会产生假阴性[ 17]” [8]。
方案
3.1 数据和环境介绍
238名学生的编程源代码快照是从悉尼科技大学(UTS)的数据结构和算法课程中收集的。所有参加该课程的学生都是二年级或三年级学生。本课程使用的编程语言是C 。所有这些学生以前在学习的第一年都学过Java作为必修课。这些学生以前都不需要在大学用C 编写代码。要求该课程的学生完成两次编程作业。在第一次编程作业中,要求学生完成代表表达式树的类。学生将集体完成的功能是,以中缀表示法输入一个字符串,对其进行解析以构建一个表达式树,测定该树并以中缀,前缀和后缀表示法打印。他们处理的表达式是含非负整数的简单算术表达式。允许的运算符为 ,-,*和=,并且子表达式可以括在括号()中。对于此作业,学生将会被提供5个C 文件,其中仅一个文件需要编辑并决定为答案。作业的评分包括功能,设计和风格三个部分。功能由一个自动测试文件来评估,占总分的50%。学生答案的设计将由他们的导师在课堂演示过程中评估,占总分35%。编码风格也是由导师进行评分。
对于第二项作业,学生将实现一个数据结构,该结构在讲课中被提及和讨论,但没有详细研究,这个数据结构就是优先级队列。为了唤起读者的记忆,优先级队列与队列类似,不同之处在于,优先级队列将具有优先级的元素插入到队列中,并根据这些优先级值而不是插入顺序将元素从队列中删除。优先级队列在许多任务的调度算法是中必不可少的。它们还用作算法的快速排序容器,在该容器中先检查哪些选项是很重要的操作。在这种情况下,它们出现在许多搜索算法的实现中。他们实现的优先级队列使用int来确定元素的优先级,但是使用了模板作为元素类型。在该任务中,优先级顺序将从最低值开始排序。因此,优先级为10的元素将在优先级为23的元素之前。所有优先级应为非负整数(即0和更大的整数)。由于有很多方法可以实现优先队列的功能,因此要求学生们先进行一些基础研究,以确定哪种方法适合他们的目标。对于那些追求最高分的人,他们必须使用特定的方法,这在作业描述文档中有详细说明。与第一次作业相似,学生获得了2个C 文件,其中仅一个文件需要编辑并提交。对于第一个作业,学生可以将他们希望的任何功能添加到代码中,但是不允许他们再包含任何其他头文件。本研究中使用的数据来自第二次作业。
3.2 软件剽窃检测工具
源代码窃检测工具可大致分为两类:属性计数工具和结构度量工具[4]。前一种跟踪输入代码中的某些属性(例如重复标记),以根据输入生成和设定配置文件。后一种工具提取并比较功能,这些功能提供了对源代码结构的总体概述。这些系统包括:软件相似性度量(MOSS)[12],JPlag [10],Plaggie [1],软件完整性诊断系统(SID)[4]以及n-gram和编辑距离剽窃检测器(NED)[7]。在本节中,我们概述了从上述列表中选择的三个,并在此研究中调查了这些代码剽窃检测工具。
3.2.1 JPlag
JPlag [10]是一个在多组源代码文件之间找到相似性的系统。JPlag当前支持Java、C#、C、C 、Scheme和自然语言文本。JPlag有一个功能强大的图形界面来显示结果。它将输入作为一组程序,对这些程序进行成对比较(为每对程序计算一个总相似度值和一组相似性区域),并提供一组HTML页面作为输出,以供详细了解相似的地方。JPlag的工作方式是将每个程序转换为规范特征流,然后尝试通过从另一个串中提取能够包含特征流串的子串(字符串匹配)。 JPlag分为两个阶段:1.解析(或扫描,取决于输入的编程语言)所有要比较的程序,并将其转换为特征串。2.将这些特征串成对比较以确定每个对的相似性。在每次这样的比较期间,JPlag尝试尽可能多地将一个特征串子串包含在另一个特征串中。能够覆盖的特征流百分比就是相似度值。相应的串可以通过图形界面可视化。
3.2.2 SIM
SIM [6]是一个软件相似性测试工具,适用于C,Java,Pascal,Modula-2,Lisp,Miranda和自然语言编写的程序。它由阿姆斯特丹VU大学的Dick Grune于1989年开发。 SIM用于检测相似性的过程如下:先标记源代码,然后构建前向引用表,该表可用于检测新提交的文件与需要比较的文本之间的最佳匹配。SIM通过评估程序的正确性,编码风格和唯一性来检测程序之间的相似性。首先使用flex词法分析器解析每个程序,生成一个整数序列(token)。关键字、特殊符号和注释的标记是预先确定的,而标识符的标记是动态分配的,存储在共享符号表中;空格则被丢弃。第二个程序的token流被分为几部分,每个部分代表该程序的一个模块,并通过在字符之间插入空格以使其长度相等来与第一个程序的token流对齐。使用线性评分方案来计算相似度。这个机制对于含有2个的标识符的配对记作2分,其余记作1分。同样地含有2个标识符的不匹配减去2分,其余的减去1分。SIM可以识别名称更改以及语句和函数的重新排序。
3.2.3 MOSS
MOSS是“软件相似度量(Measure Of Software Similarity)”的首字母缩写。 MOSS [12]由Aiken等人于1994年在斯坦福大学开发。它以Web服务形式提供,可以使用脚本进行访问。MOSS提交脚本适用于Unix / Linux平台,并且可以在Windows下与Cygwin一起使用。为了衡量文档之间的相似性,MOSS会比较文档的标准化版本。MOSS使用称为winnowing的文档指纹[3]算法。文档指纹是一种将文档分为连续的子字符串(称为k-gram)的技术,其中k由用户指定。每个k-gram都会进行散列计算,然后选择所有k-gram哈希值的子集作为文档的指纹。MOSS是用于确定程序相似性的自动系统。当前MOSS可以分析以下语言编写的代码:C,C ,Java,C#,Python,Visual Basic,JavaScript,FORTRAN,ML,Haskell,Lisp,Scheme,Pascal,Modula2,Ada,Perl,TCL,Matlab,VHDL,Verilog,Spice,MIPS组件,a8086组件,HCL2。MOSS也作为Internet服务提供。MOSS服务器通过生成列出了具有相似代码程序对的HTML页面来响应查询。其中,MOSS还将突出显示程序中看起来相同的各个段落,从而令快速比较文件更容易。最后,MOSS可以自动消除已经共享的代码(例如,库或讲师提供的代码)的匹配,从而消除由于合法共享代码而引起的误报。
结果
4.1 独立工具报告
4.1.1 JPlag
在我们向JPlag提交的238个提交文件中,有51个未成功解析。因此,本研究未考虑这些样本。JPlag中的灵敏度定义为匹配字符串的长度。我们使用默认值12作为最小匹配长度。JPlag提供两组结果。第一组结果报告显示提交样本的平均相似率大于运营组织确定的阈值。第二组结果根据最大相似率对进行排序。我们提交的样本案例中,前者结果为63.6%,后者为80%。JPlag报告我们的提交中总共有39份剽窃的文件。
4.1.2 MOSS。
Moss默认输出前250个相似度结果。我们使用默认参数(10)作为代码段在被忽略之前可能出现的最大次数。MOSS提供了一个HTML文档,其中列出了按匹配代码的规模大小排序的成对提交样本。同时里面还有匹配的代码行数以及每对提交样本的重叠不对称率。 MOSS不为其提供的匹配列表提供隔断。经过仔细的手动检查,我们发现共有27份提交样本具有很高的相似率。我们决定将相似度超过50%的提交样本视为可疑样本。
4.1.3 SIM
Sim 3.0在命令行中输出所有词汇相似性结果。它读取提交的文件并查找相似的文本段。如果2个程序文本段只有布局、注释、标识符以及内容(数字、字符串和字符)不同,则将它们标记为相似。如果找到足够长的相似段落,则会在标准输出中报告它们。在我们提交的样本中,总共2457个相似对被输出到终端。SIM的输出对文件的提交顺序很敏感。结果,我们根据SIM提供的相似百分比对结果进行了排序。根据SIM的输出,共有42个提交样本的相似度大于49%。
4.2 这些工具之间的结果一致性
图1表示三个被测试的检测工具结果之间的重叠程度。
图 1 MOSS、JPlg和SIM三者结果的一
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[239464],资料为PDF文档或Word文档,PDF文档可免费转换为Word