论文部分内容阅读
抄袭是当前普遍存在的现象。近年来,该现象愈演愈烈,手段越来越隐蔽,有些人甚至对抄袭习以为常。在高等教育领域,因计算机类专业工程实践性的特点,要求众多课程围绕计算机进行实践教学与考核,而计算机上电子文本更易被复制及传播。国外有研究者曾针对澳大利亚蒙纳什(Monash)大学的程序设计类课程中程序代码抄袭现象进行调查,统计显示:高达85.4%的学生承认抄袭过他人的作业。这些问题的存在,已严重影响到学生能力的培养与教师正常教学的进行。程序代码抄袭检测技术能够高效快捷地发现有抄袭嫌疑的程序代码,有助于扼制学生不良学风的形成,保证教学质量与客观评价。本文就目前国内外现有程序代码抄袭检测技术进行了研究分析,提出了基于抽象语法树的程序代码抄袭检测方法。基本思路:借助GCC编译器为每一源程序分别构造抽象语法树,程序代码所包含的语义可以被解析至抽象语法树的各个结点中;由于抽象语法树包含许多有助于编译的细节信息,进而优化抽象语法树的结构关系,消除冗余结点,提取与程序有关的可用结点;之后进行可用结点解析,生成特征标记串文本,该标记特征串文本不再是一个线性串,而是一个含有丰富程序语义信息的结点集合;最后利用决策函数对特征标记串集进行相似性计算,完成代码检测。为了有效判定存在抄袭的程序对,还设定了相似性阈值自适应选取机制。在上述理论研究的基础上,设计并实现了一个基于抽象语法树的程序代码抄袭检测实验系统,该实验系统能够自动完成抽象语法树优化、结点解析和抄袭检测。以C语言程序代码为测试数据,并与MOSS系统的检测结果进行对比验证。实验表明,基于抽象语法树检测技术的上述试验系统,能够有效检测含有函数调用的复杂程序结构,并具有多种抄袭手段的程序代码。