论文部分内容阅读
计算机程序代码相似度的自动度量,不仅可以帮助教师检查学生作业中的抄袭现象,还可以辅助实现作业批改或试卷评阅的自动化,对程序代码版权的辅助鉴别也具有很重要的现实意义。本文讨论了目前常用的程序代码相似度度量技术:属性计数技术和结构度量技术,并介绍了几个国外已有的程序代码抄袭检测系统。本研究主要是针对程序代码进行相似度度量,由于程序设计语言固有的特性,如:语言成分较少,针对每门具体的语言都只有有限多个关键字,结构简单等,且国外的相关技术也比较成熟,所以与自然语言文本相似度的度量相比要简单一些。本研究设计了一个实验系统,主要用于检查用C/C++语言编写的程序代码文件之间的相似度。实验系统首先对程序代码作预处理,去掉对相似度度量结果无影响的成分,如程序中的注释、空行以及文字部分等。然后扫描预处理后的程序代码并对其作简单的语法分析,将其转换为包含程序结构信息的标记字符串。考虑到系统的扩展性,所以使用了XML文档描述程序设计语言的语法,即用XML文档定义什么是标记以及程序代码与标记字符串之间的转换规则。最后通过GST(Greedy String Tiling)字符串匹配算法对得到的标记字符串作比较,并根据比较结果给出它们之间匹配程度的数值表示,以此作为程序代码相似度的度量值。该值越大说明程序代码越相似,存在抄袭的可能性也越高。GST算法的一个最大优点是,程序代码中某些代码段位置的变化并不影响最终的匹配结果。对于相似度度量结果值较高的程序对,实验系统会根据用户的选择自动打开每对程序代码文件,并用醒目的颜色标记出相似或相同的代码段。最后,用两组实验数据对实验系统进行了简单的验证和分析。一组是学生程序作业中的一部分代码文件,一组是通过手工添加复制代码段或修改原程序的方式设置的。验证结果表明,该实验系统能检测到实验数据集中大部分的相似代码。