[发明专利]基于编辑距离的源代码相似度度量方法无效
申请号: | 200710176688.9 | 申请日: | 2007-11-01 |
公开(公告)号: | CN101425008A | 公开(公告)日: | 2009-05-06 |
发明(设计)人: | 李虎;曹羽中;刘超;金茂忠 | 申请(专利权)人: | 北京航空航天大学 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 北京北翔知识产权代理有限公司 | 代理人: | 杨 勇 |
地址: | 100083*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 编辑 距离 源代码 相似 度量 方法 | ||
技术领域
本发明涉及源代码相似度度量方法,更具体而言,涉及基于编辑距离的源代码相似度度量方法。
背景技术
随着软件行业的高速发展,常常会出现源代码复用,也就是对已有的源代码进行拷贝并粘贴到新的上下文环境中,并且为了适应新的上下文环境,而对原有的源代码进行少量的修改。为了判断源代码的复用率,常常需要度量这两块源代码的相似度,也就是判断这两块源代码的相似性。目前,业界通常利用传统的编辑距离方法来计算源代码之间的编辑距离,从而给出相似度的度量值。在此,所述编辑距离是指将字符串s1和字符串s2变成相同字符串而需要进行:(1)把字符串s1中的字符ch1替换成字符串s2中的字符ch2或相反操作;(2)删除字符串s1中的字符ch1或删除字符串s2中的字符ch2以及(3)向字符串s1中插入字符ch2或向字符串s2中插入字符ch1这三种操作的最小次数。
然而,这种传统的编辑距离方法中的三种编辑操作均是针对字符,并且对于任意字符使用三种编辑操作之一时,均是累加一次编辑次数,从未考虑到源代码特有的词法和语法结构,因此在判断源代码的相似性或度量源代码的相似度时,所给出的判断或度量的精确度很低。例如对一段源代码进行几个关键字的修改以及进行几个变量名的修改,尽管前者的修改会对程序的功能造成更大的影响,然而传统的编辑距离方法对这两种修改后的源代码与原有源代码相比后所给出的编辑距离是相同的。由此,当用户利用这种编辑距离进行源代码相似度度量或源代码相似性判断时,会得出一些不正确的结论,尤其是当原有的源代码被通过非正当手段进行复用,也就是被剽窃而需要精确地确定源代码的相似度时,这种传统的编辑距离方法无法满足精确度的需求。因此,需要一种能够针对源代码特有的词法和语法结构,在进行源代码相似度度量或源代码相似性判断时,能提供更高精确度的基于编辑距离的源代码相似度度量方法。
发明内容
本发明的目的是针对利用传统的编辑距离方法进行源代码相似度度量时产生度量精确度不高的问题,而提供一种针对源代码特有的词法和语法结构,在进行源代码相似度度量或源代码相似性判断时,能提供更高的精确度的改进的基于编辑距离的源代码相似度度量方法。
本发明提供一种基于编辑距离的源代码相似度度量方法,包括:输入第一源代码块和第二源代码块;识别第一源代码块和第二源代码块中的符号;判断所述符号的类型,根据所述类型设置相应的增加值;逐一比较第一源代码块与第二源代码块中的符号,利用编辑距离公式采用动态规划法计算编辑距离,得出相似度度量值,其中所述编辑距离公式被定义,以使得第一源代码块与第二源代码块的编辑距离取决于所述符号、对所述符号的编辑操作以及所述符号对应的增加值。
利用本发明所提供的方法,可以在进行源代码相似度度量或源代码相似性判断时,提供更高的精确度。
附图说明
为了更好地理解本发明,下面结合附图仅以举例的方式对本发明的实施方案作详细说明,其中:
图1示出了根据本发明的一个实施方案计算编辑距离的流程图。
具体实施方式
在下面描述中,为说明起见,描述了很多具体细节以便全面理解本发明的实施方案。然而,对于本领域的技术人员来说,显而易见的是本发明可不采用这些具体细节进行实施。
在本说明书中以及随后的权利要求书中,将涉及到若干术语,这些术语将被定义具有下述含义。
符号(token):一个程序设计语言的基本语法符号。
关键字:也称基本字,如PASCAL语言中的begin、end、if、while和var等。
标识符:用来表示各种名字,如常量名、变量名和过程名等。
字面量:各种类型的常数,如25、3.1415、TRUE和“ABC”等。
访问修饰符:可以限制类和结构,以便只有声明它们的程序或命名空间才能使用它们的符号,如private、static、public、this和const等。
其它:不属于关键字、标识符、字面量和访问修饰符的其他符号,如运算符、界符等。
基于上文所述,已知判断两个字符串s1和字符串s2的差别,可以通过计算这两个字符串之间的编辑距离来实现。虽然上文已经介绍了编辑距离,但是为了更加清楚地理解编辑距离,此处将通过公式的形式,对编辑距离进行定义。假设d(s1,s2)表示字符串s1和s2的编辑距离,″表示一个空字符串,ch1和ch2分别表示串s1和s2中的字符,|s|表示字符串s的长度,则编辑距离的计算满足以下定义:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京航空航天大学,未经北京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200710176688.9/2.html,转载请声明来源钻瓜专利网。