CN101398758A - 一种代码抄袭的检测方法 - Google Patents

一种代码抄袭的检测方法 Download PDF

Info

Publication number
CN101398758A
CN101398758A CNA2008102253305A CN200810225330A CN101398758A CN 101398758 A CN101398758 A CN 101398758A CN A2008102253305 A CNA2008102253305 A CN A2008102253305A CN 200810225330 A CN200810225330 A CN 200810225330A CN 101398758 A CN101398758 A CN 101398758A
Authority
CN
China
Prior art keywords
code
prime
function
value
identifier
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2008102253305A
Other languages
English (en)
Other versions
CN101398758B (zh
Inventor
熊浩
晏海华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beihang University
Original Assignee
Beihang University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beihang University filed Critical Beihang University
Priority to CN2008102253305A priority Critical patent/CN101398758B/zh
Publication of CN101398758A publication Critical patent/CN101398758A/zh
Application granted granted Critical
Publication of CN101398758B publication Critical patent/CN101398758B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明一种代码抄袭的检测方法,它是收集待检测的两份代码在不同方面的相似值,作为神经网络的输入向量,通过神经网络学习,得出是否抄袭的结论。它能消除代码在布局和语法等价变换两方面的影响,尽可能的识别语义分析方面的抄袭手段,提高原有检测工具的检测效果。该检测方法检测精度高、效果好,可以检测更多的抄袭手段,宜于推广。

Description

一种代码抄袭的检测方法
技术领域
本发明涉及一种代码抄袭的检测方法,尤其涉及一种计算机程序代码抄袭的检测方法,属计算机程序检测技术领域。
背景技术
当前,随着计算机技术的不断发展。小至计算机专业的程序设计课程作业,大至软件产品。程序代码中的克隆、抄袭、剽窃现象越来越严重。这与程序代码这类电子文件易于拷贝的特点有很大的关系。相对自然语言,程序语言的语法规则比较简单,抄袭者只需要通过编辑器改变代码外观就可达到抄袭目的。
一般来说,如果一份代码由另一份代码完全拷贝或只做了很少量的修改得到,就可以认为此代码为抄袭代码。抄袭代码通常是花费很少的代价产生的。在发表于计算机与教育杂志(1987)“一种大学程序作业相似性度量与抄袭检测的经验方法”(An Empirical Approachfor Detecting Program Similarity and Plagiarism within aUniversity Programming Environment[J].Computers andEducation.11(1):11-19.1987)这篇论文中,范德海(Faidhi)和罗宾逊(Robinson)总结了常用的七种抄袭手段,根据抄袭所付出的代价,这些手段从易到难为(1)未更改(2)修改注释(3)修改标识符(4)调整变量位置(5)过程组合(6)调整语句位置(7)调整控制结构逻辑。在发表于第六届北美大学计算科学协会年会论文集“抄袭检测度量元”(Metrics based plagiarism monitoring.Paper presented at the 6th Annual CCSC NortheasternConference,Middlebury VT.2001)一文中,琼斯(Jones)总结了十种剽窃手段。分别为(1)逐字拷贝(2)更改注释语句(3)更改空白区域(4)重新命名标识符(5)改变代码块的顺序(6)改变代码块中语句的顺序(7)改变表达式中操作符和操作数的顺序(8)更改数据类型(9)增加冗余的语句和变量(10)用等价的控制结构替换原有控制结构。此外,还有学者在研究过程中提出其他的一些抄袭手段。虽然抄袭手段的方式各种各样,但是抄袭者在不理解代码内部流程的情况下,要达到程序运行正确和加大检测难度这两个目的。所做的代码变化可以归纳为三个方面:
1.代码布局。比如重新排版,代码段的重排序等。
2.语法理解。比如标识符换名,等价关键字的替换等。
3.语义分析。比如函数分解与结合,等价语句块变换等。代码在1、2两个方面的变化所需要的代价很小,只需要使用编辑器改变代码的外观,Faidhi归纳的7种和Jones总结的10种抄袭手段均集中在这两个方面。抄袭手段在语义层面需要付出较高的代价,但语义分析涉及的代码语句较多,能够在很大程度上改变代码外观,加大了检测的难度。
国外已有许多软件工具可用来检测源程序是否抄袭,如斯坦福大学的MOSS系统、德国Karlsruhe大学的JPlag系统、威奇塔州立大学的SIM系统、悉尼大学的YAP3系统以及伊利诺伊大学的GPLAG系统。这些检测工具采用属性度量和结构分析的方法计算程序的相似度。
国内对于代码相似性的研究工作较少。可以考证的工具有:北航高级程序课程教学辅助平台中用于检测学生提交程序作业是否抄袭的BUAASIM系统,中国人民警官大学的PASCAL程序抄袭判定系统,内蒙古师范大学和北京邮电大学的代码抄袭评测系统。
然而,上述的这些工具基本都是各个机构为代码相似检测这一课题研究而作(仅有JPlag、MOSS系统提供免费使用功能,本专利发明人使用北航BUAASIM系统)。而且大部分工具只能检测出很少量的抄袭手段,代码只需要作一些语法和语义的等价变化就可以逃避抄袭检测。
发明内容
本发明的目的在于,消除代码在布局和语法等价变换两方面的影响,尽可能的识别语义分析方面的抄袭手段,提高原有检测工具的检测效果。
本发明的基本思想是收集待检测的两份代码在不同方面的相似值,作为神经网络的输入向量;通过神经网络学习,得出是否抄袭的结论。该方法的流程如图一所示。
本发明分为两个阶段。其一为特征发生阶段,引入代码注释分离技术,编译技术,优化编译和反汇编技术将代码集分解或变换成比较样本集,剔除样本集中无关信息,通过计算公式得出检测程序对的七种相似性结果,组成特征向量;第一阶段包括下述三个步骤,目的是提取比较代码的七个相似值,这七个值分别是:
1.优化编译和反汇编代码相似性一(SCD1)
2.优化编译和反汇编代码相似性二(SCD2)
3.编译线性化标识符相似性一(SLC1)
4.编译线性化标识符相似性二(SLC2)
5.代码风格相似性(SCS)
6.注释风格相似性(SRS)
7.统计属性相似性(SSC)其二为BP神经网络训练阶段,BP神经网络结构如图3所示,将比较代码的特征向量输入至BP神经网络,输出即为两代码是否抄袭的预测值。
。本发明一种代码抄袭的检测方法,该方法步骤如下:步骤一优化编译和反汇编代码相似性一(SCD1)与优化编译和反汇
编代码相似性二(SCD2)值获得;
检测程序通过优化编译成可执行的二进制文件,将此二进制文件反汇编成汇编代码,从中抽取原代码程序部分的汇编指令,删除与程序代码段无关的信息,噪音处理后使用相似度决策函数计算汇编指令集合,得到SCD1和SCD2值。
噪音处理是过滤汇编代码中偏移地址、函数地址和立即数,转化为标识量OFFSET、FUNCTION和CONSTANT。
设P1、P2为两个待检测的程序,F(P1)和F(P2)表示P1、P2经过优化编译和反汇编后的汇编指令集,Sim(P1,P2)为代码的相似度。
SCD1计算公式为Sim(P1,P2)=(F(P1)∩F(P2))/(F(P1)∪F(P2))
SCD2计算公式为 Sim ( P 1 , P 2 ) = match match + ( f ( P 1 ) - P 1 _ match ) + ( f ( P 2 ) - P 2 _ match )
f函数为获取汇编文本的代码行数,P1-match为P1汇编指令在P2汇编指令集中匹配的行数,match值为P1-match和P2-match的最大值。
步骤二编译线性化标识符相似性一(SLC1)和编译线性化标识符相似性二(SLC2)值获得;
图2为代码编译技术流程。待检测程序通过编译器的词法分析、语法分析和语义分析后转化成标识符集合,标识符线性化方法消除了源代码中的函数调用关系,将执行顺序复杂的标识符集调整为一维线性顺序的标识符流。使用相似度决策函数计算得到SLC1和SLC2值。
标识符线性化方法是当出现函数调用的标识符时,将所调用的函数部分的标识符序列还原至函数调用接口处。需要指出的是,对于一般的函数直接调用关系,只需要把调用函数的标识符插入函数调用处。如果存在递归调用关系,需要做特别的处理。直接递归调用关系(函数内部语句调用其自身函数),调用自身函数接口处的标识符统一用CALL FUNCTION标识符代替。间接递归调用关系(函数之间相互调用),只允许函数标识符还原一次,嵌套调用接口处统一使用CALLFUNCTION标识符代替。
设需要比较的两标识符序列为X=<x1,x2,…,xn>和Y=<y1,y2,…,ym>。使用LCS算法获得两序列的最长公共子序列,构造C[i,j]矩阵,矩阵维数为m*n。LCS算法:
1    m=length[X],n=length[Y]
2    for   i=1  to  m
3        C[i,0]=0
4    for   j=1  to  n
5        C[0,j]=0
6    for   i=1  to  m
7    for   j=1  to  n
8          if    xi=yj
9                C[i,j]=C[i-1,j-1]+1
10         else   if  C[i-1,j]≥C[i,j-1]
11                C[i,j]=C[i-1,j]
12         else   C[i,j]=C[i,j-1]
13    return  C
算法结束,C[m-1,n-1]的值为最长公共子序列的长度。
SLC1计算公式为Sim(P1,P2)=C[m-1][n-1]/min_line
SLC2计算公式为Sim(P1,P2)=2*C[m-1,n-1]/(m+n)min_line为m和n值中的较小值。
步骤三代码风格相似性(SCS)、注释风格相似性(SRS)和统计属性相似性(SSC)值获得;
程序代码的属性特征,主要集中在程序风格和统计信息两个方面。而程序风格又包括代码风格和注释风格。将程序的代码段与注释行分离,分别提取这三个方面的特征。
代码风格:
(1)代码的行长字符平均值
(2)代码行前缩进的空白字符平均值
(3)代码行中分隔的空白字符平均值
(4)代码行尾保留的空白字符平均值
(5)空白代码占整个代码的百分比
(6)复合语句行占整个代码行的百分比
(7)左大括号位置规范出现的比例
注释风格:
(1)注释的行长字符平均值
(2)块注释行占整个注释行的比例
(3)单行注释行占整个注释行的比例
(4)单行复合注释行占整个注释行的比例
代码风格(7)中规范出现是指左大括号应该出现在声明语句同行和复合语句起始行的行尾。注释风格(2)的块注释通常是对文件,类,方法和算法的描述,能够提高代码的可读性。块注释的标志是使用/*和*/标识符,且两者不在同一行中。注释风格(3)(4)的区别在于代码中单独的某一行时候包含可执行的程序语句。如果不包含程序语句,该行为单行注释行,否则为单行复合注释行。
统计特征:
(1)代码行数
(2)赋值语句个数
(3)循环控制语句个数
(4)选择控制语句个数
(5)自定义函数个数
赋值语句包括直接变量赋值和从终端、文本输入值。循环控制和选择控制语句以关键字为标志。比如C语言中,包含for、do/while和while关键字的语句为循环控制语句。而选择控制语句中的关键字有if、switch/case、if/else和三目运算符?:。
设需要检测的代码集为P1,P2,…,Pn,集合中任意一份代码Px的三类属性为:代码风格CS=<a1x,a2x,…,a7x>,注释风格RS=<b1x,b2x,…,b4x>,统计特征SC=<c1x,c2x,…,c5x>。规格化处理属性:
代码风格CS′为 < a 1 x &prime; , a 2 x &prime; , . . . , a 7 x &prime; > = < a 1 x &Sigma; t = 1 n a 1 t , a 2 x &Sigma; t = 1 n a 2 t , . . . , a 7 x &Sigma; t = 1 n a 7 t >
注释风格RS′为 < b 1 x &prime; , b 2 x &prime; , . . . , b 4 x &prime; > = < b 1 x &Sigma; t = 1 n b 1 t , b 2 x &Sigma; t = 1 n b 2 t , . . . , b 4 x &Sigma; t = 1 n b 4 t >
统计特征SC′为 < c 1 x &prime; , c 2 x &prime; , . . . , c 5 x &prime; > = < c 1 x &Sigma; t = 1 n c 1 t , c 2 x &Sigma; t = 1 n c 2 t , . . . , c 5 x &Sigma; t = 1 n c 5 t >
SCS计算公式为 Sim ( P i , P j ) = 1 - &Sigma; u = 1 7 ( a ui &prime; - a uj &prime; ) 2 / 7
SRS计算公式为 Sim ( P i , P j ) = 1 - &Sigma; u = 1 4 ( b ui &prime; - b uj &prime; ) 2 / 4
SSC计算公式为 Sim ( P i , P j ) = 1 - &Sigma; u = 1 5 ( c ui &prime; - c uj &prime; ) 2 / 5
n份比较代码集P1,P2,…,Pn中任意两份代码通过第一阶段都可以转化为比较特征向量<SCD1,SCD2,SLC1,SLC2,SCS,SRS,SSC>,这样的比较特征向量一共有
Figure A200810225330D0014115030QIETU
个。
步骤四网络训练判定是否存在抄袭。
个比较特征向量输入至神经网络的输入层,经过网络的反复运算,得出神经网络训练值,再将该值与抄袭决策阈值相比较,得出是否抄袭的结论。神经网络可以借助工具来搭建,只需要一份典型的训练样本训练即可使此网络具有抄袭检测的能力。
该检测方法与现有技术比,检测精度高、效果好,可以检测更多的抄袭手段,宜于推广。
附图说明
图1程序抄袭检测方法方框示意图
图2代码编译技术流程示意图
图3BP神经网络模型结构示意图
具体实施方式
见图1、图2、图3所示,一种代码抄袭的检测方法,其具体实施方式如下:
步骤一优化编译和反汇编代码相似性一(SCD1)与优化编译和反汇编代码相似性二(SCD2)值获得;
检测程序通过优化编译成可执行的二进制文件,将此二进制文件反汇编成汇编代码,从中抽取原代码程序部分的汇编指令,删除与程序代码段无关的信息,噪音处理后使用相似度决策函数计算汇编指令集合,得到SCD1和SCD2值。
噪音处理是过滤汇编代码中偏移地址、函数地址和立即数,转化为标识量OFFSET、FUNCTION和CONSTANT。
设P1、P2为两个待检测的程序,F(P1)和F(P2)表示P1、P2经过优化编译和反汇编后的汇编指令集,Sim(P1,P2)为代码的相似度。
SCD1计算公式为Sim(P1,P2)=(F(P1)∩F(P2))/(F(P1)∪F(P2))
SCD2计算公式为 Sim ( P 1 , P 2 ) = match match + ( f ( P 1 ) - P 1 _ match ) + ( f ( P 2 ) - P 2 _ match )
f函数为获取汇编文本的代码行数,P1-match为P1汇编指令在P2汇编指令集中匹配的行数,match值为P1-match和P2-match的最大值。
步骤二编译线性化标识符相似性一(SLC1)和编译线性化标识符相似性二(SLC2)值获得;
图2为代码编译技术流程。待检测程序通过编译器的词法分析、语法分析和语义分析后转化成标识符集合,标识符线性化方法消除了源代码中的函数调用关系,将执行顺序复杂的标识符集调整为一维线性顺序的标识符流。使用相似度决策函数计算得到SLC1和SLC2值。
标识符线性化方法是当出现函数调用的标识符时,将所调用的函数部分的标识符序列还原至函数调用接口处。需要指出的是,对于一般的函数直接调用关系,只需要把调用函数的标识符插入函数调用处。如果存在递归调用关系,需要做特别的处理。直接递归调用关系(函数内部语句调用其自身函数),调用自身函数接口处的标识符统一用CALL FUNCTION标识符代替。间接递归调用关系(函数之间相互调用),只允许函数标识符还原一次,嵌套调用接口处统一使用CALLFUNCTION标识符代替。
设需要比较的两标识符序列为X=<x1,x2,…,xn>和Y=<y1,y2,…,ym>。使用LCS算法获得两序列的最长公共子序列,构造C[i,j]矩阵,矩阵维数为m*n。LCS算法:
1    m=length[X],n=length[Y]
2    for  i=1  to  m
3         C[i,0]=0
4    for  j=1  to  n
5         C[0,j]=0
6    for  i=1  to  m
7    for  j=1  to  n
8         if    xi=yj
9         C[i,j]=C[i-1,j-1]+1
10    else  if  C[i-1,j]≥C[i,j-1]
11          C[i,j]=C[i-1,j]
12    else  C[i,j]=C[i,j-1]
13  return  C
算法结束,C[m-1,n-1]的值为最长公共子序列的长度。
SLC1计算公式为Sim(P1,P2)=C[m-1][n-1]/min_line
SLC2计算公式为Sim(P1,P2)=2*C[m-1,n-1]/(m+n)min_line为m和n值中的较小值。
步骤三代码风格相似性(SCS)、注释风格相似性(SRS)和统计属性相似性(SSC)值获得;
程序代码的属性特征,主要集中在程序风格和统计信息两个方面。而程序风格又包括代码风格和注释风格。将程序的代码段与注释行分离,分别提取这三个方面的特征。
代码风格:
(1)代码的行长字符平均值
(2)代码行前缩进的空白字符平均值
(3)代码行中分隔的空白字符平均值
(4)代码行尾保留的空白字符平均值
(5)空白代码占整个代码的百分比
(6)复合语句行占整个代码行的百分比
(7)左大括号位置规范出现的比例
注释风格:
(1)注释的行长字符平均值
(2)块注释行占整个注释行的比例
(3)单行注释行占整个注释行的比例
(4)单行复合注释行占整个注释行的比例
代码风格(7)中规范出现是指左大括号应该出现在声明语句同行和复合语句起始行的行尾。注释风格(2)的块注释通常是对文件,类,方法和算法的描述,能够提高代码的可读性。块注释的标志是使用/*和*/标识符,且两者不在同一行中。注释风格(3)(4)的区别在于代码中单独的某一行时候包含可执行的程序语句。如果不包含程序语句,该行为单行注释行,否则为单行复合注释行。
统计特征:
(1)代码行数
(2)赋值语句个数
(3)循环控制语句个数
(4)选择控制语句个数
(5)自定义函数个数
赋值语句包括直接变量赋值和从终端、文本输入值。循环控制和选择控制语句以关键字为标志。比如C语言中,包含for、do/while和while关键字的语句为循环控制语句。而选择控制语句中的关键字有if、switch/case、if/else和三目运算符?:。
设需要检测的代码集为P1,P2,…,Pn,集合中任意一份代码Px的三类属性为:代码风格CS=<a1x,a2x,…,a7x>,注释风格RS=<b1x,b2x,…,b4x>,统计特征SC=<c1x,c2x,…,c5x>。规格化处理属性:
代码风格CS′为 < a 1 x &prime; , a 2 x &prime; , . . . , a 7 x &prime; > = < a 1 x &Sigma; t = 1 n a 1 t , a 2 x &Sigma; t = 1 n a 2 t , . . . , a 7 x &Sigma; t = 1 n a 7 t >
注释风格RS′为 < b 1 x &prime; , b 2 x &prime; , . . . , b 4 x &prime; > = < b 1 x &Sigma; t = 1 n b 1 t , b 2 x &Sigma; t = 1 n b 2 t , . . . , b 4 x &Sigma; t = 1 n b 4 t >
统计特征SC′为 < c 1 x &prime; , c 2 x &prime; , . . . , c 5 x &prime; > = < c 1 x &Sigma; t = 1 n c 1 t , c 2 x &Sigma; t = 1 n c 2 t , . . . , c 5 x &Sigma; t = 1 n c 5 t >
SCS计算公式为 Sim ( P i , P j ) = 1 - &Sigma; u = 1 7 ( a ui &prime; - a uj &prime; ) 2 / 7
SRS计算公式为 Sim ( P i , P j ) = 1 - &Sigma; u = 1 4 ( b ui &prime; - b uj &prime; ) 2 / 4
SSC计算公式为 Sim ( P i , P j ) = 1 - &Sigma; u = 1 5 ( c ui &prime; - c uj &prime; ) 2 / 5
n份比较代码集P1,P2,…,Pn中任意两份代码通过第一阶段都可以转化为比较特征向量<SCD1,SCD2,SLC1,SLC2,SCS,SRS,SSC>,这样的比较特征向量一共有
Figure A200810225330D00197
个。
步骤四网络训练判定是否存在抄袭。
个比较特征向量输入至神经网络的输入层,经过网络的反复运算,得出神经网络训练值,再将该值与抄袭决策阈值相比较,得出是否抄袭的结论。神经网络可以借助工具来搭建,只需要一份典型的训练样本训练即可使此网络具有抄袭检测的能力。

Claims (1)

1、一种代码抄袭的检测方法,其特征在于:该方法步骤如下
步骤一 优化编译和反汇编代码相似性一即SCD1与优化编译和反汇编代码相似性二即SCD2值获得;
检测程序通过优化编译成可执行的二进制文件,将此二进制文件反汇编成汇编代码,从中抽取原代码程序部分的汇编指令,删除与程序代码段无关的信息,噪音处理后使用相似度决策函数计算汇编指令集合,得到SCD1和SCD2值;
噪音处理是过滤汇编代码中偏移地址、函数地址和立即数,转化为标识量OFFSET、FUNCTION和CONSTANT;
设P1、P2为两个待检测的程序,F(P1)和F(P2)表示P1、P2经过优化编译和反汇编后的汇编指令集,Sim(P1,P2)为代码的相似度;
SCD1计算公式为Sim(P1,P2)=(F(P1)∩F(P2))/(F(P1)∪F(P2))
SCD2计算公式为 Sim ( P 1 , p 2 ) = match match + ( f ( P 1 ) - P 1 _ match ) + ( f ( P 2 ) - P 2 _ match )
f函数为获取汇编文本的代码行数,P1_match为P1汇编指令在P2汇编指令集中匹配的行数,match值为P1_match和P2_match的最大值;
步骤二 编译线性化标识符相似性一即SLC1和编译线性化标识符相似性二即SLC2值获得;
图2为代码编译技术流程,待检测程序通过编译器的词法分析、语法分析和语义分析后转化成标识符集合,标识符线性化方法消除了源代码中的函数调用关系,将执行顺序复杂的标识符集调整为一维线性顺序的标识符流,使用相似度决策函数计算得到SLC1和SLC2值;
标识符线性化方法是当出现函数调用的标识符时,将所调用的函数部分的标识符序列还原至函数调用接口处,需要指出的是,对于一般的函数直接调用关系,只需要把调用函数的标识符插入函数调用处,如果存在递归调用关系,需要做特别的处理,直接递归调用关系,调用自身函数接口处的标识符统一用CALL FUNCTION标识符代替,间接递归调用关系,只允许函数标识符还原一次,嵌套调用接口处统一使用CALL FUNCTION标识符代替;
设需要比较的两标识符序列为X=<x1,x2,…,xn>和Y=<y1,y2,…,ym>,使用LCS算法获得两序列的最长公共子序列,构造C[i,j]矩阵,矩阵维数为m*n,LCS算法:
1  m=length[X],n=length[Y]
2  for i=1 to m
3     C[i,0]=0
4  for j=1 to n
5     C[0,j]=0
6  for i=1 to m
7    for j=1 to n
8       if  xi=yj
9           C[i,j]=C[i-1,j-1]+1
10      else if C[i-1,j]≥C[i,j-1]
11          C[i,j]=C[i-1,j]
12      else C[i,j]=C[i,j-1]
13  return C
算法结束,C[m-1,n-1]的值为最长公共子序列的长度;
SLC1计算公式为Sim(P1,P2)=C[m-1][n-1]/min_line
SLC2计算公式为Sim(P1,P2)=2*C[m-1,n-1]/(m+n)
min_line为m和n值中的较小值;
步骤三 代码风格相似性即SCS、注释风格相似性即SRS和统计属性相似性即SSC值获得;
程序代码的属性特征,主要集中在程序风格和统计信息两个方面,而程序风格又包括代码风格和注释风格,将程序的代码段与注释行分离,分别提取这三个方面的特征;
代码风格:
(1)代码的行长字符平均值
(2)代码行前缩进的空白字符平均值
(3)代码行中分隔的空白字符平均值
(4)代码行尾保留的空白字符平均值
(5)空白代码占整个代码的百分比
(6)复合语句行占整个代码行的百分比
(7)左大括号位置规范出现的比例
注释风格:
(1)注释的行长字符平均值
(2)块注释行占整个注释行的比例
(3)单行注释行占整个注释行的比例
(4)单行复合注释行占整个注释行的比例
代码风格(7)中规范出现是指左大括号应该出现在声明语句同行和复合语句起始行的行尾,注释风格(2)的块注释通常是对文件,类,方法和算法的描述,能够提高代码的可读性,块注释的标志是使用/*和*/标识符,且两者不在同一行中,注释风格(3)(4)的区别在于代码中单独的某一行时候包含可执行的程序语句,如果不包含程序语句,该行为单行注释行,否则为单行复合注释行;
统计特征:
(1)代码行数
(2)赋值语句个数
(3)循环控制语句个数
(4)选择控制语句个数
(5)自定义函数个数
赋值语句包括直接变量赋值和从终端、文本输入值,循环控制和选择控制语句以关键字为标志,比如C语言中,包含for、do/while和while关键字的语句为循环控制语句,而选择控制语句中的关键字有if、switch/case、if/else和三目运算符?:。
设需要检测的代码集为P1,P2,…,Pn,集合中任意一份代码Px的三类属性为:代码风格CS=<a1x,a2x,…,a7x>,注释风格RS=<b1x,b2x,…,b4x>,统计特征SC=<c1x,c2x,…,c5x>,规格化处理属性:
代码风格CS′为 < a 1 x &prime; , a 2 x &prime; , . . . , a 7 x &prime; > = < a 1 x &Sigma; t = 1 n a 1 t , a 2 x &Sigma; t = 1 n a 2 t , . . . , a 7 x &Sigma; t = 1 n a 7 t >
注释风格RS′ < b 1 x &prime; , b 2 x &prime; , . . . , b 4 x &prime; > = < b 1 x &Sigma; t = 1 n b 1 t , b 2 x &Sigma; t = 1 n b 2 t , . . . , b 4 x &Sigma; t = 1 n b 4 t >
统计特征SC′为 < c 1 x &prime; , a 2 x &prime; , . . . , c 5 x &prime; > = < c 1 x &Sigma; t = 1 n c 1 t , c 2 x &Sigma; t = 1 n c 2 t , . . . , c 5 x &Sigma; t = 1 n c 5 t >
SCS计算公式为 Sim ( P i , P j ) = 1 - &Sigma; u = 1 7 ( a ui &prime; - a uj &prime; ) 2 / 7
SRS计算公式为 Sim ( P i , P j ) = 1 - &Sigma; u = 1 4 ( b ui &prime; - b uj &prime; ) 2 / 4
SSC计算公式为 Sim ( P i , P j ) = 1 - &Sigma; u = 1 5 ( c ui &prime; - c uj &prime; ) 2 / 5
n份比较代码集P1,P2,…,Pn中任意两份代码通过第一阶段都可以转化为比较特征向量<SCD1,SCD2,SLC1,SLC2,SCS,SRS,SSC>,这样的比较特征向量一共有
Figure A200810225330C00063
个;
步骤四 网络训练判定是否存在抄袭;
Figure A200810225330C00064
个比较特征向量输入至神经网络的输入层,经过网络的反复运算,得出神经网络训练值,再将该值与抄袭决策阈值相比较,得出是否抄袭的结论,神经网络可以借助工具来搭建,只需要一份典型的训练样本训练即可使此网络具有抄袭检测的能力。
CN2008102253305A 2008-10-30 2008-10-30 一种代码抄袭的检测方法 Expired - Fee Related CN101398758B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008102253305A CN101398758B (zh) 2008-10-30 2008-10-30 一种代码抄袭的检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008102253305A CN101398758B (zh) 2008-10-30 2008-10-30 一种代码抄袭的检测方法

Publications (2)

Publication Number Publication Date
CN101398758A true CN101398758A (zh) 2009-04-01
CN101398758B CN101398758B (zh) 2012-04-25

Family

ID=40517336

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008102253305A Expired - Fee Related CN101398758B (zh) 2008-10-30 2008-10-30 一种代码抄袭的检测方法

Country Status (1)

Country Link
CN (1) CN101398758B (zh)

Cited By (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101950340A (zh) * 2010-09-17 2011-01-19 北京航空航天大学 一种面向计算机网络防御策略转换的语义相似度检测系统
CN101976318A (zh) * 2010-11-15 2011-02-16 北京理工大学 一种基于数字指纹的代码相似度检测方法
CN102999631A (zh) * 2012-12-13 2013-03-27 蓝盾信息安全技术股份有限公司 一种Windows内核代码的定位方法
CN103116494A (zh) * 2013-01-25 2013-05-22 中兴通讯股份有限公司 自动化测试平台测试输出信息提取方法和装置
CN103279377A (zh) * 2013-05-09 2013-09-04 北京百度网讯科技有限公司 代码差异度比较方法及装置
CN103729580A (zh) * 2014-01-27 2014-04-16 国家电网公司 一种检测软件抄袭的方法和装置
CN103853811A (zh) * 2012-12-06 2014-06-11 国际商业机器公司 用于在网络化计算环境中替换注释的程序代码的方法和系统
CN103927179A (zh) * 2014-04-18 2014-07-16 扬州大学 一种基于WordNet的程序可读性分析方法
CN105431817A (zh) * 2013-08-01 2016-03-23 石田伸一 装置以及程序
CN105427695A (zh) * 2015-11-03 2016-03-23 中国农业大学 编程类考题自动测评方法和系统
CN106095735A (zh) * 2016-06-06 2016-11-09 北京中加国道科技有限责任公司 一种基于深度神经网络检测学术文献抄袭的方法
CN107229563A (zh) * 2016-03-25 2017-10-03 中国科学院信息工程研究所 一种跨架构的二进制程序漏洞函数关联方法
CN107615240A (zh) * 2015-04-17 2018-01-19 巴特尔纪念研究所 用于分析二进制文件的基于生物序列的方案
CN107679567A (zh) * 2017-09-22 2018-02-09 江苏海事职业技术学院 一种代码抄写行为识别方法、装置和系统
CN107885999A (zh) * 2017-11-08 2018-04-06 华中科技大学 一种基于深度学习的漏洞检测方法及系统
CN108446540A (zh) * 2018-03-19 2018-08-24 中山大学 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN109165728A (zh) * 2018-08-06 2019-01-08 济南浪潮高新科技投资发展有限公司 一种卷积神经网络的基本计算单元及计算方法
CN109542766A (zh) * 2018-10-23 2019-03-29 西安交通大学 基于代码映射和词法分析的大规模程序相似性快速检测与证据生成方法
CN110659064A (zh) * 2019-09-11 2020-01-07 无锡江南计算技术研究所 一种基于特征元信息的搜索剪枝优化方法
CN111026664A (zh) * 2019-12-09 2020-04-17 遵义职业技术学院 基于ann的程序检测方法和检测系统及应用
CN111459788A (zh) * 2019-01-18 2020-07-28 南京大学 一种基于支持向量机的测试程序抄袭检测方法
CN111459787A (zh) * 2019-01-18 2020-07-28 南京大学 一种基于机器学习的测试抄袭检测方法
CN111858322A (zh) * 2020-07-10 2020-10-30 中国科学技术大学 一种Python语言特征自动识别系统和方法
CN112764809A (zh) * 2021-01-25 2021-05-07 广西大学 基于编码特征的sql代码抄袭检测方法及系统
US11226799B1 (en) 2020-08-31 2022-01-18 International Business Machines Corporation Deriving profile data for compiler optimization
WO2022012327A1 (zh) * 2020-07-17 2022-01-20 华为技术有限公司 代码分析的方法、系统及计算设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5999732A (en) * 1998-03-23 1999-12-07 Sun Microsystems, Inc. Techniques for reducing the cost of dynamic class initialization checks in compiled code
US6675134B2 (en) * 2001-03-15 2004-01-06 Cerebrus Solutions Ltd. Performance assessment of data classifiers

Cited By (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101950340A (zh) * 2010-09-17 2011-01-19 北京航空航天大学 一种面向计算机网络防御策略转换的语义相似度检测系统
CN101976318A (zh) * 2010-11-15 2011-02-16 北京理工大学 一种基于数字指纹的代码相似度检测方法
CN103853811A (zh) * 2012-12-06 2014-06-11 国际商业机器公司 用于在网络化计算环境中替换注释的程序代码的方法和系统
US9733910B2 (en) 2012-12-06 2017-08-15 International Business Machines Corporation Replacing annotated program code in a networked computing environment
CN103853811B (zh) * 2012-12-06 2017-04-26 国际商业机器公司 用于在网络化计算环境中替换注释的程序代码的方法和系统
CN102999631A (zh) * 2012-12-13 2013-03-27 蓝盾信息安全技术股份有限公司 一种Windows内核代码的定位方法
CN103116494B (zh) * 2013-01-25 2016-05-25 中兴通讯股份有限公司 自动化测试平台测试输出信息提取方法和装置
CN103116494A (zh) * 2013-01-25 2013-05-22 中兴通讯股份有限公司 自动化测试平台测试输出信息提取方法和装置
CN103279377A (zh) * 2013-05-09 2013-09-04 北京百度网讯科技有限公司 代码差异度比较方法及装置
CN105431817A (zh) * 2013-08-01 2016-03-23 石田伸一 装置以及程序
CN105431817B (zh) * 2013-08-01 2019-01-04 石田伸一 源程序比较装置以及存储装置
CN103729580A (zh) * 2014-01-27 2014-04-16 国家电网公司 一种检测软件抄袭的方法和装置
CN103927179B (zh) * 2014-04-18 2017-02-15 扬州大学 一种基于WordNet的程序可读性分析方法
CN103927179A (zh) * 2014-04-18 2014-07-16 扬州大学 一种基于WordNet的程序可读性分析方法
CN107615240B (zh) * 2015-04-17 2021-11-02 巴特尔纪念研究所 用于分析二进制文件的基于生物序列的方案
CN107615240A (zh) * 2015-04-17 2018-01-19 巴特尔纪念研究所 用于分析二进制文件的基于生物序列的方案
CN105427695B (zh) * 2015-11-03 2018-11-02 中国农业大学 编程类考题自动测评方法和系统
CN105427695A (zh) * 2015-11-03 2016-03-23 中国农业大学 编程类考题自动测评方法和系统
CN107229563A (zh) * 2016-03-25 2017-10-03 中国科学院信息工程研究所 一种跨架构的二进制程序漏洞函数关联方法
CN107229563B (zh) * 2016-03-25 2020-07-10 中国科学院信息工程研究所 一种跨架构的二进制程序漏洞函数关联方法
CN106095735A (zh) * 2016-06-06 2016-11-09 北京中加国道科技有限责任公司 一种基于深度神经网络检测学术文献抄袭的方法
CN107679567A (zh) * 2017-09-22 2018-02-09 江苏海事职业技术学院 一种代码抄写行为识别方法、装置和系统
CN107679567B (zh) * 2017-09-22 2021-04-27 江苏海事职业技术学院 一种代码抄写行为识别方法、装置和系统
CN107885999A (zh) * 2017-11-08 2018-04-06 华中科技大学 一种基于深度学习的漏洞检测方法及系统
CN107885999B (zh) * 2017-11-08 2019-12-24 华中科技大学 一种基于深度学习的漏洞检测方法及系统
CN108446540A (zh) * 2018-03-19 2018-08-24 中山大学 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN108446540B (zh) * 2018-03-19 2022-02-25 中山大学 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN109165728A (zh) * 2018-08-06 2019-01-08 济南浪潮高新科技投资发展有限公司 一种卷积神经网络的基本计算单元及计算方法
CN109542766A (zh) * 2018-10-23 2019-03-29 西安交通大学 基于代码映射和词法分析的大规模程序相似性快速检测与证据生成方法
CN111459787A (zh) * 2019-01-18 2020-07-28 南京大学 一种基于机器学习的测试抄袭检测方法
CN111459788A (zh) * 2019-01-18 2020-07-28 南京大学 一种基于支持向量机的测试程序抄袭检测方法
CN110659064A (zh) * 2019-09-11 2020-01-07 无锡江南计算技术研究所 一种基于特征元信息的搜索剪枝优化方法
CN110659064B (zh) * 2019-09-11 2022-09-13 无锡江南计算技术研究所 一种基于特征元信息的搜索剪枝优化方法
CN111026664A (zh) * 2019-12-09 2020-04-17 遵义职业技术学院 基于ann的程序检测方法和检测系统及应用
CN111858322A (zh) * 2020-07-10 2020-10-30 中国科学技术大学 一种Python语言特征自动识别系统和方法
CN111858322B (zh) * 2020-07-10 2022-01-11 中国科学技术大学 一种Python语言特征自动识别系统和方法
WO2022012327A1 (zh) * 2020-07-17 2022-01-20 华为技术有限公司 代码分析的方法、系统及计算设备
US11226799B1 (en) 2020-08-31 2022-01-18 International Business Machines Corporation Deriving profile data for compiler optimization
WO2022042685A1 (en) * 2020-08-31 2022-03-03 International Business Machines Corporation Deriving profile data for compiler optimization
GB2614164A (en) * 2020-08-31 2023-06-28 Ibm Deriving profile data for compiler optimization
CN112764809A (zh) * 2021-01-25 2021-05-07 广西大学 基于编码特征的sql代码抄袭检测方法及系统
CN112764809B (zh) * 2021-01-25 2022-07-05 广西大学 基于编码特征的sql代码抄袭检测方法及系统

Also Published As

Publication number Publication date
CN101398758B (zh) 2012-04-25

Similar Documents

Publication Publication Date Title
CN101398758A (zh) 一种代码抄袭的检测方法
Zhai et al. Automatic model generation from documentation for Java API functions
CN101315599A (zh) 源程序相似度检测方法及装置
CN102012991A (zh) 基于静态分析的c语言安全规则检查方法
CN103914379A (zh) 故障自动注入与故障检测的方法及其系统
CN108563561B (zh) 一种程序隐性约束提取方法及系统
Yoshizawa et al. Logic error detection algorithm for novice programmers based on structure pattern and error degree
CN110221836A (zh) 一种词法分析工具
CN103049504A (zh) 基于源代码查询的半自动插桩方法
Nagy Regex quick syntax reference: understanding and using regular expressions
Akiyama et al. Supporting design model refactoring for improving class responsibility assignment
CN101501638A (zh) 等离子处理系统部件分析软件以及生成该软件的方法和系统
CN115794101A (zh) 一种基于递归下降分析器的机器人流程自动化系统
Mohanan et al. Natural Language Processing Approach for UML Class Model Generation from Software Requirement Specifications via SBVR.
Narita et al. Data-centric disambiguation for data transformation with programming-by-example
Carlos Natural language programming using class sequential rules
CN114327614A (zh) 参考模型数据流记录和分析的方法及应用
Said et al. Towards understandable guards of extracted state machines from embedded software
JP2008059515A (ja) プログラム実行過程の表示方法及びシステム並びにプログラム
Beckert et al. S em S lice: exploiting relational verification for automatic program slicing
Visser Understanding software through linguistic abstraction
CN112965909A (zh) 测试数据、测试用例生成方法及系统、存储介质
Elmstrøm et al. An executable subset of VDM-SL in an SA/RT framework
CN106155668A (zh) 一种宏语言的图形化表达方法
Guy et al. Architecture of a Web-based predictive editor for controlled natural language processing

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120425

Termination date: 20131030