CN104077147A - 一种基于代码克隆自动检测和及时提醒的软件复用方法 - Google Patents
一种基于代码克隆自动检测和及时提醒的软件复用方法 Download PDFInfo
- Publication number
- CN104077147A CN104077147A CN201410332613.5A CN201410332613A CN104077147A CN 104077147 A CN104077147 A CN 104077147A CN 201410332613 A CN201410332613 A CN 201410332613A CN 104077147 A CN104077147 A CN 104077147A
- Authority
- CN
- China
- Prior art keywords
- code
- array
- name
- rule
- clones
- 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.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于代码克隆自动检测和及时提醒的软件复用方法,首先,利用词法生成器工具生成Java词法分析器。其次,后台监督器如果监视到当前编辑区代码有修改,则将当前编辑区代码段和已开发的代码输入Java词法分析器,并按照转换规则生成源代码文件对应的token值,并将这些token连接成一个Token序列,存储在一维数组中,然后,采用倍增算法或DC3算法构建后缀数组和名次数组以及生成最长公共前缀数组。最后,从最长公共前缀数组中过滤无意义的代码片段,如果仍存在代码克隆,则在集成开发环境中提醒用户复用或重构这些代码克隆。本发明方法实现了用户边开发,后台监督器边检测源代码的功能。
Description
技术领域
本发明属于软件维护与软件再工程领域,涉及一种自动检测和及时提醒的软件复用方法。
背景技术
软件系统中软件克隆代码的检测是软件工程中研究的热点之一,它在软件维护,架构,进化,专利和剽窃等领域有着广泛的应用。为了提高开发效率,开发者经常对软件系统的源代码进行复制-粘贴-修改活动,这种重用机制通常会导致在源代码库中出现很多相同或相似的代码段,这类代码段被称为克隆代码。另外,开发者脑海中对于相似功能实现方法的固化也使得他们常常会在不同的地方写出相似的代码段。此外,程序员使用特定的设计模式框架及API等来完成相似的程序任务,也会产生一些无意的克隆代码。研究表明,一个软件系统可能会有10%到20%的克隆代码。代码克隆是一种典型的“坏味道”,它增加了软件系统代码的长度,它在很多情况下降低了软件的可理解性和可维护性,增加了软件维护的成本。如果许多克隆的代码分散在软件系统中的不同地方,那么修改一处代码就要求其他克隆的代码也要被修改,而如果文档得不到及时的更新,那么想要保持源代码的一致性就十分困难,修改了一部分克隆代码而忽略了其他的克隆代码,这样引入的错误很可能在运行时才会呈现出来。由此可见,代码克隆是对程序结构的一种破坏,减少代码克隆就能在一定程度上降低软件系统维护的负担,降低错误出现的概率。因此,我们需要对软件代码进行克隆检测,以决定对其实施必要的重构。
现阶段的代码克隆检测工具,很多是半自动的或者开发者驱动的,而且与集成开发环境是分离的,这种分离使得开发者实施克隆代码检测时必须重新手工启用第三方软件,降低了操作的便利性。同时,这种分离也导致克隆代码产生时没能及时地反馈给开发者,致使可能错失良好的克隆代码合并时机。如果将调用克隆检测工具的时机推迟到软件发布阶段,此时代码克隆的合并将可能会付出更大的代价。
此外,当前的软件克隆检测框架大部分是采用先进的搜索或比对技术尽力查找并反馈软件中所有的克隆代码。这种检测的难点是用户事先并不知道哪些代码段可能存在重复。因此,检测工具需要将每一个代码段与其它所有的代码段进行相似性比较,这种检测的时空复杂度往往都非常高。为了减少检测结果的误报和漏报,或增加检测的克隆类型,学者们相继提出了许多先进的克隆检测方法与技术。然而,这些方法和技术中存在下列问题:对于中小规模的软件,当前流行的检测工具可以很好地满足克隆检测要求,但在检测大规模软件时它们耗费了大量的内存与时间,很难做到大规模检测的实时性;其次,当前的检测工具与集成开发环境是分离的,且大多数需要手动调用,难以支持自动实时检测,致使克隆代码产生后,未能得到用户及时关注。再次,当前的检测方法总是试图搜遍整个代码库,然后将所有的克隆对或克隆群以某种可视化的方式呈现给开发者,致使开发者花费很大精力定位自己真正感兴趣的克隆,增加了用户复用代码或重构的负担。
发明内容
技术问题:本发明提供一种基于代码克隆自动检测和及时提醒的软件复用方法。该方法提高了软件复用效率,实现了克隆代码的自动检测和及时提醒,降低了软件维护的成本。
技术方案:本发明的基于代码克隆自动检测和及时提醒的软件复用方法,后台监督器持续监视当前编辑区代码是否有修改,如果有则按照以下步骤进行软件复用检测:
步骤1)利用词法分析器的生成工具生成基于token的Java词法分析程序;
步骤2)将源代码标准化:将项目中已经开发完的代码和当前编辑区域的代码段分别输入所述步骤1)中生成的Java词法分析程序,生成每个源文件对应的token值,即删除空格符、注释和包,同时根据转换规则将源代码转换为Tokens;
步骤3)将所述步骤2)中得到的各个Tokens连接成一个Token序列,并存储在一维数组TokenArray[]中,然后采用倍增算法或DC3算法构建一维数组TokenArray[]所对应的后缀数组SuffixArray[],最后遍历所述后缀数组SuffixArray[],生成名次数组RankArray[];
步骤4)利用所述后缀数组SuffixArray[]和名次数组RankArray[],生成用于查找与当前编辑区代码片段相似的语句片段的最长公共前缀数组LongestCommonPrefixArray[],所述最长公共前缀数组LongestCommonPrefixArray[]含有与当前编辑区代码片段相似的代码克隆群;
步骤5)将所述最长公共前缀数组LongestCommonPrefixArray[]中的代码克隆群中无意义的代码片段剔除,然后检测所述步骤5)中剔除无意义的代码片段后的代码克隆群,如果存在代码克隆,则在集成开发环境中提醒用户复用、合并或重构这些代码克隆。
本发明方法的步骤2)中的转换规则为:
规则1:将源代码中的基本数据类型、包装数据类型和泛型均用字母T替换;
规则2:将源代码中的关键字for、while、if、else、case作如下转换,for→F,while→W,if→I,else→,case→C;
规则3:将类名,类成员变量名,类成员方法名,类的实例名均替换为字符N,数组名替换为字符R;
规则4:将源代码中的整数,浮点数,字符常量用0替换,字符串常量用s替换;
规则5:去掉包名,将包名+类名替换成类名;
规则6:补全调用者,具体为:对于一个对象调用自己的方法,且该方法的前面没有对象名或类名时,需将对象名或类名添加到方法名的前面;
规则7:将初始化列表中的内容替换为空;
规则8:去掉注释、包和空格。
本发明方法的一种优选方案中,步骤4)中,最长公共前缀数组LongestCommonPrefixArray[]中的代码克隆群为对应的一维数组TokenArray[]中token个数大于最小有效token阈值的代码克隆群。
本发明基于后缀数组的算法实现了代码克隆的实时检测和及时提醒,这种技术能够在项目的内部实现语句块层面细粒度的复用。
有益效果:与现有技术相比,本发明具有如下优点:
现有的代码克隆检测大多利用度量技术、抽象语法树、程序依赖图以及数据挖掘方法。这些方法有的检测的粒度很细,但算法时空效率较高,难以达到大规模和实时检测要求。其次,当前的代码克隆检测工具大多数独立于开发环境,开发者调用花销时间太大,因此,往往带来了检测的滞后性,导致开发者错过代码复用的机会。另外,很多工具提供给开发者的是系统中全部的代码克隆,而开发者往往关心的只是跟当前编辑代码有关的克隆代码块,这给开发者选择可复用代码块带来的困难。为此,本发明方法针对以上提及的不足进行如下改进:
(1)本方法采用后缀数组表示token序列,这种数据结构实现简单,而且在处理重复子串的问题上比后缀树具有更优的时空复杂度。从后缀数组的构造至查找出克隆代码群所用的总时间复杂度为O(n),而n为转换后的token序列长度。这使得本发明方法能够实现大规模实时检测要求。
(2)本发明采用的检测方法将作为Eclipse的插件提供为用户使用,实现了用户边编写代码,边自动检测的功能,克服了用户被动地调用或在版本发布时才想到调用代码克隆工具的局限。而传统的检测工具大多脱离集成开发环境,即使以插件形式提供给用户使用,仍然需要开发者手工调用工具,但本发明的方法克服这一弊端,实现了在软件开发的早期阶段提醒用户实施代码复用或重构,从而避免了引入新的代码克隆,有效地提高了软件的可维护性。
(3)该方法过滤了开发者不感兴趣的代码克隆,只呈现与当前正在开发的代码块相关的代码克隆,如果将系统中所有的代码克隆全部提供给开发者,随着系统规模的增大,将会导致大量暂时开发者并不急于复用的代码克隆,这些代码克隆淹没的开发者真正感兴趣的复用块,增加了开发者定位代码克隆的开销,而本发明方法克服了这一弊端,因此,该方法提高了复用的效率和准确率。
(4)传统的方法往往局限于检测方法级上的代码克隆,这种复用粒度较粗,在实际的开发中,方法体往往会比较大,开发者真正想复用的只是方法中某一段代码块。而本方法检测的粒度在代码块层面,从而在项目的内部实现了语句块层面细粒度的复用,提高了开发的效率。
附图说明
图1是基于后缀数组的实时克隆搜索和复用提醒的执行流程示意图。
具体实施方式
下面将结合实施例和说明书附图对本发明做进一步详细说明说明。
在介绍具体技术方案之前,先阐释几个与本发明相关的的概念。
(1)代码片段
代码片段(Code Fragment)是任意一个代码行序列(可能包含注释,也可能不包含注释)。它可以是任意粒度的,例如,代码片段可以是一个函数的定义,一个begin-end语句块或者一个语句序列。一个代码片段可通过它所在的文件名、源代码中的起始行号和结束行号来标识,它可以通过一个三元组表示:文件名,起始代码行行号,结束代码行行号。
(2)代码克隆
代码片段CF2是另一个代码片段CF1的一个克隆,是指根据一些给定的相似性度量函数定义它们之间是相似的,也就是说,f(CF1)=f(CF2),f表示相似度函数。两个相似的代码片段构成了一个克隆对,多个相似的代码片段构成了一个克隆类或克隆组。
(3)代码克隆类型
类型一(Type-1):除空格、布局和注释不同之外,其余部分都相同的代码片段。
类型二(Type-2):除标识符、字面量、类型、空格、布局和注释外,语法结构相同的代码片段。
类型三(Type-3):除标识符、字面量、类型、空格、布局和注释外,进一步对克隆代码段进行改动,例如修改、增加或者删除语句。
类型四:两个或多个代码片段执行相同的计算,但是语法结构的实现方式不同。
以上克隆类型定义中,Type-1克隆的定义最为精确,Type-2克隆的定义不够精确,而Type-3与Type-4克隆的界定存在更高的模糊性。同时,四类克隆代码的定义都是基于代码片段的概念。所以从代码片段的粒度来看,克隆代码有以下五种类型:如果两个文件内的源代码相同或相似,则它们被称为文件克隆;在面向对象语言的代码中,如果两个类相同或相似,则被称为类克隆;当两个函数或方法中的代码非常相似时,则这两个函数被称为函数克隆;当两个代码块(由开始和结束的花括号或缩进等标识的代码段)非常相似时,则它们被称为块克隆;当两组语句代码(语句间连续)非常相似,则这两组语句被称为语句克隆。因此在克隆代码研究中,时常将代码相似度与检测粒度结合起来界定克隆代码。本发明主要关注代码块层面的克隆。
(4)源代码的中间表示
目前,国内外学者已提出许多克隆检测算法与技术,这些技术之间的差异点在于代码的中间表示,克隆匹配算法以及克隆检测的粒度。根据源代码的中间表示,这些方法可大致地分成六类:基于文本、基于词法(Token)、基于语法(Syntax)、基于语义、基于Metrics、基于低级语言。本发明中的源代码中间表示是基于词法的。
本发明的基于代码克隆自动检测和及时提醒的软件复用方法,其内部采用的检测方法是基于token数组的,且能检测出Type-2类型的代码克隆,具体包括以下步骤:
步骤1)利用词法分析器的生成工具生成基于token的Java词法分析程序;本发明所采用的词法分析器生成工具是Jflex,此工具是开源的;
步骤2)将源代码标准化:将项目中已经开发完的代码和当前编辑区域的代码段分别输入所述步骤1)中生成的Java词法分析程序,生成每个源文件对应的token值,即删除空格符、注释和包,同时根据转换规则将源代码转换为Tokens,其中转换规则如下:
规则1:将源代码中的基本数据类型、包装数据类型和泛型均用字母T替换;为方便理解,这里的字母T取自Type的首字母。同时为下文叙述方便,式子“x→y”表示x被替换为y。比如,int x→T x、Integer inte→T inte以及ArrayList<Dog>arr→ArrayList<T>arr,其中Dog是类名;
规则2:将源代码中关键字for、while、if、else和case作如下转换,for→F、while→W、if→I、else→E、case→C;
规则3:将类名,类成员变量名,类成员方法名,类的实例名均替换为字符N,数组名替换为字符R;
规则4:将源代码中的整数,浮点数,字符常均替换为0,字符串常量用s替换;
规则5:去掉包名,将包名+类名替换成类名;例如,包名cn.seu.cloneTest加类名PatternTest的字符串package cn.seu.cloneTest PatternTest将被替换为PatternTest,降低转换后token数组的存储空间;
规则6:补全调用者,具体为:对于一个对象调用自己的方法,且该方法的前面没有对象名或类名时,需将对象名或类名添加到方法名的前面。如类Dog中方法getColor(),则将getColor()替换为this.getColor(),这里的this即为方法getColor()的调用对象,而类Math中cos()方法则需要补全为Math.cos();
规则7:将初始化列表中的内容替换为空,如将“={InitList}”替换为“={}”其中InitList是名字、数字、字符串、操作符、,(),{}的序列组合;
规则8:去掉注释、包和空格;
设计转换规则的目的是消除代码中结构的差异,也是为了能检测出Type-2类型的代码克隆,规则1至规则8的设计只适合java语言机制。
步骤3)将所述步骤2)中得到的各个Tokens连接成一个Token序列,并存储在一维数组TokenArray[]中,然后采用倍增算法或DC3算法构建一维数组TokenArray[]所对应的后缀数组SuffixArray[],最后遍历所述后缀数组SuffixArray[],生成名次数组RankArray[];假设TokenArray的长度是N,则DC3算法和生成名次数组的时空复杂度均是O(N);
步骤3)中的DC3算法(Difference Cover mod3)是J.和P.Sanders在2003年发表的论文"Simple Linear Work Suffix Array Construction"中描述的线性时间内构造后缀数组的算法。DC3算法的思想类似于找中位数的median of medians算法。相对前缀倍增(Prefix Doubling)算法而言,它的渐进时间复杂度比较小,但常数项比较大。
本发明方法的另一种实施例中,步骤3)中采用现有成熟的倍增算法构建一维数组TokenArray[]所对应的后缀数组SuffixArray[]。
步骤4)利用所述后缀数组SuffixArray[]和名次数组RankArray[],生成用于查找与当前编辑区代码片段相似的语句片段的最长公共前缀数组LongestCommonPrefixArray[],所述的最长公共前缀数组LongestCommonPrefixArray[]含有与当前编辑区代码片段相似的代码克隆群。获取与当前编辑区代码片段相似的克隆群时,分如下两步:
(1)计算两个后缀的最长公共前缀需要利用GetHeight算法生成Height数组,该数组中的信息可在线性时间内计算出最长公共前缀数组LongestCommonPrefixArray;
(2)通过步骤2)获得当前编辑区代码片段标准化后的位置,假设其位置为SuffixArray[k]=j,则与当前编辑区代码段相似的代码克隆为TokenArray[j]的Height[k]个前缀字符。
步骤5)将所述最长公共前缀数组LongestCommonPrefixArray[]中的代码克隆群中无意义的代码片段剔除,然后检测所述步骤5)中剔除无意义的代码片段后的代码克隆群,如果存在代码克隆,则在集成开发环境中提醒用户复用或重构这些代码克隆。剔除无意义的代码克隆含有以下情形:
(1)当克隆代码块小于最小有效token阈值时,将剔除此克隆代码块;这里的最小token阈值可以由用户根据复用代码行的多少进行设定。最小token阈值也可以通过启发式的方法确定,即通过统计用户复用代码行的平均值得出最小token阈值。通过实验,我们得出最小有效token阈值为10时,检测效果较好。
(2)当克隆代码块横跨两个方法时,将剔除此克隆代码块;
(3)当克隆代码块中只是数组或对象的初始化时,将剔除此克隆代码块,因为这些克隆代码块通常复用意义很小;
实施例:
1.下面将通过具体的代码说明整个操作的流程。
步骤1),利用词法分析器的生成工具生成基于token的Java词法分析程序;本发明所采用的词法分析器生成工具是Jflex;
步骤2),将源代码标准化:将项目中已经开发完的代码和当前编辑区的代码段分别输入所述步骤1)中生成的Java词法分析程序,生成每个源文件对应的token值,在生成的过程中将代码中包,注释,空格等无关信息过滤。其中,第一行代码的cn.seu.cloneTest即为包名。将源代码进行标准化后的中间代码如下:
classN{
TN(){
TN[]=newT[]{};
TN=newT(0);
TN=0;
for(TN=0;N<N.N;++N)
if(N.N(N[N]))
N+=N.N(N);
N.N(s+N);
}
TN(TN){
R0;
}
TN(T[]N){
TN=newT(0);
TN=0;
for(TN=0;N<N.N;++N)
if(N.N(N[N]))
N+=N.N(N);
N.N(s+N);
}
}
步骤3),我们得到token串序列的数组TokenArray,其内容如下:
classN{TN(){TN[]=newT[]{};TN=newT(0);TN=0;for(TN=0;N<N.N;++N)if(N.N(N[N]))N+=N.N(N);N.N(s+N);}TN(TN){R0;}TN(T[]N){TN=newT(0);TN=0;for(TN=0;N<N.N;++N)if(N.N(N[N]))N+=N.N(N);N.N(s+N);}}
其中TokenArray数组的长度为183,它是计算最长公共前缀数组和Height数组
的基础。采用倍增或DC3算法可得到后缀数组SuffixArray[],然后对其进行一遍扫描,
生成名次数组RankArray[],为节省篇幅,这两个数组的内容均节选前5个元素,见
表1。
i | SuffixArray[i] | RankArray[i] |
0 | 9 | 148 |
1 | 33 | 158 |
2 | 121 | 147 |
3 | 80 | 169 |
4 | 168 | 168 |
5 | 63 | 120 |
6 | 151 | 174 |
7 | 67 | 124 |
8 | 155 | 78 |
9 | 96 | 0 |
表1
步骤4),得到最长公共前缀序列。为了清晰起见,表2只显示长度大于60的最长公共前缀序列。由下表不难看出:排名第132位的后缀TokenArray(SA[132])和排名第133位的的后缀TokenArray(SA[133])的最长公共前缀为TN=newT(0);TN=0;for(TN=0;N<N.N;++N)if(N.N(N[N]))N+=N.N(N);N.N(s+N);}},该最长公共前缀长度为68。如果映射回原代码,则代码行04至12和代码行17至24即为克隆代码,由于本例的源代码中与当前编辑区代码段只有一个克隆,故没有克隆群。
表2
步骤5)从最长公共前缀数组LongestCommonPrefixArray[]中剔除无意义的代码克隆后,发现代码行04至12是代码行17至24的克隆代码,此时在集成开发环境中将以表3的形式及时提醒用户复用或重构这些代码克隆。
表3
这种及时提醒使得用户在开发的早期阶段就可以注意到项目中已经存在与当前正在编写的代码块相似。本发明基于token的后缀数组算法确保了该方法在大规模代码检测中具有良好的实时性。
2.评估标准
代码克隆在项目中所占的比例潜在地影响着软件的可维护性和软件的质量。因此,我们采用克隆代码在整个项目中所占的比重来评价我们技术的有效性。
3.结果分析
利用本发明所提出的技术框架,我们开发了原型工具,并在一个中等规模的软件项目中进行了实验。实验结果表明,采用本技术的开发者比普通没有采纳本技术的开发者,代码克隆在项目中的比重由23%降到4%,极大地提高了软件的可维护性和可扩展性。
以上仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干可以预期的改进和等同替换,这些对本发明权利要求进行改进和等同替换后的技术方案,均落入本发明的保护范围。
Claims (3)
1.一种基于代码克隆自动检测和及时提醒的的软件复用方法,其特征在于,该方法中,后台监督器持续监视当前编辑区代码是否有修改,如果有则按照以下步骤进行软件复用检测:
步骤1)利用词法分析器的生成工具生成基于token的Java词法分析程序;
步骤2)将源代码标准化:将项目中已经开发完的代码和当前编辑区域的代码段分别输入所述步骤1)中生成的Java词法分析程序,生成每个源文件对应的token值,即删除空格符、注释和包,同时根据转换规则将源代码转换为Tokens;
步骤3)将所述步骤2)中得到的各个Tokens连接成一个Token序列,并存储在一维数组TokenArray[]中,然后采用倍增算法或DC3算法构建一维数组TokenArray[]所对应的后缀数组SuffixArray[],最后遍历所述后缀数组SuffixArray[],生成名次数组RankArray[];
步骤4)利用所述后缀数组SuffixArray[]和名次数组RankArray[],生成用于查找与当前编辑区代码片段相似的语句片段的最长公共前缀数组LongestCommonPrefixArray[],所述最长公共前缀数组LongestCommonPrefixArray[]含有与当前编辑区代码片段相似的代码克隆群;
步骤5)将所述最长公共前缀数组LongestCommonPrefixArray[]中的代码克隆群中无意义的代码片段剔除,然后检测所述步骤5)中剔除无意义的代码片段后的代码克隆群,如果存在代码克隆,则在集成开发环境中提醒用户复用、合并或重构这些代码克隆。
2.根据权利要求1所述的基于代码克隆自动检测和及时提醒的软件复用方法,其特征在于,所述步骤2)中的转换规则为:
规则1:将源代码中的基本数据类型、包装数据类型和泛型均用字母T替换;
规则2:将源代码中的关键字for、while、if、else、case作如下转换,for→F,while→W,if→I,else→,case→C;
规则3:将类名,类成员变量名,类成员方法名,类的实例名均替换为字符N,数组名替换为字符R;
规则4:将源代码中的整数,浮点数,字符常量用0替换,字符串常量用s替换;
规则5:去掉包名,将包名+类名替换成类名;
规则6:补全调用者,具体为:对于一个对象调用自己的方法,且该方法的前面没有对象名或类名时,需将对象名或类名添加到方法名的前面;
规则7:将初始化列表中的内容替换为空;
规则8:去掉注释、包和空格。
3.根据权利要求1所述的基于代码克隆自动检测和及时提醒的软件复用方法,其特征在于,所述步骤4)中,最长公共前缀数组LongestCommonPrefixArray[]中的代码克隆群为对应的一维数组TokenArray[]中token个数大于最小有效token阈值的代码克隆群。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410332613.5A CN104077147A (zh) | 2014-07-11 | 2014-07-11 | 一种基于代码克隆自动检测和及时提醒的软件复用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410332613.5A CN104077147A (zh) | 2014-07-11 | 2014-07-11 | 一种基于代码克隆自动检测和及时提醒的软件复用方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104077147A true CN104077147A (zh) | 2014-10-01 |
Family
ID=51598418
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410332613.5A Pending CN104077147A (zh) | 2014-07-11 | 2014-07-11 | 一种基于代码克隆自动检测和及时提醒的软件复用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104077147A (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104407872A (zh) * | 2014-12-04 | 2015-03-11 | 北京邮电大学 | 代码克隆的检测方法 |
CN104598231A (zh) * | 2015-01-09 | 2015-05-06 | 山东工商学院 | Python源代码文件相似性检测方法 |
CN106919433A (zh) * | 2016-06-01 | 2017-07-04 | 阿里巴巴集团控股有限公司 | 重复代码片段查询方法和装置 |
CN107066262A (zh) * | 2017-03-10 | 2017-08-18 | 苏州棱镜七彩信息科技有限公司 | 源代码文件克隆邻接表合并检测方法 |
CN108255606A (zh) * | 2018-01-02 | 2018-07-06 | 深圳市文鼎创数据科技有限公司 | Autorun程序存储的实现方法、装置及存储设备 |
CN108446540A (zh) * | 2018-03-19 | 2018-08-24 | 中山大学 | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 |
CN109558314A (zh) * | 2018-11-09 | 2019-04-02 | 国网四川省电力公司电力科学研究院 | 一种面向Java源代码克隆检测的方法 |
CN109828785A (zh) * | 2019-01-23 | 2019-05-31 | 复旦大学 | 一种采用gpu加速的近似代码克隆检测方法 |
CN110209425A (zh) * | 2018-09-21 | 2019-09-06 | 电子科技大学 | 面向c语言的源代码克隆检测方法 |
CN110502277A (zh) * | 2019-08-30 | 2019-11-26 | 西安邮电大学 | 一种基于bp神经网络的代码坏味检测方法 |
CN110610450A (zh) * | 2018-06-15 | 2019-12-24 | 伊姆西Ip控股有限责任公司 | 数据处理方法、电子设备和计算机可读存储介质 |
CN110851176A (zh) * | 2019-10-22 | 2020-02-28 | 天津大学 | 一种自动构造并利用伪克隆语料的克隆代码检测方法 |
CN110989991A (zh) * | 2019-10-25 | 2020-04-10 | 深圳开源互联网安全技术有限公司 | 检测应用程序中源代码克隆开源软件的方法及系统 |
CN111124487A (zh) * | 2018-11-01 | 2020-05-08 | 浙江大学 | 代码克隆检测方法、装置以及电子设备 |
CN111240740A (zh) * | 2020-01-23 | 2020-06-05 | 复旦大学 | 基于演化历史分析的代码克隆危害性评估方法 |
CN112241262A (zh) * | 2020-12-07 | 2021-01-19 | 中国科学院软件研究所 | 一种面向软件定义卫星的可复用代码提取、分析与检索方法与装置 |
CN112286575A (zh) * | 2020-10-20 | 2021-01-29 | 杭州云象网络技术有限公司 | 基于图匹配模型的智能合约相似度检测方法及系统 |
CN113448572A (zh) * | 2021-02-26 | 2021-09-28 | 北京新氧科技有限公司 | 软件项目开发方法及装置、计算机存储介质、计算机设备 |
CN113778398A (zh) * | 2021-09-28 | 2021-12-10 | 北京达佳互联信息技术有限公司 | 代码生成方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012185542A (ja) * | 2011-03-03 | 2012-09-27 | Denso Corp | コード生成装置、及びコード生成プログラム |
CN103309804A (zh) * | 2013-04-08 | 2013-09-18 | 中国电子科技集团公司第十研究所 | 自动化代码规则检查平台 |
-
2014
- 2014-07-11 CN CN201410332613.5A patent/CN104077147A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012185542A (ja) * | 2011-03-03 | 2012-09-27 | Denso Corp | コード生成装置、及びコード生成プログラム |
CN103309804A (zh) * | 2013-04-08 | 2013-09-18 | 中国电子科技集团公司第十研究所 | 自动化代码规则检查平台 |
Non-Patent Citations (3)
Title |
---|
古平 等: "一种程序源代码相似度度量方法", 《计算机工程》 * |
史庆庆: "基于后缀数组的克隆代码检测研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
史庆庆: "基于后缀数组的克隆检测", 《计算机工程》 * |
Cited By (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104407872A (zh) * | 2014-12-04 | 2015-03-11 | 北京邮电大学 | 代码克隆的检测方法 |
CN104407872B (zh) * | 2014-12-04 | 2018-01-16 | 北京邮电大学 | 代码克隆的检测方法 |
CN104598231A (zh) * | 2015-01-09 | 2015-05-06 | 山东工商学院 | Python源代码文件相似性检测方法 |
CN104598231B (zh) * | 2015-01-09 | 2018-07-20 | 山东工商学院 | Python源代码文件相似性检测方法 |
CN106919433A (zh) * | 2016-06-01 | 2017-07-04 | 阿里巴巴集团控股有限公司 | 重复代码片段查询方法和装置 |
CN107066262A (zh) * | 2017-03-10 | 2017-08-18 | 苏州棱镜七彩信息科技有限公司 | 源代码文件克隆邻接表合并检测方法 |
CN108255606B (zh) * | 2018-01-02 | 2021-06-15 | 深圳市文鼎创数据科技有限公司 | Autorun程序存储的实现方法、装置及存储设备 |
CN108255606A (zh) * | 2018-01-02 | 2018-07-06 | 深圳市文鼎创数据科技有限公司 | Autorun程序存储的实现方法、装置及存储设备 |
CN108446540A (zh) * | 2018-03-19 | 2018-08-24 | 中山大学 | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 |
CN108446540B (zh) * | 2018-03-19 | 2022-02-25 | 中山大学 | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 |
CN110610450B (zh) * | 2018-06-15 | 2023-05-05 | 伊姆西Ip控股有限责任公司 | 数据处理方法、电子设备和计算机可读存储介质 |
CN110610450A (zh) * | 2018-06-15 | 2019-12-24 | 伊姆西Ip控股有限责任公司 | 数据处理方法、电子设备和计算机可读存储介质 |
CN110209425A (zh) * | 2018-09-21 | 2019-09-06 | 电子科技大学 | 面向c语言的源代码克隆检测方法 |
CN110209425B (zh) * | 2018-09-21 | 2022-03-15 | 电子科技大学 | 面向c语言的源代码克隆检测方法 |
CN111124487B (zh) * | 2018-11-01 | 2022-01-21 | 浙江大学 | 代码克隆检测方法、装置以及电子设备 |
CN111124487A (zh) * | 2018-11-01 | 2020-05-08 | 浙江大学 | 代码克隆检测方法、装置以及电子设备 |
CN109558314A (zh) * | 2018-11-09 | 2019-04-02 | 国网四川省电力公司电力科学研究院 | 一种面向Java源代码克隆检测的方法 |
CN109558314B (zh) * | 2018-11-09 | 2021-07-27 | 国网四川省电力公司电力科学研究院 | 一种面向Java源代码克隆检测的方法 |
CN109828785B (zh) * | 2019-01-23 | 2022-04-12 | 复旦大学 | 一种采用gpu加速的近似代码克隆检测方法 |
CN109828785A (zh) * | 2019-01-23 | 2019-05-31 | 复旦大学 | 一种采用gpu加速的近似代码克隆检测方法 |
CN110502277A (zh) * | 2019-08-30 | 2019-11-26 | 西安邮电大学 | 一种基于bp神经网络的代码坏味检测方法 |
CN110851176B (zh) * | 2019-10-22 | 2023-07-04 | 天津大学 | 一种自动构造并利用伪克隆语料的克隆代码检测方法 |
CN110851176A (zh) * | 2019-10-22 | 2020-02-28 | 天津大学 | 一种自动构造并利用伪克隆语料的克隆代码检测方法 |
CN110989991A (zh) * | 2019-10-25 | 2020-04-10 | 深圳开源互联网安全技术有限公司 | 检测应用程序中源代码克隆开源软件的方法及系统 |
CN110989991B (zh) * | 2019-10-25 | 2023-12-01 | 深圳开源互联网安全技术有限公司 | 检测应用程序中源代码克隆开源软件的方法及系统 |
CN111240740A (zh) * | 2020-01-23 | 2020-06-05 | 复旦大学 | 基于演化历史分析的代码克隆危害性评估方法 |
CN112286575A (zh) * | 2020-10-20 | 2021-01-29 | 杭州云象网络技术有限公司 | 基于图匹配模型的智能合约相似度检测方法及系统 |
CN112241262A (zh) * | 2020-12-07 | 2021-01-19 | 中国科学院软件研究所 | 一种面向软件定义卫星的可复用代码提取、分析与检索方法与装置 |
CN113448572A (zh) * | 2021-02-26 | 2021-09-28 | 北京新氧科技有限公司 | 软件项目开发方法及装置、计算机存储介质、计算机设备 |
CN113448572B (zh) * | 2021-02-26 | 2024-04-16 | 北京新氧科技有限公司 | 软件项目开发方法及装置、计算机存储介质、计算机设备 |
CN113778398A (zh) * | 2021-09-28 | 2021-12-10 | 北京达佳互联信息技术有限公司 | 代码生成方法、装置、电子设备及存储介质 |
CN113778398B (zh) * | 2021-09-28 | 2024-05-14 | 北京达佳互联信息技术有限公司 | 代码生成方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104077147A (zh) | 一种基于代码克隆自动检测和及时提醒的软件复用方法 | |
Wu et al. | Errudite: Scalable, reproducible, and testable error analysis | |
Liu et al. | Learning to spot and refactor inconsistent method names | |
Poshyvanyk et al. | Feature location using probabilistic ranking of methods based on execution scenarios and information retrieval | |
Hoffart et al. | YAGO2: exploring and querying world knowledge in time, space, context, and many languages | |
US9501467B2 (en) | Systems, methods, software and interfaces for entity extraction and resolution and tagging | |
Lawrie et al. | Quantifying identifier quality: an analysis of trends | |
Aksenov et al. | Abstractive text summarization based on language model conditioning and locality modeling | |
KR101877828B1 (ko) | 인공지능 기반의 사용자 인터페이스 통합 플랫폼 시스템 | |
CN106843840A (zh) | 一种基于相似度分析的源代码版本演化注释复用方法 | |
Nesi et al. | Geographical localization of web domains and organization addresses recognition by employing natural language processing, Pattern Matching and clustering | |
Afreen et al. | SBVR2UML: A challenging transformation | |
Mahajan et al. | Recommending stack overflow posts for fixing runtime exceptions using failure scenario matching | |
Kochtchi et al. | Networks of Names: Visual Exploration and Semi‐Automatic Tagging of Social Networks from Newspaper Articles | |
CN105824756A (zh) | 一种基于代码依赖关系的过时需求自动检测方法及系统 | |
CN108829651A (zh) | 一种公文处理的方法、装置、终端设备及存储介质 | |
Ortona et al. | Wadar: Joint wrapper and data repair | |
Murgante et al. | Computational Science and Its Applications-ICCSA 2014: 14th International Conference, Guimarães, Portugal, June 30-July 3, 204, Proceedings, Part V | |
Wimalasuriya et al. | Using multiple ontologies in information extraction | |
Xiao et al. | Datalab: A platform for data analysis and intervention | |
Ye et al. | Generating Data for Symbolic Language with Large Language Models | |
Perez-Beltrachini et al. | Semantic parsing for conversational question answering over knowledge graphs | |
Sharma et al. | The semantics of covid-19 web data: ontology learning and population | |
Hanafi et al. | Synthesizing extraction rules from user examples with seer | |
CN111190965A (zh) | 基于文本数据的即席关系分析系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20141001 |
|
RJ01 | Rejection of invention patent application after publication |