CN116302089A - 基于图片相似度的代码克隆检测方法、系统及存储介质 - Google Patents

基于图片相似度的代码克隆检测方法、系统及存储介质 Download PDF

Info

Publication number
CN116302089A
CN116302089A CN202310583348.7A CN202310583348A CN116302089A CN 116302089 A CN116302089 A CN 116302089A CN 202310583348 A CN202310583348 A CN 202310583348A CN 116302089 A CN116302089 A CN 116302089A
Authority
CN
China
Prior art keywords
code
source code
detected
file
similarity
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
CN202310583348.7A
Other languages
English (en)
Other versions
CN116302089B (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.)
Huazhong University of Science and Technology
Original Assignee
Huazhong University of Science and Technology
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 Huazhong University of Science and Technology filed Critical Huazhong University of Science and Technology
Priority to CN202310583348.7A priority Critical patent/CN116302089B/zh
Publication of CN116302089A publication Critical patent/CN116302089A/zh
Application granted granted Critical
Publication of CN116302089B publication Critical patent/CN116302089B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • G06F8/751Code clone detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/74Image or video pattern matching; Proximity measures in feature spaces
    • G06V10/761Proximity, similarity or dissimilarity measures
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Databases & Information Systems (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Medical Informatics (AREA)
  • Multimedia (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于图片相似度的代码克隆检测方法、系统及存储介质,属于源代码克隆检测领域,包括:S1、构建源代码集的倒排索引字典;S2、计算待测目标文件的代码块哈希值,并以每个代码块的哈希值为键在所述倒排索引字典中搜索,得到对应的源代码的文件名列表;S3、计算待测目标文件与所述列表中每个源代码的代码块相似度K,若
Figure ZY_1
,则判断待测目标文件与对应的源代码不存在克隆关系;若
Figure ZY_2
,则判断待测目标文件与对应的源代码存在克隆关系;S4、提取
Figure ZY_3
对应的源代码以及待测目标文件的语义特征矩阵,并分别转换为对应的图片,分别计算待测目标文件与每个所述源代码对应的图片相似度,得到检测结果。本发明兼顾了大规模和语义克隆检测。

Description

基于图片相似度的代码克隆检测方法、系统及存储介质
技术领域
本发明属于源代码克隆检测领域,更具体地,涉及一种基于图片相似度的代码克隆检测方法、系统及存储介质。
背景技术
代码克隆检测作为衡量代码复用的一种有效方式,在软件开发、维护以及质量保证中发挥着重要作用。不好的代码复用方式会对整个软件系统的开发和维护带来很多不利因素,因此高效且准确的代码克隆检测是亟需解决的痛点问题。
目前主流的代码克隆检测可以分为大规模克隆检测和语义克隆检测两类。大规模克隆检测主要采用基于文本和基于令牌的方式实现,通过直接将代码片段转换为文本或令牌序列,然后进行相似度比较,检测时间较短,但缺乏对代码语义信息的考虑。
现有的语义克隆检测主要包括基于图和基于树的检测方法。基于图的检测方法,程序依赖的图(PDG)和控制流图(CFG)都具有复杂的结构,导致对其相似度匹配的时间开销巨大;此外,生成准确的图形表示一般需要代码编译,这导致基于图的方法对某些代码片段(例如单个函数、代码片段)的检测有限。基于树的克隆检测方法中树表征的结构也非常复杂,仍然会导致匹配的时间开销过大。
发明内容
针对现有技术的缺陷和改进需求,本发明提供了一种基于图片相似度的代码克隆检测方法、系统及存储介质,其目的在于同时实现对大规模语义克隆的代码克隆检测。
为实现上述目的,按照本发明的一个方面,提供了一种基于图片相似度的代码克隆检测方法,包括:
S1、构建源代码集的倒排索引字典,所述倒排索引字典的键为每个源代码块的哈希值,值为源代码的文件名;
S2、计算待测目标文件的代码块哈希值,并以每个代码块的哈希值为键在所述倒排索引字典中搜索,得到对应的源代码的文件名列表;
S3、计算待测目标文件与所述列表中每个源代码的代码块相似度K,若
Figure SMS_1
,则判断待测目标文件与对应的源代码不存在克隆关系;若/>
Figure SMS_2
,则判断待测目标文件与对应的源代码存在克隆关系;其中,/>
Figure SMS_3
为设定的第一克隆过滤阈值,/>
Figure SMS_4
为设定的第二克隆过滤阈值;
S4、提取
Figure SMS_5
对应的源代码以及待测目标文件的语义特征矩阵,并分别转换为对应的图片,分别计算待测目标文件与每个所述源代码对应的图片相似度,得到克隆检测结果。
进一步地,S4中,提取
Figure SMS_6
对应的源代码以及待测目标文件的语义特征矩阵,并分别转换为对应的图片包括:
S41、将待测目标文件以及
Figure SMS_7
对应的源代码转换为抽象语法树;
S42、将所述抽象语法树转换为N×N的语义特征矩阵,其中,所述语义特征矩阵中的
Figure SMS_8
元素表示所述抽象语法树中节点/>
Figure SMS_9
指向节点/>
Figure SMS_10
的边的条数,/>
Figure SMS_11
和/>
Figure SMS_12
取值分别为0,1,……,N-1,N为所述抽象语法树节点的总数;
S43、将所述语义特征矩阵转换为对应的图片。
3.根据权利要求2所述的方法,其特征在于,S43中,将所述语义特征矩阵转换为对应的图片之前,还包括:删除所述语义特征矩阵中表示两个叶子节点之间边的条数的元素。
进一步地,S43中,将所述语义特征矩阵转换为对应的图片之前,还包括:将所述语义特征矩阵进行归一化;所述归一化公式为:
Figure SMS_13
其中,
Figure SMS_14
表示归一化之前的语义特征矩阵,/>
Figure SMS_15
表示归一化之后的语义特征矩阵。
进一步地,S4中,分别计算待测目标文件与每个所述源代码对应的图片相似度,得到克隆检测结果,包括:
分别计算待测目标文件与每个所述源代码对应的图片的均方误差值;
若所述均方误差值大于设定的图片距离阈值
Figure SMS_16
,则判定待测目标文件与相应的源代码为非克隆代码对,否则为克隆代码对。
进一步地,S1中,构建源代码集的倒排索引字典包括:
S11、将源代码的每n行拼接为一个字符串,则每个源代码生成的代码块个数为:M-n+1,其中,M表示源代码的行数;
S12、计算每个代码块的哈希值,并以所述哈希值为键,对应的源代码的文件名为值,构建所述倒排索引字典。
进一步地,在S11之前,还包括步骤:
提取每个源代码的抽象语法树,并对所述抽象语法树中的变量名类型节点的代码令牌进行规范化;所述规范化包括将同类型变量的变量名用统一的变量名代替。
进一步地,S3中,所述代码块相似度K为:
Figure SMS_17
其中,
Figure SMS_18
表示待测目标文件生成的代码块个数,/>
Figure SMS_19
为所述列表中任一候选源代码的代码块个数,/>
Figure SMS_20
表示待测目标文件与所述候选源代码的代码块重合行数,表达式为:
Figure SMS_21
按照本发明的另一方面,提供了一种基于图片相似度的代码克隆检测系统,用于执行如第一方面任一项所述的基于图片相似度的代码克隆检测方法,包括:
倒排索引字典构建模块,用于构建源代码集的倒排索引字典,所述倒排索引字典的键为每个源代码块的哈希值,值为源代码的文件名;
粗粒度过滤结果计算模块,用于计算待测目标文件的代码块哈希值,并以每个代码块的哈希值为键在所述倒排索引字典中搜索,得到对应的源代码的文件名列表;
细粒度过滤结果计算模块,用于计算待测目标文件与所述列表中每个源代码的代码块相似度K,若
Figure SMS_22
,则判断待测目标文件与对应的源代码不存在克隆关系;若/>
Figure SMS_23
,则判断待测目标文件与对应的源代码存在克隆关系;其中,/>
Figure SMS_24
为设定的第一克隆过滤阈值,/>
Figure SMS_25
为设定的第二克隆过滤阈值;
克隆检测模块,用于提取
Figure SMS_26
对应的源代码以及待测目标文件的语义特征矩阵,并分别转换为对应的图片,分别计算待测目标文件与每个所述源代码对应的图片相似度,得到克隆检测结果。
按照本发明的另一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如第一方面任一项所述的方法。
总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
(1)本发明的方法通过构建源代码集的倒排索引字典,在倒排索引字典搜索与待测目标文件存在一定相似性的代码集合作为粗粒度过滤的结果,实现在大规模源代码集中快速过滤非克隆代码;基于该粗粒度过滤的结果,再次过滤掉与目标文件明显不存在克隆关系或者明显存在克隆关系的源代码,得到细粒度过滤的结果,以减少后续语义特征矩阵提取的样本量,降低相似度匹配的时间开销,通过将克隆检测问题转换为图片相似度比较问题,基于图片的相似性得到克隆检测结果,从而达到语义克隆检测的效果,也即本发明能够降低匹配的时间开销,同时兼顾了大规模和语义克隆检测。
(2)进一步地,本发明的方法通过将代码转换为抽象语法树,再将抽象语法树转换为语义特征矩阵,通过抽取抽象语法树的边信息构造一个包含树结构信息的树表征矩阵(也即语义特征矩阵),将两个复杂的抽象语法树匹配算法转换为N×N的二维矩阵,再将其转换为图片进行比较,而不必直接进行语法树之间的匹配,避免了抽象语法树匹配算法的时间长及空间复杂度高的问题,进一步降低了匹配的时间开销。
(3)作为优选,由于抽象语法树的令牌节点均为叶子节点,树形结构中叶子节点之间不存在边,也即两个叶子节点之间边的数量为0,因此,删除语义特征矩阵中表示两个叶子节点之间边的数量的元素,以压缩语义特征矩阵的大小,降低计算量,进一步减小检测的时间开销。
(4)作为优选,通过以每个源代码块的哈希值为键,以源代码的文件名为值构建倒排索引字典,只要确定了代码的哈希值就可以确定该哈希值对应的多个源代码文件,可以使构建的字典尽可能的小,便于实现快速索引。
(5)作为优选,在构建倒排索引字典之前,通过对每个源代码进行代码令牌规范化,可以增强本方法对Type-2类型克隆检测的鲁棒性。
(6)本发明的方法与源代码的语言类型无关,适用于任意开发语言,通用性强;且本发明的方法不需要代码编译,检测范围广泛。
附图说明
图1为本发明提供的基于图片相似度的代码克隆检测方法示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
如图1所示,本发明的基于图片相似度的代码克隆检测方法,主要包括如下步骤:
S1、构建源代码集的倒排索引字典,该倒排索引字典的键为每个源代码块的哈希值,倒排索引字典的值为源代码的文件名。
S2、计算待测目标文件的代码块哈希值,并以每个代码块的哈希值为键在倒排索引字典中进行搜索,得到对应的值,也即得到对应的源代码的文件名列表;该源代码的文件名列表作为粗粒度过滤的结果,被认为是与待测目标文件存在一定相似性的代码集合;源代码集中除该源代码的文件名列表外的其余源代码被认为是与待测目标文件明显不存在克隆关系。
S3、计算待测目标文件与S2中得到的源代码的文件名列表中每个源代码的代码块相似度K,若计算得到的代码块相似度K低于设定的第一克隆过滤阈值
Figure SMS_27
,则判断目标文件与对应的源代码不存在克隆关系;若计算得到的代码块相似度K高于设定的第二克隆过滤阈值/>
Figure SMS_28
,则判断目标文件与对应的源代码存在克隆关系;其中,计算得到的代码块相似度K在大于第一克隆过滤阈值/>
Figure SMS_29
且小于第二克隆过滤阈值/>
Figure SMS_30
的源代码文件名列表作为细粒度过滤的结果;其中,/>
Figure SMS_31
和/>
Figure SMS_32
根据经验选择。
S4、将S3中计算得到的代码块相似度K在大于第一克隆过滤阈值
Figure SMS_33
且小于第二克隆过滤阈值/>
Figure SMS_34
的源代码文件名列表中的每个源代码文件分别进行语义特征矩阵提取后,再分别对应转换为图片,以及将目标文件进行语义特征矩阵提取后,再转换为图片,分别计算目标文件与每个源代码文件转换的图片之间的图片相似度,得到克隆检测结果,也即在
Figure SMS_35
对应的每个源代码与待测目标文件之间是否有存在克隆关系。
具体地,S1中,构建源代码集的倒排索引字典包括:
S11、将每个源代码的每n行拼接为一个字符串,则每个源代码生成的代码块个数为:M-n+1,其中,M表示源代码的行数,不同的源代码对应的行数可能不同;
S12、计算每个代码块的哈希值,并以每个哈希值作为键,对应的源代码的文件名为值,构建源代码集的倒排索引字典。
作为优选,在S11之前,还包括S10:对每个源代码进行代码令牌规范化;具体地,提取源代码集中每个源代码的抽象语法树,并对抽象语法树中的变量名类型节点的代码令牌进行规范化,可以增强本方法对Type-2类型克隆检测的鲁棒性,具体为将变量名不同的同类型变量的变量名用统一的变量名代替,实现源代码集的代码令牌规范化。
具体地,S2中,计算待测目标文件的代码块哈希值包括:
将待测目标文件进行代码令牌规范化后,按照每n行拼接为一个字符串,并计算待测目标文件生成的代码块个数;然后计算每个代码块的哈希值。
具体地,S3中,假定目标文件为C1,生成的代码块个数为
Figure SMS_36
;S2中得到的源代码的文件名列表中的任一个候选代码为C2,生成的代码块个数为/>
Figure SMS_37
,则待测目标文件与S2中得到的源代码的文件名列表中每个源代码的代码块相似度K为:
Figure SMS_38
Figure SMS_39
Figure SMS_40
表示C1和C2的代码块的交集,也即重合行数。
具体地,S4中,提取
Figure SMS_41
对应的每个源代码以及待测目标文件的语义特征矩阵,并分别转换为对应的图片包括:
S41、将待测目标文件以及
Figure SMS_42
对应的每个源代码转换为抽象语法树;
S42、将抽象语法树转换为N×N的语义特征矩阵,其中,语义特征矩阵中的
Figure SMS_43
元素表示抽象语法树中节点/>
Figure SMS_44
指向节点/>
Figure SMS_45
的边的条数,也即语义特征矩阵中的元素表示抽象语法树中两个节点之间的边的数量;/>
Figure SMS_46
和/>
Figure SMS_47
取值分别为0,1,……,N-1,N为抽象语法树的节点的总数,包括类型节点的数量和令牌节点的数量。在本发明实施例中,包括53种类型节点以及14种令牌节点。
S43、将语义特征矩阵归一化后转换为对应的图片。其中,归一化方式为:
Figure SMS_48
其中,
Figure SMS_49
表示归一化之前的语义特征矩阵,/>
Figure SMS_50
表示归一化之后的语义特征矩阵。
由于生成的语义特征矩阵为二维矩阵,将该矩阵转换为灰度图,也即代码的抽象语法树被转换成为一张灰度图片。
本发明实施例中,通过均方误差MSE算法计算两张图片的距离以衡量图片的相似度,也即待测目标文件转换后的图片与
Figure SMS_51
对应的每个源代码转换后的图片的相似度。若两张图片的均方误差值MSE值大于图片距离阈值/>
Figure SMS_52
,则判定待测目标文件与相应的源代码为非克隆代码对,否则为克隆代码对。
作为优选,由于令牌节点均为叶子节点,树形结构中叶子节点之间不存在边,也即两个叶子节点之间边的数量为0,因此,可以删除语义特征矩阵中表示两个叶子节点之间边的数量的元素,以压缩语义特征矩阵的大小,进一步降低计算量,以减小检测开销;本发明实施例中,67×67的语义特征矩阵可以压缩为53×67的矩阵。
本发明的方法通过构建源代码集的倒排索引字典,在倒排索引字典搜索与待测目标文件存在一定相似性的代码集合作为粗粒度过滤的结果,实现在大规模源代码集中快速过滤非克隆代码的效果;基于该粗粒度过滤的结果,再次过滤掉与目标文件明显不存在克隆关系的源代码以及与目标文件明显存在克隆关系的源代码,得到细粒度过滤的结果,以减少后续语义特征矩阵提取的样本量,降低相似度匹配的时间开销,通过将克隆检测问题转换为图片相似度比较问题,基于图片的相似性输出克隆检测结果,从而达到语义克隆检测的效果,从而达到大规模和语义克隆检测的目的。
进一步地,本发明的方法通过将代码转换为抽象语法树,再将抽象语法树转换为语义特征矩阵,通过抽取抽象语法树的边信息构造一个包含树结构信息的树表征矩阵(也即语义特征矩阵),将两个复杂的抽象语法树匹配算法转换为N×N的二维矩阵,再将其转换为图片进行比较,而不必直接进行语法树之间的匹配,避免了抽象语法树匹配算法的时间长及空间复杂度高的问题,进一步降低了匹配的时间开销。
按照本发明的另一方面,还提供了一种基于图片相似度的代码克隆检测系统,包括:
倒排索引字典构建模块,用于构建源代码集的倒排索引字典,倒排索引字典的键为每个源代码块的哈希值,值为源代码的文件名;
粗粒度过滤结果计算模块,用于计算待测目标文件的代码块哈希值,并以每个代码块的哈希值为键在倒排索引字典中搜索,得到对应的源代码的文件名列表;
细粒度过滤结果计算模块,用于计算待测目标文件与列表中每个源代码的代码块相似度K,若
Figure SMS_53
,则判断待测目标文件与对应的源代码不存在克隆关系;若/>
Figure SMS_54
,则判断待测目标文件与对应的源代码存在克隆关系;其中,/>
Figure SMS_55
为设定的第一克隆过滤阈值,
Figure SMS_56
为设定的第二克隆过滤阈值;
克隆检测模块,用于提取
Figure SMS_57
对应的源代码以及待测目标文件的语义特征矩阵,并分别转换为对应的图片,分别计算待测目标文件与每个源代码对应的图片相似度,得到克隆检测结果。
上述的每个模块用于执行实施例中的基于图片相似度的代码克隆检测方法的对应步骤。
按照本发明的另一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,程序被处理器执行时实现如实施例中的基于图片相似度的代码克隆检测方法。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种基于图片相似度的代码克隆检测方法,其特征在于,包括:
S1、构建源代码集的倒排索引字典,所述倒排索引字典的键为每个源代码块的哈希值,值为源代码的文件名;
S2、计算待测目标文件的代码块哈希值,并以每个代码块的哈希值为键在所述倒排索引字典中搜索,得到对应的源代码的文件名列表;
S3、计算待测目标文件与所述列表中每个源代码的代码块相似度K,若
Figure QLYQS_1
,则判断待测目标文件与对应的源代码不存在克隆关系;若/>
Figure QLYQS_2
,则判断待测目标文件与对应的源代码存在克隆关系;其中,/>
Figure QLYQS_3
为设定的第一克隆过滤阈值,/>
Figure QLYQS_4
为设定的第二克隆过滤阈值;
S4、提取
Figure QLYQS_5
对应的源代码以及待测目标文件的语义特征矩阵,并分别转换为对应的图片,分别计算待测目标文件与每个所述源代码对应的图片相似度,得到克隆检测结果。
2.根据权利要求1所述的方法,其特征在于,S4中,提取
Figure QLYQS_6
对应的源代码以及待测目标文件的语义特征矩阵,并分别转换为对应的图片包括:
S41、将待测目标文件以及
Figure QLYQS_7
对应的源代码转换为抽象语法树;
S42、将所述抽象语法树转换为N×N的语义特征矩阵,其中,所述语义特征矩阵中的
Figure QLYQS_8
元素表示所述抽象语法树中节点/>
Figure QLYQS_9
指向节点/>
Figure QLYQS_10
的边的条数,/>
Figure QLYQS_11
和/>
Figure QLYQS_12
取值分别为0,1,……,N-1,N为所述抽象语法树节点的总数;
S43、将所述语义特征矩阵转换为对应的图片。
3.根据权利要求2所述的方法,其特征在于,S43中,将所述语义特征矩阵转换为对应的图片之前,还包括:删除所述语义特征矩阵中表示两个叶子节点之间边的条数的元素。
4.根据权利要求2或3所述的方法,其特征在于,S43中,将所述语义特征矩阵转换为对应的图片之前,还包括:将所述语义特征矩阵进行归一化;所述归一化公式为:
Figure QLYQS_13
其中,
Figure QLYQS_14
表示归一化之前的语义特征矩阵,/>
Figure QLYQS_15
表示归一化之后的语义特征矩阵。
5.根据权利要求1所述的方法,其特征在于,S4中,分别计算待测目标文件与每个所述源代码对应的图片相似度,得到克隆检测结果,包括:
分别计算待测目标文件与每个所述源代码对应的图片的均方误差值;
若所述均方误差值大于设定的图片距离阈值
Figure QLYQS_16
,则判定待测目标文件与相应的源代码为非克隆代码对,否则为克隆代码对。
6.根据权利要求1所述的方法,其特征在于,S1中,构建源代码集的倒排索引字典包括:
S11、将源代码的每n行拼接为一个字符串,则每个源代码生成的代码块个数为:M-n+1,其中,M表示源代码的行数;
S12、计算每个代码块的哈希值,并以所述哈希值为键,对应的源代码的文件名为值,构建所述倒排索引字典。
7.根据权利要求6所述的方法,其特征在于,在S11之前,还包括步骤:
提取每个源代码的抽象语法树,并对所述抽象语法树中的变量名类型节点的代码令牌进行规范化;所述规范化包括将同类型变量的变量名用统一的变量名代替。
8.根据权利要求1所述的方法,其特征在于,S3中,所述代码块相似度K为:
Figure QLYQS_17
其中,
Figure QLYQS_18
表示待测目标文件生成的代码块个数,/>
Figure QLYQS_19
为所述列表中任一候选源代码的代码块个数,/>
Figure QLYQS_20
表示待测目标文件与所述候选源代码的代码块重合行数,表达式为:
Figure QLYQS_21
9.一种基于图片相似度的代码克隆检测系统,其特征在于,用于执行如权利要求1-8任一项所述的基于图片相似度的代码克隆检测方法,包括:
倒排索引字典构建模块,用于构建源代码集的倒排索引字典,所述倒排索引字典的键为每个源代码块的哈希值,值为源代码的文件名;
粗粒度过滤结果计算模块,用于计算待测目标文件的代码块哈希值,并以每个代码块的哈希值为键在所述倒排索引字典中搜索,得到对应的源代码的文件名列表;
细粒度过滤结果计算模块,用于计算待测目标文件与所述列表中每个源代码的代码块相似度K,若
Figure QLYQS_22
,则判断待测目标文件与对应的源代码不存在克隆关系;若/>
Figure QLYQS_23
,则判断待测目标文件与对应的源代码存在克隆关系;其中,/>
Figure QLYQS_24
为设定的第一克隆过滤阈值,
Figure QLYQS_25
为设定的第二克隆过滤阈值;
克隆检测模块,用于提取
Figure QLYQS_26
对应的源代码以及待测目标文件的语义特征矩阵,并分别转换为对应的图片,分别计算待测目标文件与每个所述源代码对应的图片相似度,得到克隆检测结果。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-8任一项所述的方法。
CN202310583348.7A 2023-05-23 2023-05-23 基于图片相似度的代码克隆检测方法、系统及存储介质 Active CN116302089B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310583348.7A CN116302089B (zh) 2023-05-23 2023-05-23 基于图片相似度的代码克隆检测方法、系统及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310583348.7A CN116302089B (zh) 2023-05-23 2023-05-23 基于图片相似度的代码克隆检测方法、系统及存储介质

Publications (2)

Publication Number Publication Date
CN116302089A true CN116302089A (zh) 2023-06-23
CN116302089B CN116302089B (zh) 2023-08-18

Family

ID=86817185

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310583348.7A Active CN116302089B (zh) 2023-05-23 2023-05-23 基于图片相似度的代码克隆检测方法、系统及存储介质

Country Status (1)

Country Link
CN (1) CN116302089B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117435246A (zh) * 2023-12-14 2024-01-23 四川大学 一种基于马尔可夫链模型的代码克隆检测方法

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110246968A1 (en) * 2010-04-01 2011-10-06 Microsoft Corporation Code-Clone Detection and Analysis
WO2012079230A1 (en) * 2010-12-15 2012-06-21 Microsoft Corporation Intelligent code differencing using code clone detection
JP2013257639A (ja) * 2012-06-11 2013-12-26 Ntt Data Corp 構文解析を用いたソースコードの差分抽出方法およびシステム
CN103988176A (zh) * 2011-12-12 2014-08-13 株式会社日立制作所 软件分析程序和软件分析系统
CN106294139A (zh) * 2016-08-02 2017-01-04 上海理工大学 一种软件代码中重复片段的检测提取方法
CN112381280A (zh) * 2020-11-06 2021-02-19 北京航空航天大学 一种基于人工智能的算法预测方法
CN113626075A (zh) * 2020-05-09 2021-11-09 北京奇虎科技有限公司 相似代码检测方法、装置、设备和计算机存储介质
CN114816519A (zh) * 2022-04-26 2022-07-29 南京航空航天大学 基于抽象语法树及令牌的代码克隆检测的方法及应用
CN115309451A (zh) * 2022-06-28 2022-11-08 腾讯科技(深圳)有限公司 代码克隆检测方法、装置、设备、存储介质及程序产品
CN115373737A (zh) * 2022-07-06 2022-11-22 云南恒于科技有限公司 一种基于特征融合的代码克隆检测方法
CN115964080A (zh) * 2023-01-28 2023-04-14 华南农业大学 基于可视化图像的代码克隆检测方法、系统、设备及介质
US20230153085A1 (en) * 2021-11-15 2023-05-18 Jpmorgan Chase Bank, N.A. Systems and methods for source code understanding using spatial representations

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110246968A1 (en) * 2010-04-01 2011-10-06 Microsoft Corporation Code-Clone Detection and Analysis
WO2012079230A1 (en) * 2010-12-15 2012-06-21 Microsoft Corporation Intelligent code differencing using code clone detection
CN103988176A (zh) * 2011-12-12 2014-08-13 株式会社日立制作所 软件分析程序和软件分析系统
US20140331202A1 (en) * 2011-12-12 2014-11-06 Hitachi, Ltd. Software Analysis Program and Software Analysis System
JP2013257639A (ja) * 2012-06-11 2013-12-26 Ntt Data Corp 構文解析を用いたソースコードの差分抽出方法およびシステム
CN106294139A (zh) * 2016-08-02 2017-01-04 上海理工大学 一种软件代码中重复片段的检测提取方法
CN113626075A (zh) * 2020-05-09 2021-11-09 北京奇虎科技有限公司 相似代码检测方法、装置、设备和计算机存储介质
CN112381280A (zh) * 2020-11-06 2021-02-19 北京航空航天大学 一种基于人工智能的算法预测方法
US20230153085A1 (en) * 2021-11-15 2023-05-18 Jpmorgan Chase Bank, N.A. Systems and methods for source code understanding using spatial representations
CN114816519A (zh) * 2022-04-26 2022-07-29 南京航空航天大学 基于抽象语法树及令牌的代码克隆检测的方法及应用
CN115309451A (zh) * 2022-06-28 2022-11-08 腾讯科技(深圳)有限公司 代码克隆检测方法、装置、设备、存储介质及程序产品
CN115373737A (zh) * 2022-07-06 2022-11-22 云南恒于科技有限公司 一种基于特征融合的代码克隆检测方法
CN115964080A (zh) * 2023-01-28 2023-04-14 华南农业大学 基于可视化图像的代码克隆检测方法、系统、设备及介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
YAFANG WANG等: "Image-Based Clone Code Detection and Visualization", 《2019 INTERNATIONAL CONFERENCE ON ARTIFICIAL INTELLIGENCE AND ADVANCED MANUFACTURING (AIAM)》 *
YUEMING WU等: "VulCNN: an image-inspired scalable vulnerability detection system", 《ICSE \'22: PROCEEDINGS OF THE 44TH INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117435246A (zh) * 2023-12-14 2024-01-23 四川大学 一种基于马尔可夫链模型的代码克隆检测方法
CN117435246B (zh) * 2023-12-14 2024-03-05 四川大学 一种基于马尔可夫链模型的代码克隆检测方法

Also Published As

Publication number Publication date
CN116302089B (zh) 2023-08-18

Similar Documents

Publication Publication Date Title
WO2021088385A1 (zh) 一种在线日志解析方法、系统及其电子终端设备
CN109445834B (zh) 基于抽象语法树的程序代码相似性快速比较方法
US10671586B2 (en) Optimal sort key compression and index rebuilding
CN107797916B (zh) Ddl语句审核方法和装置
CN116302089B (zh) 基于图片相似度的代码克隆检测方法、系统及存储介质
CN113656807A (zh) 一种漏洞管理方法、装置、设备及存储介质
CN111339297A (zh) 网络资产异常检测方法、系统、介质和设备
CN115357904B (zh) 一种基于程序切片和图神经网络的多类漏洞检测方法
CN113779272A (zh) 基于知识图谱的数据处理方法、装置、设备及存储介质
CN113987190B (zh) 一种数据质量校验规则提取方法及系统
US20230418578A1 (en) Systems and methods for detection of code clones
CN111562920A (zh) 小程序代码相似度确定方法、装置、服务器及存储介质
CN111881300A (zh) 面向第三方库依赖的知识图谱构建方法及系统
CN117453646A (zh) 融合语义与深度神经网络的内核日志联合压缩与查询方法
CN112612810A (zh) 慢sql语句识别方法及系统
CN115048913B (zh) 一种命令处理方法、装置和电子设备
Zhang et al. A program plagiarism detection model based on information distance and clustering
CA3144052A1 (en) Method and apparatus for recognizing new sql statements in database audit systems
CN118312524B (zh) 表召回方法、装置、电子设备及介质
CN118157970B (zh) 一种基于编辑距离的suricata规则相似度计算方法
CN117435246B (zh) 一种基于马尔可夫链模型的代码克隆检测方法
CN117792801B (zh) 一种基于多元事件分析的网络安全威胁识别方法及系统
JP6783741B2 (ja) 距離測定装置、通信システム、作成装置及び距離測定プログラム
CN115168399B (zh) 基于图形化界面的数据处理方法、装置、设备及存储介质
CN113064597B (zh) 一种冗余代码的识别方法、装置和设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant