论文部分内容阅读
随着科技的发展和自动化教育水平的不断提高,涉及编写代码的地方越来越多。其中,作为培养软件开发人员摇篮的各个高校也纷纷开设了一系列编写代码的课程。由于电子文档易于复制的特性,如何减少或者防止文档拷贝、文档克隆现象的发生,一直都是教师们最为关心的问题,因而也就成为了科研人员的研究热点。为了能够合理、有效的检验学生对编程课的态度以及在课上的真实收获,就迫切需要一种能够检测代码相似度的工具来判断学生代码间是否存在抄袭。本文首先分析和研究了国内外现有的程序克隆检测技术,为了解决在代码相似度检测过程中对比双方源代码特征不明显从而导致特征选取效果不佳的问题,提出一种基于数字指纹的C程序克隆检测方法。该方法主要包含如下六个步骤:①将对比双方的源代码进行预处理,即删除双方源代码中注释、宏命令等与代码语义无关的内容;②将预处理后的双方代码进行分词,即将代码中相邻的不同类型的词之间加上空格;③将分词过后的双方代码进行格式化,即将代码中所含关键词中表征数据类型的词和标识符分别用一个形式化的词进行替换,并删除相邻词与词之间的间隔符,形成格式化代码串;④将双方的格式化代码串利用数字指纹技术转化成一系列的数值,形成数值序列;⑤首先从双方数值序列中去除已训练好的无效数值,然后从有效数值中使用最小Hash法选取出代表双方代码的数字指纹序列;⑥将对比程序双方数字指纹序列之间的相似度值来表征双方源程序之间的相似程度,从而判断出源程序对之间是否存在抄袭。事实上,上述的基于数字指纹的C程序克隆检测方法是在仔细研究数字指纹技术的各个关键环节(包括指纹粒度的大小、指纹选取策略的比较)的基础上提出来的,并最终完成了基于数字指纹的C程序克隆检测系统。实验证明,该方法计算过程简单、易于理解,能够有效的提高整体的计算速度;该方法在去除代码无效片段的基础上选取代码特征,相似度检测结果可信度高,降低了误判的概率;该方法能够识别代码中修改注释、重新排版、标识符重命名和数据类型替换等多种代码抄袭掩饰手段。