面向Java语言的课程提交校验系统文献综述

 2022-03-18 09:03

计算机技术的发展以及广泛使用对我们的生活带来了巨 大的影响,在提高生活质量、改善传统生活方式的同时,也带来 了一些负面作用。 如:互联网提供了广阔的信息分享、交流平 台,同时也引起了抄袭行为的泛滥。

随着信息技术的高速发展,信息技术与教育教学的结合 已经越来越紧密,针对各类程序设计课程,就有统一的程序 语言支撑平台来帮助教学,程序语言支撑平台为学生提供了 一个综台统一在线练习平台,帮助学生提供编程能力,同时 也帮助教师布置程序设计课程的作业和考试,这种利用信息 技术实现教学自动化大大提高了教师批改作业和考试的效率。然而也正是因为信息技术的发展,从互联网上获取程 序资源也越来越方便和快捷,有些学生可能直接从网上查找 相关程序或者从同学那里直接复制程序提交给程序语言支 撑平台。教师如果去手工检查每个程序,需要进行两两对比, 这样会耗费大量的时间和精力。

源代码相似程度分析系统可以帮助 解决以上问题. 一个良好的源代码相似程度分析系统 还有助于教师把多份学生作业按照相似程度进行分 类, 从而发现对于一道题目学生有多少种不同的解法码相似程度分析来改善搜索结果. 该类 系统还可能作为编译器的代码优化的辅助手段

目前,代码相似性检测方法可以大致划分为以下5类。

1)基于文本的检测方法 基于文本来实现检测是最早的检测代码相似性的技术。 首先,预处理代码段,如除去空格、注释等;接着,将代码段转换成字符,如果两个代码段的字符相同,则两段代码相同。基于文本的检测方法只能实现代码克隆类别1和 类 别2的 检 测,难以实现更复杂的克隆类别3-类 别5的 检 测。此类方法的优点是算法实现过程简单,几乎可以用来检测所有编程 语言的源代码;缺点是不能识别程序的语法、语义等信息,检测准确率较低。

2)基于词法的检测方法 基于词法的检测方法,也称为基于Token 的检测方法。首先,将代码段解析成一个字符串序列(Token序列);接着,检测不同代码段中的Token序列,如果存在相同的Token子序列,说明存在代码克隆现象。常见的检测算法 有最长公共子序列(LongestCommonSubsequence,LCS)、后缀树匹配、Karp-Rabin指纹算法、语义索引技术等。基于词法的检测方法会使用一些轻量级工具统一处理标识符,可以 实现对代码克隆类别3的检测。此类方法的优点是能使用轻 量级工具,可扩展到对多种编程语言的代码和纯文本的检测,同时相对于基于语法、语义等的复杂检测算法具有更低的时空复杂度;其缺点与基于文本的检测方法类似,即不能识别程 序的语法、语义等逻辑信息,因此检测准确率较低。

3)基于语法的检测方法 基于语法的检测方法,也称为基于树的检测方法。 首先,通过对代码进行词法和语法分析,来构建源程序的一棵抽象语法树;接着,比较相同或相似的子树,进而确定是否进行了代码克隆操作。基于语法的检测方法通常和基于词法的检测方法相结合,通过词法和语法的分析,实现对代码克隆类别的检测。此类方法的优点是相对于基于文本或基于 To- ken的检测方 法,可以识别程序的语法信息,提高检测准确率;其缺点是构造 AST以及匹配语法子树两种算法的代价都很大,随着程序规模的扩大,最终检测方法的时间复杂度和空 间复杂度都会非常高。

4)基于语义的检测方法基于语义的检测方法,也称为基于图的检测方法ComputerScience 计算机科学 Vol.47,No.3,Mar.2020 首先,通过对代码的语法结构、上下文环境等进行分 析,来 构 建源程序的程序依赖图;接着,通过匹配算法和程序切片得到 相同或相似的子图同构的 PDG,进而确定是否进行了克隆操作。通过语义分析、程序中函数调用分析等手段,基于语义的 检测方法可以实现对代码克隆类别4和类别5的检测。此类 方法的优点是可以识别程序的语义逻辑信息,提高检测准确 率;其缺点是构造 PDG和子图同构的 PDG的代价较大,且随 着程序规模的扩大,检测方法的时间复杂度和空间复杂度也 在不断提高。

在研究代码相似度检测问题上,普遍采取属性计数法或者结构度量法。属性计数技术是最 先被提出和使用的程序代码抄袭检测技术。它的主要思想是统计程序的一些属性,然后再进行处理,而不考虑程序的内部结构。

剩余内容已隐藏,您需要先支付 10元 才能查看该篇文章全部内容!立即支付

免费ai写开题、写任务书: 免费Ai开题 | 免费Ai任务书 | 降AI率 | 降重复率 | 论文一键排版