《程序代码相似性检测技术在教学中的应用.doc》由会员分享,可在线阅读,更多相关《程序代码相似性检测技术在教学中的应用.doc(7页珍藏版)》请在三一文库上搜索。
1、程序代码相似性检测技术在教学中的应用 本文介绍的程序代码相似性检测技术可以帮助教师从学生作业集中快速找出彼此是否存在抄袭嫌疑,并能够对作业对的相似部分做出标记,给教师提供参考,以减轻教师人工判别的工作负担,从而提高工作效率。 程序设计类课程注重学生实际编程能力的培养。因此,在教学过程中更加强调实践,而不单单是程序设计语言本身。然而,上机作业中学生间的抄袭行为严重影响了教学效果。当一个程序被几个或者十几个同学抄袭,其中用点心的同学还会做一些修改变量名、增加注释等修改,很多学生直接拷贝交给教师。当学生数较多时,要发现抄袭行为,进而找出谁是原创,谁是抄袭,都比较困难,而且特别耗时费力。程序代码相似性
2、检测技术能够对学生提交的作业进行检测,找出相似性较大的程序对,帮助教师在大量学生作业中找出存在抄袭嫌疑的作业对象,从而可以减轻教师的工作负担、提高工作效率。 1程序代码相似性检测技术概述 Parker和Hamblen于1989年将程序代码的抄袭定义为一个程序通过将另一个程序的少量常规修改而来。比较常规的修改主要包括下以几个方面 逐字逐句的拷贝 更改注释 增加空行或者改变书写格式 标识符重命名 代码段重新排序 改变表达式中的操作数或者操作符的顺序 改变数据类型 增加无关语句或者变量 用等价的结构进行替代 检测抄袭就是检测一个程序是否通过对另一个程序的上述修改而来的。程序代码相似性检测技术能对程序
3、集合中的每两个程序进行比对,找出一个程序对另一个程序经过上述修改而来的相似代码部分,得到描述程序相似程度的量化值(称作相似度similarity),并且能够对两个程序的相似代码部分进行标注,帮助用户找出并判定抄袭的作业对象。 国外对程序代码相似性检测技术的研究比较早,检测方法主要有属性计数(Attribute counting)技术和结构度量(Structure metric)技术。属性计数技术先对程序进行特定特征的统计,如程序中的同一种操作数和同一种操作符的数量,程序中循环的数量、过程的数量等。然后将这些特征组成一个特征向量,两个程序的相似度用它们的特征向量的距离表达,如果这个距离很小,说明
4、两个程序很相似。 结构度量技术先把程序转换成描述程序信息的标识(token),然后对每两个程序的标识进行比较运算,得出相似度。一般这个值越大,说明越相似。目前已开发了多种用于抄袭检测的系统,如Jplag、MOSS、YAP系列以及SIM等,它们主要使用了结构度量技术,检测结果的错误率比较低,速度比较快,能够满足我们对程序抄袭检测的需要。 2程序代码相似性检测技术在教学中的应用 判定一个学生是否抄袭了他人的作业是件比较严肃的事情,不能简单的通过某种代码相似性检测系统(以下称为检测系统)得出的相似度大小就判定抄袭与否,还要经过一系列的验证以确保判定结果的正确。这个判定过程经过下面四个阶段收集(col
5、lection),分析(analysis),确认(confirmation),调查(investigation)。这四个过程如图1所示 图1 (1) 收集阶段即收集要进行抄袭检测的作业,一般为同一题目的学生作业。可将学生提交的作业放在一个文件夹中等待检测系统的检测。 (2) 分析阶段可用某种检测系统实现自动检测,此时教师将收集好的学生作业提交给检测系统,经过检测系统的检测可以得出每对程序的相似度,并对每对程序的相似区域进行标注,以帮助教师做进一步的判断。 (3) 确认阶段对检测系统得到的结果进行核查,看是否某对程序中所有的相似代码都被检测出来,以及被检测出相似的代码段是否属实。 (4) 调查阶
6、段最后在确定抄袭之前教师还要对初步判定抄袭的学生作业对象进行调查。调查可以分别向被怀疑同学询问关于程序设计作业的解题思路及过程,也可以询问其他同学或辅导老师关于被怀疑同学平时练习情况,尽量做到判定结果真实。 检测系统能够在老师提供的程序代码集合中计算出每对程序代码的相似度,并且对相似度大于某一阈值的程序对的每一部分相似代码段使用同一种颜色进行标注。通过查看相似度的大小可以帮助教师缩小核查范围,通过查看标注信息可以帮助教师确认系统给出的结果是否属实。所以,程序代码相似性检测系统在程序设计类课程作业抄袭检测过程中应用于分析与确认阶段。 3应用程序代码相似性检测系统进行抄袭检测的过程 相似度是反映两
7、对程序间相似情况的量化值,这个值越大说明越相似,Prechelt认为相似度值在05%区间的程序对可以认为不存在任何情况的抄袭,对于相似度为100%的程序对几乎就可以判定为抄袭。但是对于相似度在40%左右的程序对判定抄袭就不那么容易了,因为这个结果表明程序对只有部分相似。 在学生编写程序作业过程中有部分代码相似具有其合理性,主要原因在于 学生在同一老师或同一教学环境的影响下有着相似的编程传统和风格 在程序设计课程学习过程中,学生都处于同一个学习的阶段 完成某一时期的作业被限定在某些固定的解决问题的方法中,有着编程方法的局限性 而对于作业中的程序代码比较短的情况,得到的相似度一般情况下普遍要大一些
8、。这是因为对于比较简单的作业,解决问题的方法大多比较集中,所以不考虑互相抄袭的情况,两个程序也由于解决问题的方法相似造成有较大的相似度结果值。但对于相似度是100%的程序对,判定为抄袭的可能性还是很大的,因为就算是再简单的程序,也不可能两个人编写的完全一致。对于作业代码长一些的程序,解决问题的方法相应会更多一些,不存在抄袭而达到较高的相似度的情况可能性会更小一些。所以,对于相似度是100%的程序对,判定为抄袭的可能性就更大了。 在教学过程中,重点核查抄袭的作业对象的相似度范围可以根据具体问题的难易程序而定。当作业较简单时,重点核查相似度区间可以定为95100%的程序对;当作业较复杂、代码较长时
9、,重点核查程序对的相似度可以在80100%之间的程序对。核查就是对找出满足相似度在指定区间的程序对进行确认与调查,找出抄袭的作业对象,然后对抄袭者进行相应的处罚,以减少抄袭的发生,增加学生的学习动力。 下面我们以实现输入任一年的年份打印该年年历的学生作业为例,进行抄袭检测。 3.1数据收集阶段 如何简单有效地收集到被检测数据是进行抄袭检测工作的基础。为使收集被检测数据的工作简单有效,我们利用了我校为学生提供的程序设计在线评测系统。首先,通过在线评测系统收集到的数据可以保证其正确性,从而保证其有效性,因为只有学生作业能正确地通过在线评测系统的严格评测,才能保证正确的提交作业。其次,在评测系统可以对不同教学班的作业进行自动分类整理,将它们放在相应的文件夹中,等待检测系统的检测。 3.2分析阶段 教师将前面收集好的学生作业提交给检测系统,检测系统对指定文件夹中的程序进行自动检测,得出检测结果。检测结果一般以网页的形式反馈回来,其中包含相似度在某一阈值以上的每对程序的相似度信息。不同的检测系统根据实际情况设定了不同的阈值,这是因为对于相似度小的程序对只有部分代码相似,判定为两者之间是互相抄袭的可能性比较小,因此系统不提供小于这个阈值的程序对的具体相似信息,以提高速度与效率。第 7 页
链接地址:https://www.31doc.com/p-1852157.html