程序代码相似度度量算法研究_邓爱萍
程序代码相似性检测在论文抄袭判定中的应用

根 据 O 年 年底 ,汤 森 路透 集 团发布 的报 告 《 9 全球 科研 报 告 : 中 国》 (lb lR sa c e ot h n )中称 ,近 年 来 ,中 国 G o a ee rh Rp r :C ia 的科 研 论文 数 量呈 爆炸 性 发 展 ,仅次 美 国 ,高 居 世界 第二 。而 与之 形 成鲜 明相 比的是 , 中国 论文 的 被 引用 率低 ,质量 不 高和 原 创性 内容不 多。这 一 矛盾 产 生 的主 要 原 因在 于 高校 论 文互 相抄 袭 的现 象 。 随着 网络 技 术 的 日益 普及 , 这股 学 术不 端 之 风更 深深 的 影 响 了在校 学 生 。学 术浮 夸 和 论文 抄 袭现 象 大量 的出 现在 应 届 学 生 的 毕业 论 文之 中 。现有 的学 术 不端 检测 系 统 主要 是 针对 文 字 的 检测 ,对纯 理 论 的论 文 的抄 袭 判 定 比较准 确 。但 是 与 文科 学 生不 同,理 工科 学 生 的 毕业 论文 中常会 引用 一定 数 量 的代 码 ,这 些代 码 的独 创 性 不被 判 断 。致 使 部 分 理工 科 毕业 生 在毕 业 论文 中大量 引用 代 码 , 以减 少文 字部 分 引用率 的百 分 比 。 了解 决这 个 问题 , 为 亟 需在 现 有 的学 生不 端 检测 系 统 中建 立针 对 理 工科 学 生 的程 序代 码相 似 性检 测模 块 。 研究 背景 程 序 代 码 相 似 性 的检 测 最 早 是 源 于 对 重 复 代 码 的检 测 和 对 代码 的优 化 。对 于程 序 代码 相 似 度 的度 量研 究 , 国外 起步 的 比较 早 , 相 关 的研 究 也 比较 多。 早 在 二 十 世 纪 七 十 年代 , 国外 就 有 学 者 开 始 研 究 检 测 代 码 相 似 性 的 理 论 ,和 基 于 理 论 构建 的检 测 系 统 。 目前 常 用 的 代码 检 测 技 术 有 两 类 : 一是 最 早 于 17 , 由 96 Pr u 大 学的 K J Ot nt i 提 出的基 于属 性计 数法 (t rb t u de . .t es en A t iu e Cu t n ) ;二 是 19 o n ig 96年 , 由 Vr o L和 W s J提 出的 基 e c K ie M 于 结构 度量 法 (tu tr er c ) J Sr cu eM t is 。
基于单词的源程序相似度度量方法

