国外研究现状代码相似度检测技术在国外的研究很早时期就已经开始了,从 20 世纪 70 年代起知道现 在,针对程序相似检测的研究从来没有停止过。近些年来,国外已经完善了一些比较成熟的 抄袭检测系统,比如:如:Jplag[1], MOSS[2]以及 YAP[3]等。77726
Halstead[4]是最先提出针对代码相似度检测方法的人,Halstead 提出了用统计程序的本身 属性对代码进行检测的方法。随后 Ottenstein[13]设计出第一个能够自动对代码是否有抄袭现象 进行检测的系统,这个系统基于了 Halstead 所提出的属性计数的方法,主要是对 FORTAN 语 言所编写的程序进行检测。
随着 Halstead 的属性计数方法被用来检测相似度,研究者不断的增加所统计的程序属性,目的是让得出的结果准确性和合理性更高。这其中有 Faidhi 和 Robinson 所实现的抄袭检测系 统[13],该系统通过增加对于程序控制流结构的比较,使得结果与之前相比准确率有所提高。 Grier 也使用属性计数设计了 Accuse 系统[13],在这之后 Vecrco 和 Wise[13]对 Accuse 系统进行 了测试,测试后发现仅仅增加更多的属性,对于准确率的提高微乎甚微,在具体分析之后, 发现仅仅进行属性的基本统计并没有考虑到程序本身的具体结构,程序的内部结构更为重要。 在经过一系列的研究之后,提出了通过结构度量的方式进行相似度检测。
目前国外较为完善的检测系统基本使用的是结构度量技术,有些会结合属性计数的方法 综合使用。一般这些完善的系统都是以互联网服务的形式提供给用户使用,像卡尔鲁斯厄大 学的 Jplag 系统,斯坦福大学的 MOSS 系统等。论文网
现在最流行, 最先进的代码检测系统是斯坦福大学的 MOSS(Measure of Software Similarity)系统。该系统能够检测当前的主流编程语言多达 27 种。其使用的是结构度量技术, 在长久的使用过程中,得到一致的认可,能够在检测过程中达到很高的效率,对于添加无用 代码的修改可以有效的识别出来。MOSS 系统进行代码预处理后,应用 Winnowing 算法对字 符串进行匹配。MOSS 系统是以网页的形式将测试结果返还给用户的,这种形式让用户体验 更为舒适,用户仅需简单的操作就能得到结果。在返还的结果中,用户可以看到程序对比后 给出的相似度的值,如果存在超出给定阈值的代码部分,系统会将程序的这部分代码标记出 不同的颜色,方便用户观察。
。2 国内研究现状
相对比国外而言,国内在此领域的研究起步比较的晚。中国人民警官大学的张文典和任 冬伟[5]研究开发了国内第一个关于相似度的检测系统,其检测的主要是 PASCAL 语言。研究人 员将在实现该系统的时候,将 PASCAL 语言的属性归纳成四大类:控制类、变量累、运算符 类以及标准过程类。最开始,将上面所提到的四种属性分别统计出来,并将统计得到的数据 存入数据文件。接下来,该系统对四个总属性进行比较,如果检测得到的程序间四个总属性 的差值比它们相对应的标准偏差要小的话,可以认为这个两个程序的相似度较高。随后,比 较相似度较高的程序间的所有属性,如果存在相应属性的差值小于标准偏差的情况,那么将
计算:,这之中ℎ表示为统计出的程序间的相似属性值,表示属性的权值。 在比较完程序的所有属性后,计算最后的ℎ值,通过该值进行相似度计算,相似度为,其中代表一共检测的属性的数目。计算完值后,根据该值和给定的阈值判断
是否存有相似度过高的情况。
北京邮电大学[10]的研究人员为了实现相似度检测的功能,运用了基于 XML 的结构度量 代码相似度检测技术国内外研究现状:http://www.youerw.com/yanjiu/lunwen_89358.html