论文部分内容阅读
随着计算机应用的普及,人们对软件的需求量越来越大。各高等院校也着力于培养学生开发软件的能力,主要的途径是通过开设程序设计类课程,培养学生的实际动手能力。随着程序设计类课程的作业量的增加,部分学生由于懒惰或没有学好该类课程,会抄袭其他学生的作业。在作业较为简单且学生较少的情况下,教师可以手动判别学生的作业是否存在抄袭。但是,随着学生人数的增加,程序作业的逐渐复杂,教师的工作量就会成倍的增加,甚至很难通过教师的手工操作来发现程序作业的抄袭现象。因此,开发一个程序代码抄袭自动检测系统是很有必要的。
当前针对程序代码抄袭检测的研究大部分集中在结构度量法上,该方法主要分为标记串的生成和标记串相似度计算两个部分。由于是通过计算标记串间的相似度来间接获得程序代码间的相似度,因此标记串所携带的结构信息与程序代码结构的吻合程度,决定了算法最终计算结果的精确度;同时标记串的规模对系统计算的速度有着很大的影响。然而,目前已有的技术无论在速度和精度方面都有所欠缺,所以改进标记串生成技术成为该领域重要的研究内容。本文研究采用结构度量法,在分析已有的标记字符串生成技术的基础上,提出了新的标记字符串的生成方法。
本论文主要做了以下几方面的工作:一、针对程序代码的特点,本文采用了类似正向最大匹配算法思想的一个有效的分词方法。同时为了缩短程序代码对应的标记字符串的长度,同时保证标记字符串与程序代码之间的吻合程度,提出一种有效的标记串替换规则。二、提出了一种新的标记串生成方法。本文采用将程序代码按照函数执行顺序生成标记字符串的方法,这样可以过滤掉冗余函数,消除冗余函数对检测结果的影响,同时可以在一定程度上减少标记字符串匹配算法的运行时间。三、实现了一个程序代码抄袭检测实验系统,该实验系统采用RKR-GST算法作为标记字符串匹配算法。该系统首先删除程序代码中的冗余信息,然后采用本文中提出的标记字符串生成方法生成标记字符串,最后实现了标记字符串的相似度计算,从而确定程序代码间是否存在抄袭。同时,该实验系统实现了查看相似程度较高的函数对和冗余函数的功能。本文最后对该实验系统进行相关实验,验证了本文所提出技术在系统性能方面的改进以及该系统在实际应用中的作用。