论文部分内容阅读
程序语言课程是计算机及其相关专业非常重要的一门专业基础课,程序语言的教学显得尤为重要。随着互联网技术的迅速发展,信息化教育成为现代化新型教育模式,然而互联网带来便利的同时,也为程序代码抄袭提供了方便。程序代码相似度检测不仅可以帮助教师检测学生的程序作业抄袭情况,同时对软件版权的鉴定也具有好的现实意义。代码相似度检测技术的研究已有几十年的历史,基本归结为两大类技术:属性计数技术和结构度量技术。本文在分析各种代码相似度检测系统的基础后,对相似度检测方法展开研究。属性计数技术被证明只对完全抄袭的代码检测有效,当今比较成熟的系统都采用结构度量技术,主要利用GST字符串匹配算法进行结构度量。首先分析了基于串匹配算法的代码相似度检测方法,并对其进行了改进;然后充分挖掘程序代码的结构信息,设计了基于子图同构算法的代码相似度检测方法。该方法采用基于回溯搜索的子图同构算法,把程序源码按节点类型和边类型转换成程序依赖图。代码的结构信息主要是由各行代码间的数据依赖和控制依赖关系构成,代码行转换成七种类型的节点,根据代码层次树结构将节点之间的数据依赖和控制依赖关系进行查找,获得程序依赖图。为了去除对输出结果没有影响的无用代码,程序依赖图经过主数据流的抽取最终变为主数据流图。把需要进行检测的两段代码的主数据流图使用基于回溯搜素的子图同构算法找出两个图的最大公共子图,根据公共子图的大小来确定两段代码的相似度,可以有效排除一些无用的结构和变量,提高检测的准确性。基于GST串匹配和子图同构的相似度检测方法,本文在程序语言支撑平台上设计和实现了代码抄袭检测功能。论文详细阐述了系统各模块的设计和代码实现,最后用两个实验程序集对系统进行了性能测试,实验结果表明本系统不仅能检测到普通的抄袭手段,而且对高级抄袭手段也能达到接近90%的检测准确率。