本发明涉及计算机领域,具体涉及一种基于属性计数和结构度量技术相结合的程序剽窃检测方法及系统。
背景技术:
为了遏制日常的c语言程序设计课程中抄袭、剽窃代码现象的蔓延,解决在大量源代码中快速、准确地识别剽窃代码的问题,现有技术中涌现了多种剽窃检测系统,但是普遍检测结果不够准确,系统运行时间复杂度高等问题。
技术实现要素:
为解决上述问题,本发明提供了一种基于属性计数和结构度量技术相结合的程序剽窃检测方法及系统。
为实现上述目的,本发明采取的技术方案为:
基于属性计数和结构度量技术相结合的程序剽窃检测方法,包括如下步骤:
s1、提交程序代码
将待检测程序提交给系统,系统接受用户提交的检测任务;
s2、预处理
将源程序进行预处理,即去除无用的数据,比如注释、空行、多余的空格,头文件等;
s3、采用gst字符串匹配算法计算相似度,字符串匹配算法可以准确检测教学中的大量低级剽窃问题;并通过决策函数依据gst算法得出的相似度数值判断是否满足决策条件,若满足决策条件,则返回结果,结束检测;若不满足决策条件则进行步骤s4的操作;
s4、根据c语言的特征,从源程序中选取属性特征元素和结构特征元素,然后依据属性计数法和结构度量技术相结合的方法计算相似度;
s5、综合两次相似度度量结果给出相似度评价等级,即确定程序代码剽窃的程度。
为了解决上述技术问题,本发明还提供了一种基于属性计数和结构度量技术相结合的程序剽窃检测系统,包括用户界面、后台管理模块、代码相似度检测模块和数据库模块;用户提交代码检测请求,后台管理模块调用代码相似度检测模块,代码相似度检测模块从用户提交的源码数据库中读取数据源码,通过上述的方法完成相似度计算,并将计算的结果反馈给后台管理模块,后台管理模块再把检测的结果反馈到用户界面,供用户查看。
本发明具有以下有益效果:
(1)针对已有检测系统运行时间复杂度高的问题,提出了一种基于属性计数法和结构度量技术相结合的程序相似度计算方法,通过提取代码属性特征和结构特征方法,降低了检测系统的时间复杂度。实验表明,检测系统的运行时间复杂度与最长公共子序列算法相比降低了15.1%。
(2)针对已有检测系统准确性低的问题,通过分析代码剽窃的特点,优化了检测流程:优先使用gst算法检测低级代码剽窃问题,再依据决策函数判断是否采用属性计数法和结构度量技术相结合的方法进一步计算相似度,采用两次检测结果的综合评价得出最终检测结论,实验结果表明,对于构造样本、学生日常作业和上机考试提交的程序代码样本中的低级的剽窃手段,检测结果的准确率达95%;而对于较为高级的检测手段,比如增加冗余、等价结构替换等,本文设计的检测系统比jplag系统的精度提高了5.6%。
(3)实现了程序代码的自动化检测系统一套,包括代码预处理、有效选择源程序的特征、高效提取特征元素及相似度检测算法的实现。为了验证本研究方法及构建出一套剽窃检测系统的有效性,选取三组典型样本在jplag系统和本研究搭建的剽窃检测系统同时进行检测,最后比较检测结果。综合分析三组样本中常见的五类剽窃手段的检测结果比jplag系统的精度提高了7.3%。软件测试表明,该系统能够稳定可靠地工作,较好的实现了设计的目标。
附图说明
图1为本发明实施例基于属性计数和结构度量技术相结合的程序剽窃检测系统的系统框图。
图2为本发明实施例基于属性计数和结构度量技术相结合的程序剽窃检测方法的流程图。
图3为本发明实施例中gst算法度量代码相似度流程图。
图4为本发明实施例中基于属性计数法和结构度量技术相结合的相似度计算流程图。
具体实施方式
为了使本发明的目的及优点更加清楚明白,以下结合实施例对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明实施例提供了一种基于属性计数和结构度量技术相结合的程序剽窃检测系统,包括用户界面、后台管理模块、代码相似度检测模块和数据库模块;用户提交代码后业务逻辑核查用户的提交的代码是否合法,如符合要求则将用户提交的代码传给后台管理;后台管理模块将用户的请求传给代码相似度检测模块,代码相似度检测模块从数据库中读取待检测的源码及配置信息,进行相似度检测,检测之后将相似度计算结果反馈给评测程序,评测程序根据其内置的分段函数进行评估,给出评测等级,即评测结果,最后将结果输出到用户浏览器。
如图2所示,所述代码相似度检测模块通过以下步骤完成相似度检测:
s1、提交程序代码
将待检测程序提交给系统,系统接受用户提交的检测任务;
s2、预处理
将源程序进行预处理,即去除无用的数据,比如注释、空行、多余的空格,头文件等;
s3、采用gst字符串匹配算法计算相似度,字符串匹配算法可以准确检测教学中的大量低级剽窃问题;并通过决策函数依据gst算法得出的相似度数值判断是否满足决策条件,若满足决策条件,则返回结果,结束检测;若不满足决策条件则进行步骤s4的操作;具体的,如图3所示,运用gst算法度量相似度,就要把程序代码标记化,也就是把代码表示为字符串,代码转化为字符串时需扫描源程序。考虑到源程序代码的语言及版本,不同的程序设计语言进行扫描时要定义的标记和字符串的转换规则是不同的。基于这样的考量,设计了基于xml的针对c语言的扫描与语法分析工具。在使用公式计算相似度之前,需把代码中的标记转化为对应的字母或数字,这样就把程序转化为能够体现程序特征的字符串,最后用gst算法对字符串进行相似度计算,即比较字符串。
s4、根据c语言的特征,从源程序中选取属性特征元素和结构特征元素,然后依据属性计数法和结构度量技术相结合的方法计算相似度;具体的,如图4所示,为了提高检测结果的准确性,将gst算法检测的结果介于60%和90%之间的程序对,用基于属性计数法和结构度量技术相结合的相似度计算方法进行二次检测。计算流程如图上图所示,首先用属性计数法选定程序的特征元素并获取属性元素,在选定特征元素时,要充分考虑到源程序语言的特点,利用著名的词法分析工具lex将待检测的源程序进行编辑并转化为标识符,最后统计相应标识符的数量。再次利用结构度量技术确定程序常用的结构,并获取常用结构。根据源程序特点利用开源的ucc,编写语法规则,将程序生成语法结构,以确保lex能够将源程序的结构特征元素提取出来。最后将两次提取的特征元素组合成特征向量,并用余弦系数法计算特征向量的相似度。
s5、综合两次相似度度量结果给出相似度评价等级,即确定程序代码剽窃的程度。
实施例
构造样本数据获取
西安交通工程学院中兴通信系15级计算机应用技术专业1班的10个学生根据给定的一个c语言排序程序代码,按照要求进行修改,分别给源代码作以下五种类型的修改:
(1)增加或更改注释;
(2)增加空格、冗余;
(3)改变函数代码分布,打乱语句顺序等改变排版;
(4)更改变量名;
(5)等价控制结构的互相替换。
要求学生按照以上五种类型修改,同时要保证修改后的程序都能够正确运行出结果。从学生提交的修改程序中选择出具有代表性的样本进行实验,构造样本的类型分别是:
(1)c_code11.c和c_code12.c的修改类型是:增加或更改注释;
(2)c_code21.c和c_code22.c的修改类型是:增加空格、冗余;
(3)c_code31.c和c_code32.c的修改类型是:改变函数代码分布,打乱语句顺序等改变排版;
(4)c_code41.c和c_code42.c的修改类型是:更改变量名;
(5)c_code51.c和c_code52.c的修改类型是:等价控制结构的互相替换。
构造样本测试结果分析
表1实验系统及jplag系统对十个构造样本的相似度度量结果
表1中给出构造样本和原始程序之间的相似度度量结果。从表中可以看出本实验系统给出的度量结果比较准确。尤其是在增加或更改注释、更改变量名等低级剽窃方面能准确检测;在改变函数代码分布,打乱语句顺序方面的检测与jplag系统还有差距;在等价控制结构相互替换方面检测效果比jplag系统好。一般来说,对于初级学习程序设计课程的学生来说,如果能够看懂其他同学的代码,并进等价控制语句的替换,已经说明该生掌握了基本的程序设计的知识,达到了课程基本的学习目标。实际上这样改造程序的过程对于初学者来说也是一种好的学习方法,是值得肯定的。我们不能把这种情况认定为抄袭,所以系统对这种类型的剽窃检测不敏感,也是可以理解的。如果商业的软件设计、开发人员,这样的行为会被认定是剽窃。在改变函数代码分布,打乱语句顺序等改变排版方面本实验系统和jplag系统之间有一定的差距,这也是本系统要改进的方面。在程序中增加冗余是不容易检测的,随着插入的冗余代码的增多,度量结果的准确性会逐渐降低。国外一些著名检测系统对于这种抄袭类别的识别能力也是非常有限的,而本实验系统比jplag系统的检测结果精确度提高了6.3%。
综合以上分析,构造样本的测试结果表明,本实验系统能够识别准确识别初级剽窃手段,在高级剽窃方面比jplag系统精确性提高了6.3%,综合比较5种类型的剽窃手段发现本申请设计的实验系统比jplag系统精确度提高了8.2%。
本具体实施使用gst算法对代码进行初次相似度计算,为了提高检测结果的准确性,在系统中加入决策函数,判断是否需要使用本申请提出的属性计数法和结构度量技术相结合的方法进一步检测,综合两次检测给出相似度度量结果。gst算法可以准确检测低级的剽窃手段,但时间复杂度较高;本申请提出的属性计数法和结构度量技术相结合的方法的时间复杂度低,能与gst算法实现优势互补。本申请所设计的代码剽窃检测系统,从计算的精度和执行效率两个角度来看,都有较好的执行效果,能够满足程序设计课程代码检测剽窃需求。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。