论文部分内容阅读
随着互联网技术的发展,沟通交流越来越便捷,使得代码抄袭变得愈发简单。代码抄袭本身是一种复杂且难以界定的行为,人工检测效率低、效果差且存在主观因素。由于缺少公信力强的检测系统,国内大部分高校的程序设计题检查工作仍由人工完成。本文目的便是解决此问题,改善现有代码抄袭检测的窘境。本文在分析现有代码抄袭检测技术研究成果的基础上,针对现有技术存在的缺陷,提出了一种基于子树追踪的代码抄袭检测方法。此外,现有的研究都是检测两样本间的相似度,鲜有考虑抄袭样本间存在抄袭小组的情况,因此本文进一步提出一种基于改进k-means的检测分组方法,在检测抄袭的同时,能有效地定位出各抄袭小组。本文具体研究内容包括:(1)针对高阶代码伪装检测提出基于子树追踪的代码抄袭检测方法。将代码转换成抽象语法树形式,提取抽象语法树的特征并跟踪各子树的特征向量。计算各特征向量间距离及特征相似矩阵,并基于其加权距离得出代码距离。最后,通过代码距离及距离阈值量化代码相似度。实验结果表明,该方法能够应对多种抄袭种类,尤其在处理“代码重排序”类型时其检测效果优于现有系统。(2)针对k-means聚类算法需要指定初始k值(簇数目)而不适用于代码抄袭样本聚类,本文提出一种自动寻找k值的改进k-means聚类方法,其通过比较簇直径与簇间距离来确定某簇是否完成分簇,循序渐进寻找所有簇。并通过实验说明了该方法的有效性。(3)以本文提出的两个方法为核心,设计实现了一套在线抄袭检测系统。该系统主要服务于教师与学生,为了培养用户使用习惯,除了代码抄袭检测分组功能外还开发了问答平台功能,为广大师生提供在线交流学习平台。同时,为了提升用户体验,本文使用MySQL主从复制及Nginx+keepalived工具,分别从数据和应用两方面提升了在线抄袭检测系统的高可用性。