结合使用结构度量和属性计数技术 。 D o n a l d s o n
的抄袭 检测 系统[ 3 1 使用 了 8个属 性计 数法 中的属性 ,
同样是生成 了表示程序结构 的字符串 , 字符串中的 每个字母表示一个或多个程序的结构信息 , 如变量
声明、 赋值 语 句 和过 程 调用 等 。如果 生 成 的 字符 串
种算 法 比较这 些字 符 串 ,再 根据 比较 的结 果判 断两
和 Q完全相 同, 则相似性 s ( P , Q) = 1 。 程序代码的相似度与软件系统的相似度定义类
似。
个程序是否相似。 这种技术的难点有两个 , 一个是如
何 用 标 记字 符 串序列 表 示 程序 语 言 中的各 种 元 素 ,
符或操作数的数量、 所有操作符或操作数的总和 、 循 环 的数量 、 过程 的数量 、 代码行的数量 、 变量声 明和 使用的数量 、 控制语句的数量等 , 计算每两个 向量之 间的距离 ( 如欧几里德距离 ) , 若两个程序的特征 向 量之间的距离很小 , 就可 以认为这两个程序很相似。
1 . 2 程序代码 的相似度度量技术
另一个是选择一种合适 的字符串比较算法 。
K~
第1 步: 预处理。删除源程序中的注释语句 、 回 车、 多余 的空行和空格。
第 2步 : 单词 识 别 。 按 照 出现 的先后 顺序 识别 程 序 中的单词 , 包括 : 关 键字 、 变 量名 、 常量 名 、 运算 符 、 运算数 、 函数名 等 , 得到 构成 源程 序 的单词 序列 。 第 3步 : 计 算 编辑距 离 。 根据 两个 程序 的词 汇序 列, 基 于单 词 计算 编辑距 离 。 第 4步 : 求 最长 公 共子序 列 的长度 。 根 据两 个程
程序代码相似度度量研究的开题报告

程序代码相似度度量研究的开题报告一、研究背景和意义程序代码相似度度量是软件工程领域的一项重要问题,它可以用于代码重构、复杂度分析、代码复用等方面。
在软件开发过程中,代码相似度度量可以帮助程序员找到相似点和差异点,有助于更好地理解程序的结构和设计,还可以帮助学生和开发人员提高代码质量,从而提高软件开发效率和质量。
目前,市面上已经有很多代码相似度度量工具可供选择,但是这些工具大多基于字符、标记或者语法树的比较方法,往往不能很好地解决代码的语义相似度问题,而且时间复杂度高,处理大规模代码数据困难。
因此,研究如何快速、准确地衡量程序代码的语义相似度,具有很高的研究和应用价值。
二、研究目标和内容本课题的研究目标是:结合自然语言处理、机器学习等技术,设计一种能够准确、高效地度量程序代码相似度的方法,以提高程序开发效率和质量。
研究内容包括:1. 收集和预处理程序代码。
这一步包括获取开源代码、规范化和清理代码,以及将代码转换为可处理的格式。
2. 提取代码特征。
针对代码特有的语法结构和语义规则,设计合适的代码特征提取方法,将程序代码转换为特征向量。
3. 利用机器学习算法训练分类器。
根据分类问题的特点,选择合适的分类器进行训练和优化。
4. 应用训练好的分类器度量程序代码相似度。
对于给定的一对程序代码,用训练好的分类器计算它们之间的相似度得分。
5. 实验分析。
对比其他常见的代码相似度度量方法,分析新方法的优缺点,并针对不同应用场景进行实验测试,评估度量方法的准确性、效率和可拓展性。
三、研究方案和方法本课题借鉴了相关领域的研究方法和实践经验,主要采用以下方法和技术:1. 自然语言处理技术。
程序代码和自然语言都有类似的结构和规则,因此可以应用自然语言处理技术提取程序代码的语义特征。
例如通过词干提取、词向量化等方法将代码转换为向量表示,或通过句法分析、语义分析等方法提取更丰富的语义信息。
2. 机器学习算法。
基于特征向量的分类算法是程序代码相似度度量的常用方法,本课题将探究构建合适的特征向量和选择最优的分类器,例如支持向量机、随机森林、神经网络等。
程序代码相似度度量算法研究

常 用 的 属 性 计 数 法度 量 指 标
在属性计数技术中,有以下 6 个常用的代码相似度度量
1.2.1
点 阵 图 (dotplot) 法
点阵图 [5] 是一种视觉展示两个代码块 ( 或任意文本 ) 之间
指标, 被描述为一个 “6 元组” 向量。 (1)容量: 容量被认为是任何算法实现的大小的反映, 常使 用 Halstead 的软件科学度量方法来量化。该方法首先对程序 代码中的词元进行词频统计:1= 用到的操作符的种类数;2= 用到的操 作数的种 类数; 1= 出现 的所有操 作符总数 ; 2= 出 现的所有操作数总数。然后用如下公式计算程序容量 = 式中: = 汇量。 (2) 控制流:控制流常用 McCabe 提出的圈复杂度 (cyclomatic complexity) 来度量。圈复杂度是一种为程序逻辑复杂性 提供定量测度的软件度量方法,用于计算程序的基本的独立 路径数目。该方法首先将程序代码转换为一个带有惟一入口 和出口结点的控制流图。这种方法具有语言依赖性,这意味 着在创建控制流图前,必须理解编写代码的语言的语法和语 义。在程序控制流程图中,节点表示程序中一个顺序代码单 元,边表示程序中产生的分枝。一个有 条边和 个节点的控 制流图 G, 其圈复杂度定义为 = 其中: = 控制流图中的模块数。 (3) 结构: 这个度量标准考虑到使用一些指标去阐明模块 之间的耦合程度。 (4)数据依赖: 用与度量程序控制流相似的方法, 数据依赖 也能被度量。在流程图中,用结点来阐明谓词子句和变量定 义。Bieman 和 Debnath 建议用广义程序图 (generalised program graph, GPG) 的形式来表示。 (5)嵌套深度: 这是一个简单的度量标准, 通过赋给每个代 码行一个深度值,返回一个程序的平均嵌套深度。平均值是 由这些深度值的总和除以程序中语句的个数计算而来。 (6) 控制结构: 给出现在程序中的每一种类型的控制结构 赋予一个权值, 例如给一个 if...then 结构赋予权值 3, 所有权值 的总和常用来表示一个程序的复杂度。 +2 (2) log2 (1) 1+ 2——程序长度; = 1+ 2 ——程序所用的词
程序代码相似度检测技术的研究与实现

网络通讯及安全本栏目责任编辑:代影程序代码相似度检测技术的研究与实现卫军超,耿楠*(西北农林科技大学信息工程学院,陕西杨凌712100)摘要:针对传统相似度算法应用在程序设计课程作业检测中精度较低这一问题,通过研究最长公共子序列等算法,发现其优缺点,在分析的基础上,结合结构度量技术和属性技术两种技术,提出一种性能较好的程序相似度计算方法。
方法首先对源程序进行初步处理,将程序中的注释语句和空格删除,再次确定常用元素及常用结构,然后利用Lex 统计、抽取程序元素;利用开源代码ucc 生成语法树,之后抽取相应的语法结构;最后生成特征向量,并计算代码相似度。
实验结果表明该方法比最长公共子序列算法精度提高了10.6%。
关键词:属性计数法;结构度量技术;相似度度量中图分类号:TP311文献标志码:A 文章编号:1009-3044(2017)05-0039-02Research on and Application of Techniques of Test for Similarity of Program Codes WEI Jun-chao,GENG Nan *(College of Information Engineering Northwest A&F University,Yangling 712100,China)Abstract:To solve the problem of the low precision of testing for similarity of program codes in traditional ways,this thesis pro-poses an improved technique to make such a test on the combination of technology of attribute counting and that of structure cal-culation through studying and comparing several different methods of calculating the Longest Common Subsequence.Firstly,source program is processed primarily,annotation statements and spaces are deleted,and common elements and structures get confirmation;next,statistics are made by means of Lex,program elements are extracted,and abstract syntax trees get to be gen-erated using UCC;then,grammar structures are extracted;lastly,eigenvector is produced and the similarity can get calculated.The experimental result shows that the new method is 10.6percent more precise than those of calculating the Longest Common Subsequence.Key words:attribute counting;structure measurement;similarity measurement在程序设计课程教学中,尤其是在上机编程训练过程中,需要学生通过独立地编程练习来提高程序设计能力,然而实际的情况是部分学生存在不同程度地抄袭他人的作业。
一种C程序代码相似度检测方法

F福建电脑U J I A N C O M P U T E R福建电脑2018年第6期0 引言C 语言诞生于上世纪70年代,是嵌入式领域的主导语言,和汇编语言一起使用,功能强大,大型游戏软件也多是用C 语言开发,使用广泛。
在课程安排上,C 语言是作为入门的编程语言,辅助操作系统及其它相关课程的学习。
然而随着信息技术的发展,从互联网上获取程序代码资源越来越方便,有些同学直接在互联网上查找相关C 程序代码或者抄袭其他同学的程序代码,所以C 程序代码的相似度检测在编程语言教学中具有重大意义。
因为不同的编程语言的语法规则有许多差异,所以对于不同的编程语言的程序代码的相似度很难用一种统一的标准或方法来检测,本文提出了一种适用于C 程序代码的相似度检测方法。
1程序代码相似度检测的相关技术目前,国内外对于程序代码的相似度检测技术主要有结构度量和属性计数方法[1]。
结构度量技术主要是通过对程序代码的结构信息以及执行流程进行分析来检测两段程序代码的相似度,常选用的检测结构主要有分支结构、循环结构、条件结构和函数个数。
属性计数技术主要是通过处理程序代码的一些属性值,不考虑程序代码的语法结构,实现较为简单,常选用的属性主要有自定义变量个数、数组个数、运算符个数、关键字个数。
2 C 程序代码相似度检测方法设计本文提出的适用于C 程序代码的相度检测方法结合了结构度量和属性计数方法,利用正则表达式从一段C 程序代码中提取出特征向量,向量各元素就是C 程序代码中每一个特征词的个数,再用逆向文件频率方法对特征向量的每个元素进行加权处理,最后利用夹角余弦法对加权后的特征向量进行夹角计算,进而得出两段C 程序代码的相似度。
整个使用于C 程序的相似度检测方法的步骤如图所示。
3 C 程序代码特征向量的生成3.1C 程序代码的预处理对于一段C 程序代码,程序中的一些无关字符(如头文件、空格、空行、注释行等)会影响程序代码特征的提取,所以在程序代码特征提取之前,要先把这些与程序代码相似性无关的信息剔除,尽可能地屏蔽一些简单的抄袭手段对代码外观的影响。
程序代码相似度度量算法研究

c d l i i ii ot to ei e r ia t o s d ns poet rs T e oe i l i aue n e e cn lg oe a a s smp r n ry h i n ly ft et’ rjcwok. h d mi ry p g r m a tv ft o g i u c s a tme srme ts yt h oo y it k e h
程序代码相似度度量算法研究
邓爱 萍
( 南人 文科技 学院 计 算机 科 学技 术 系 ,湖 南 娄 底 4 7 0 ) 湖 10 0
摘 要 :代码 剽 窃是程序设 计课 程 中经常 出现 的一种 作弊行 为 ,检 测剽 窃的源代 码 、验证 学生程 序作 业的原创 性在教 学 中
很 重 要 。 序 代 码 的 相 似 度 度 量 是 剽 窃检 测 的 关 键 技 术 。 过 对 现 有 程 序 代 码 相 似 度 度 量 技 术 进 行 研 究后 , 于 K r— ai 程 通 基 a R bn p 和 最 长 公 共 子 串算 法 思 想 , 出 了一 种 改 进 的 源 代 码 相 似 度 度 量 算 法 , 串的 散 列 值 匹 配 算 法 。 提 即 关 键 词 : 代 码 ; 相 似 度 度 量 ; 剽 窃 检 测 ; 串 匹配 算 法 ; 散 使 用 属 性 计 数 法 的检 测 算 法 , 加 向量 96 对 增
维 数 并 不 能 改 善错 误 率 。改 进 属 性 计 数 法 的措 施 就 是 加 入 程 序 的 结 构 信 息 , 合 结 构 度 量 来 检 测 剽 窃 。Mc ae 出 的 圈 结 Cb 提
O 引 言
程 序 代 码 相 似 度 度 量 技 术 主 要 应 用 在 代 码 的剽 窃 检 测 上 。 判 断 一 个 程 序 是 否 是 从 另 一 个 程 序 复 制 而 米 ,实质 是 对这两个程序 的相似度进行度 量 , 根据 度 量 的结 果给 L 一 个 乜 相 似 度 的数 值 表 示 , 由这 个 数 值 判 断 这 两 个 程 序之 间 是 否 再
程序代码相似度检测技术的研究与实现

程序代码相似度检测技术的研究与实现作者:卫军超耿楠来源:《电脑知识与技术》2017年第05期摘要:针对传统相似度算法应用在程序设计课程作业检测中精度较低这一问题,通过研究最长公共子序列等算法,发现其优缺点,在分析的基础上,结合结构度量技术和属性技术两种技术,提出一种性能较好的程序相似度计算方法。
方法首先对源程序进行初步处理,将程序中的注释语句和空格删除,再次确定常用元素及常用结构,然后利用Lex统计、抽取程序元素;利用开源代码ucc生成语法树,之后抽取相应的语法结构;最后生成特征向量,并计算代码相似度。
实验结果表明该方法比最长公共子序列算法精度提高了10.6%。
关键词:属性计数法;结构度量技术;相似度度量中图分类号: TP311 文献标志码: A 文章编号:1009-3044(2017)05-0039-02Abstract: To solve the problem of the low precision of testing for similarity of program codes in traditional ways, this thesis proposes an improved technique to make such a test on the combination of technology of attribute counting and that of structure calculation through studying and comparing several different methods of calculating the Longest Common Subsequence. Firstly,source program is processed primarily, annotation statements and spaces are deleted, and common elements and structures get confirmation; next, statistics are made by means of Lex, program elements are extracted, and abstract syntax trees get to be generated using UCC; then, grammar structures are extracted; lastly, eigenvector is produced and the similarity can get calculated. The experimental result shows that the new method is 10.6 percent more precise than those of calculating the Longest Common Subsequence.Key words: attribute counting; structure measurement; similarity measurement在程序设计课程教学中,尤其是在上机编程训练过程中,需要学生通过独立地编程练习来提高程序设计能力,然而实际的情况是部分学生存在不同程度地抄袭他人的作业。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(4)数据依赖:用与度量程序控制流相似的方法,数据依赖 也 能 被 度 量 。 在 流 程 图 中 ,用 结 点 来 阐 明 谓 词 子 句 和 变 量 定
义。Bieman 和 Debnath 建议用广义程序图(generalised program graph,GPG) 的 形 式 来 表 示 。
1 程序代码相似度度量技术
早在 20 世纪 70 年代初,就有学者研究阻止大规模拷贝程 序 的 技 术 和 软 件 ,出 现 了 一 批 比 较 典 型 的 程 序 源 代 码 剽 窃 检 测系统[1-4]。Halstead 提出的软件科学度量方法是最早和最典型 的属性计数法。Halstead 度量方法以程序中出现的操作符和操 作 数 为 计 数 对 象 ,以 它 们 的 出 现 次 数 作 为 计 数 目 标 来 计 算 程 序容量和工作量。Rottenstone 在 1976 年首次将 Halstead 的软 件科学度量方法投入应用,实现了第一个针对于 Fortran 代码 的 剽 窃 检 测 系 统 。 但 是 ,单 纯 的 属 性 计 数 法 抛 弃 了 太 多 的 程 序结构信息,导致检测结果的错误率太高。Verso 和 Wise 在
×
1, 2 = 1
2
=1
(3)
2
2
1.2 结 构 度 量 技 术
=1
=1
采 用 结 构 度 量 技 术 的 剽 窃 检 测 系 统 中 ,通 过 对 程 序 的 内
部 结 构 进 行 分 析 比 较 来 判 断 两 段 程 序 代 码 的 相 似 性 。结 构 度
量 技 术 中 使 用 的 相 似 度 度 量 方 法 主 要 有 :点 阵 图 法 、Levensh-
路 径 数 目 。该 方 法 首 先 将 程 序 代 码 转 换 为 一 个 带 有 惟 一 入 口
和 出 口 结 点 的 控 制 流 图 。 这 种 方 法 具 有 语 言 依 赖 性 ,这 意 味
着 在 创 建 控 制 流 图 前 ,必 须 理 解 编 写 代 码 的 语 言 的 语 法 和 语
Study on similarity measurement of program code
DENG Ai-ping (Department of Computer Science, Hunan Institute of Humanitles, Science and Technology, Loudi 417000, China)
tein 距离、最长公共子序列法、最长公共子串法。
1.2.1 点 阵 图 (dotplot)法 点阵图 [5] 是一种视觉展示两个代码块 (或任意文本) 之间
字 符 串 匹 配 模 式 的 技 术 。 重 要 的 是 ,点 阵 图 不 是 一 种 特 定 的
语 言 ,因 此 它 不 要 求 了 解 被 比 较 的 代 码 的 语 法 和 语 义 。 这 一
1996 年指出,对于仅仅使用属性计数法的检测算法,增加向量 维数并不能改善错误率。改进属性计数法的措施就是加入程 序的结构信息,结合结构度量来检测剽窃。McCabe 提出的圈 复杂度方法是一种典型的结构度量法。它通过计算执行路径 的数量来衡量一个程序中的控制流。圈复杂度只给出了程序 的 一 个 结 构 特 征 即 控 制 流 ,往 往 需 要 与 其 它 特 征 结 合 使 用 ,因 此常作为属性计数法中的一个度量指标。其它的结构度量法 还有分析控制结构、计算代码嵌套深度、分析数据依赖关系等。 在实际应用中,很多代码剽窃检测系统将两种度量方法相结 合。Donaldson et al.开发的 ACCUSE 系统结合属性计数法和结 构度量法来实现对 Fortran 程序代码的剽窃检测。最近提出的 系统大都是通过对表达源程序结构的字符串进行比较来达到 剽窃检测的目的,如:Plague, JPlag, SIM, MOSS,YAP 系列等。
程 是 :首 先 ,选 择 两 个 程 序 并 将 其 处 理 为 标 记 序 列 ;然 后 连 接
这 两 个 序 列 ;最 后 对 生 成 的 序 列 进 行 自 我 比 较 。
第 29 卷 第 17 期 Vol. 29 No. 17
计算机工程与设计
Computer Engineering and Design
2008 年 9 月 Sept. 2008
程序代码相似度度量算法研究
邓爱萍 (湖南人文科技学院 计算机科学技术系,湖南 娄底 417000)
摘 要:代 码剽窃是程序设 计课程中经常 出现的一种作弊 行为,检测剽窃的源代 码、验 证学生程序作业 的原创性在教 学中 很重 要。程序代码的 相似度度量是 剽窃检测的关键 技术。通过对 现有程序代码相 似度度量技术进 行研究后,基于 Karp-Rabin 和最 长公共子串算法 思想,提出了一 种改进的源代码 相似度度量算 法,即串的散列值 匹配算法。 关键 词:源代码; 相 似度度量; 剽窃 检测; 串匹配算 法; 散列值匹 配 中图 法分类号:TP311.52 文献标 识码:A 文 章编号:1000-7024 (2008) 17-4636-04
收稿日期:2007-09-16 E-mail:ld_dengaiping@ 作者简介:邓爱萍 (1977-),女,湖南涟源人,硕士,讲师,研究方向为计算机辅助教育技术。
- 4636 -
的软件度量指标,以便于将程序映射到一个 n 维的笛卡尔空 间 ,然 后 利 用 向 量 空 间 模 型 来 度 量 程 序 代 码 相 似 性 。
(5)嵌套深度:这是一个简单的度量标准,通过赋给每个代 码 行 一 个 深 度 值 ,返 回 一 个 程 序 的 平 均 嵌 套 深 度 。 平 均 值 是
由这些深度值的总和除以程序中语句的个数计算而来。
(6) 控 制 结 构 :给 出 现 在 程 序 中 的 每 一 种 类 型 的 控 制 结 构 赋予一个权值,例如给一个 if...then 结构赋予权值 3,所有权值 的总和常用来表示一个程序的复杂度。
式中: = 汇量。
= log2 1+ 2——程序长度; =
(1) 1+ 2 ——程序所用的词
(2) 控制流:控制流常用 McCabe 提出的圈复杂度 (cyclomatic complexity)来度量。圈复杂度是一种为程序逻辑复杂性 提 供 定 量 测 度 的 软 件 度 量 方 法 ,用 于 计 算 程 序 的 基 本 的 独 立
综 上 所 述 ,应 用 于 程 序 代 码 剽 窃 检 测 系 统 中 的 代 码 相 似 度 度 量 方 法 可 分 成 两 类 :属 性 计 数 技 术 和 结 构 度 量 技 术 。 1.1 属 性 计 数 技 术
在剽窃检测算法的发展过程中,大多数工作集中在 Halstead 的软件科学理论。这些基于软件科学度量的算法是从程 序中提取出数个软件度量特征,计算每一个程序的 n 个不同
义 。 在 程 序 控 制 流 程 图 中 ,节 点 表 示 程 序 中 一 个 顺 序 代 码 单
元,边表示程序中产生的分枝。一个有 条边和 个节点的控
制流图 G,其圈复杂度定义为
= +2
(2)
其中: = 控制流图中的模块数。 (3) 结 构 :这 个 度 量 标 准 考 虑 到 使 用 一 些 指 标 去 阐 明 模 块
另外,Faith 和 Robinson 提出使用 24 个分量来评估代码的 相似程度,前 10 个是主要针对初学者的低级的剽窃,其它的 用于有经验的剽窃;Jankowitz 方法通过对代码中的主程序和 方 法 进 行 语 法 分 析 ,得 到 静 态 执 行 树 ,用 于 对 代 码 的 分 析 等 。
点使得点阵图法具有很大的灵活性。
点阵图的主要优势是它依赖于人的视觉系统去检测相似
模 式 。然 而 ,简 单 的 用 人 眼 去 揭 露 剽 窃 ,如 何 量 化 每 个 比 较 结
果 的 问 题 成 为 了 点 阵 图 的 主 要 缺 点 。它 意 味 着 解 释 一 个 人 复
制 了 多 少 别 人 的 代 码 将 不 能 由 值 来 表 示 。点 阵 图 法 的 操 作 过
Abstract:Code plagiarism is one kind of cheat behavior, which appears frequently in the programming curriculum. Detection of source code plagiarism is important to verify the originality of students’ project works. The code similarity measurement is the key technology in the plagiarizing detection. The similarity measurement of program code is studied first, then the string’s hash value matching arithmetic which based on Karp-Rabin and longest common substring algorithm is provided, and the results show the improved arithmetic is effective. Key words:source code; similarity measure; plagiarism detection; string matching arithmetic; hash value matching
1.1.1 常 用 的 属 性 计 数 法度 量 指 标 在属性计数技术中,有以下 6 个常用的代码相似度度量
指标,被描述为一个“6 元组”向量。 (1)容量:容量被认为是任何算法实现的大小的反映,常使