CN105975392A - 一种基于抽象语法树的重复代码检测方法及装置 - Google Patents
一种基于抽象语法树的重复代码检测方法及装置 Download PDFInfo
- Publication number
- CN105975392A CN105975392A CN201610282319.7A CN201610282319A CN105975392A CN 105975392 A CN105975392 A CN 105975392A CN 201610282319 A CN201610282319 A CN 201610282319A CN 105975392 A CN105975392 A CN 105975392A
- Authority
- CN
- China
- Prior art keywords
- subtree
- abstract syntax
- syntax tree
- code
- tree
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3616—Software analysis for verifying properties of programs using software metrics
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Machine Translation (AREA)
Abstract
本发明公开了一种基于抽象语法树的重复代码检测方法及装置。该重复代码检测方法包括:对待检测代码和样本代码分别构建抽象语法树;将两棵抽象语法树的子树根据根节点类型分别进行分类;将根节点类型相同的两棵抽象语法树的子树进行对比,判断是否存在公共子树;当存在公共子树时,获取公共子树对应的代码,判定该代码即为重复代码。通过本发明的方法可以完全避免空格、换行、缩进、注释等无关信息对相似性判定的影响,快速检测出重复代码。
Description
技术领域
本发明涉及软件应用技术领域,尤其涉及一种基于抽象语法树的重复代码检测方法及装置。
背景技术
在一个大的软件***中添加新功能或者做维护时,在程序中引入重复代码是非常普遍的。因为在这样的情况下,开发人员对代码的结构不是很熟悉,为了减少在程序中引入新的BUG,通常通过拷贝的形式,把实现类似功能的代码段稍作修改,甚至原封不动地进行复制,通过代码的复用来满足当前的***设计需求。
代码复用导致最终的软件产品中存在很多相似的代码片段(称为“重复代码”)。有研究显示,典型的软件***包括多达7%到23%的重复代码。在软件的维护和演化过程中,重复代码往往带来一些负面影响:例如,如果一个代码片段出现缺陷,那么需要检查所有相似的重复代码片段,以防止相同缺陷的出现,这就势必为维护增加了额外的工作量。重复代码的存在对于后续***维护是非常大的隐患。此外,在程序理解、代码质量分析、代码压缩(如移动应用中)、恶意代码检测等常见场景中,也都需要识别和抽取软件代码中的若干相似片段。
然而代码中经常存在空格、换行、缩进、注释等无关信息,这些信息在不同的场景中可能有非常大的区别,例如,一段代码有时出于可读性的原因会增加大量的缩进、空白与注释,但有时为了节省空间而会删除所有的空白与注释。而空白与注释等无关信息,致使重复代码检测的准确性不高。
基于上述可知,如何避免无关信息的干扰,实现程序中重复代码的快速检测,属于目前软件应用领域亟需解决的一大技术问题。
发明内容
为了解决重复代码检测过程中,空白和注释等无关信息降低检测准确性的问题,本发明提供一种基于抽象语法树的重复代码检测方法及装置。
为实现上述发明目的,本发明采用下述的技术方案:
依据本发明的一个方面,提供一种基于抽象语法树的重复代码检测方法,包括:
对待检测代码和样本代码分别构建抽象语法树;
将两棵抽象语法树的子树根据根节点类型分别进行分类;
将根节点类型相同的所述两棵抽象语法树的子树进行对比,判断是否存在公共子树;
当存在公共子树时,获取所述公共子树对应的代码,判定所述代码为重复代码。
进一步地,所述将两棵抽象语法树的子树根据根节点类型分别进行分类,包括;
获取所述两个抽象语法树的所有子树的节点数;
判断每棵子树的节点数与预设数量阈值的大小:当某棵子树的节点数大于预设阈值时,则将该子树放入对应的根节点类型集合中;否则,不对该子树进行分类。
进一步地,所述将根节点类型相同的所述两棵抽象语法树的子树进行对比,判断是否存在公共子树,包括:
获取待对比的两棵子树中的相同节点的节点数;
计算所述节点数占所述两棵子树所有节点和的比值;
当所述比值大于预设比例阈值时,则判定所述两棵子树为一对公共子树。
进一步地,所述将根节点类型相同的所述两棵抽象语法树的子树进行对比前,包括:
判断是否需要忽略低语义信息;其中,所述低语义信息包括字符串值、变量值、变量名以及变量顺序中的任一种或多种;
当需要时,则利用统一标识对所述两棵抽象语法树中的低语义信息进行替换。
进一步地,所述方法还包括:
当所述两棵抽象语法树中存在多对公共子树时,判断所述多对公共子树中位于同一棵抽象语法树的多棵子树间是否存在包含关系;
若存在,则选取集合最大的一棵子树作为该棵抽象语法树的公共子树。
依据本发明的另一方面,提供一种基于抽象语法树的重复代码检测装置,包括:
构建单元,用于对待检测代码和样本代码分别构建抽象语法树;
分类单元,用于将两棵抽象语法树的子树根据根节点类型分别进行分类;
判断单元,用于将根节点类型相同的所述两棵抽象语法树的子树进行对比,判断是否存在公共子树;
获取单元,用于当存在公共子树时,获取所述公共子树对应的代码,判定所述代码即为重复代码。
进一步地,所述分类单元具体用于;
获取所述两个抽象语法树的所有子树的节点数;
判断每棵子树的节点数与预设数量阈值的大小:当某棵子树的节点数大于预设阈值时,则将该所述子树放入对应的根节点类型集合中;否则,不对该子树进行分类。
进一步地,所述判断单元具体用于:
获取待对比的两棵子树中的相同节点的节点数;
计算所述节点数占所述两棵子树所有节点和的比值;
当所述比值大于预设比例阈值时,则判定所述两棵子树为一对公共子树。
进一步地,所述装置还包括过滤单元,具体用于:
将根节点类型相同的所述两棵抽象语法树的子树进行对比前,判断是否需要过滤低语义信息;其中,所述低语义信息包括字符串值、变量值、变量名以及变量顺序中的任一种或多种;
当需要时,则利用统一标识对所述两棵抽象语法树中的低语义信息进行替换。
进一步地,所述装置还包括选取单元,具体用于:
当所述两棵抽象语法树中存在多对公共子树时,判断所述多对公共子树中位于同一棵抽象语法树的多棵子树间是否存在包含关系;
若存在,则选取集合最大的一棵子树作为该棵抽象语法树的公共子树。
本发明具有以下有益效果:
本发明实施例在语法层对样本代码和待检测代码分别构建抽象语法树,接着在将两棵抽象语法树中的子树进行分类,并根据根节点类型相同子树的判断两段代码是否相似。通过本发明的方法可以完全避免空格、换行、缩进、注释等无关信息对相似性判定的影响,快速检测出重复代码。同时,本发明还可根据需要调整参数信息,以便对字符串值、变量值、变量名等低语义价值信息在相似性的判定中进行恰当处理,适用于软件缺陷检查、程序理解、代码质量分析、代码重构等多种软件开发与维护场景。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中基于抽象语法树的重复代码检测方法的流程图;
图2为本发明实施例中Javascript代码构建的抽象语法树示意图;
图3为本发明实施例中Javascript代码构建的抽象语法树的代码示例图;
图4a为本发明实施例中未过滤变量顺序的抽象语法树示意图;
图4b为本发明实施例中过滤变量顺序的抽象语法树示意图;
图5为本发明实施例中检测重复代码的代码示例图;
图6为本发明实施例中基于抽象语法树的重复代码检测装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例中所提供的基于抽象语法树的重复代码检测方法,具体包括如下步骤:
步骤1,对待检测代码和样本代码分别构建抽象语法树;
步骤2,将两棵抽象语法树的子树根据根节点类型分别进行分类;
步骤3,将根节点类型相同的两棵抽象语法树的子树进行对比,判断是否存在公共子树;
步骤4,当存在公共子树时,获取公共子树对应的代码,判定该代码即为重复代码。
本发明实施例在语法层对样本代码和待检测代码分别构建抽象语法树,接着在将两棵抽象语法树中的子树进行分类,并根据两棵抽象语法树中根节点节点类型相同子树的判断两段代码是否相似,因此通过本发明的方法可以完全避免空格、换行、缩进、注释等无关信息对相似性判定的影响,快速检测出重复代码。
下面结合附图和具体实施例对本发明的技术内容进行详细说明。
步骤1,对待检测代码和样本代码分别构建抽象语法树。
一般而言,一段程序都是由一系列语句(Statement)构成的,而一条语句又分解为若干表达式(Expression)。例如,从语法上分析一条赋值语句“x=3+5”,首先执行算术表达式“3+5”,结果为“8”;然后通过赋值表达式“x=8”,将变量“x”赋值为“8”。将表达式的运算符作为树根(如上例中的“+”、“=”),参与运算的变量和常量(“x”、“3”、“5”等)作为树叶,就得到了表达式对应的抽象语法树;若干表达式对应的抽象语法树组成了一条语句对应的抽象语法树;而若干语句的抽象语法树就组成了整段程序的抽象语法树。参见图2和图3,一段Javascript程序的抽象语法树示例和代码示例。从抽象语法树的构建方法可以看到,代码中的空白、换行、缩进、注释等无关信息会被完全忽略,因此也不会影响后续的检测判定结果。
本发明实施例中仅对抽象语法树的创建进行简单介绍,其创建过程已属于本领域技术人员所熟知的技术,例如“廖兴等;基于Java语言的抽象语法树的创建与遍历;长沙大学学报;2004年04期”中有相关介绍,这里不再进行赘述。
步骤2,将两棵抽象语法树的子树根据根节点类型分别进行分类。
本发明实施例中构建好抽象语法树后,列举每棵抽象语法树的所有子树,在对子树进行分类前,首先对子树进行初步筛选,将子树规模(节点数)小于预设数量阈值的子树进行忽略。这样可以有效避免单叶子节点(节点数为1)和简单语句(例如赋值语句“x=y”对应的子树大小为3)等不必要的元素参与相似性比对。对子树的初步筛选在不影响最终相似度比对结果的同时可以有效降低整个检测过程的计算量。对子树完成初步筛选后,根据根节点的类型对子树进行分类。
步骤3,将根节点类型相同的两棵抽象语法树的子树进行对比,判断是否存在公共子树。
本发明实施例将程序代码转换为抽象语法树后,判定两段代码的相似性就等价于判断两棵抽象语法树的相似性。通过查找两棵抽象语法树的最大公共子树集合来进行相似性判定,即两棵树的相似性与其最大公共子树集合的大小呈正比。当两棵树完全一样时,最大公共子树等于原抽象语法树本身(集合最大);反之,当两棵树完全不相似时,就没有公共子树,最大公共子树集合为空。这样,不仅能对相似程度进行一定量化评价,还能计算出具体的相似代码片段。
在计算相似性之前,用户可以根据实际需要对低语义信息进行过滤。本发明实施例中提供4类参数,包括字符串值、变量值、变量名、变量顺序。用户可以选其中的任一种或者多种低语义信息进行过滤,不考虑其对相似性的影响。本发明实施例根据需要调整参数,以便低语义价值信息在相似性判定中进行恰当处理,非常适用于软件缺陷检查、程序理解、代码质量分析、代码重构等多种软件开发与维护场景。
具体地,图4a为本发明实施例中未过滤变量顺序的抽象语法树示意图,图4b为本发明实施例中过滤变量顺序的抽象语法树示意图。对于变量顺序,直接忽略即可。对于其他低语义信息,如果需要忽略,本发明实施例中利用统一的标志对抽象语法树上的相应信息进行替换,使其对公共子树判定没有影响。
然后,将根节点类型相同的子树进行两两匹配(如“变量声明语句”对应的子树只和其它同类子树进行匹配)。由于类型不同的子树一定对应不同的代码,因此本发明实施例中根据根节点类型对子树进行匹配,可以有效降低整个检测过程的计算量。
进一步地,本发明实施例中在比较两棵子树是否为一对公共子树时,具体包括如下步骤:
获取待对比的两棵子树中的相同节点的节点数(两棵子树的节点交集);
计算节点数占两棵抽象语法树所有节点和(两棵子树的节点并集)的比值;
当比值大于预设比例阈值时,则判定两棵子树为一对公共子树。
本发明实施例中,在求得公共子树后,还通过一次额外检查来保证只留下最大公共子树,即:当两棵抽象语法树中存在多对公共子树时,判断多对公共子树中位于同一棵抽象语法树的多棵子树间是否存在包含关系;若存在,则选取集合最大的一棵子树作为该棵抽象语法树的公共子树,具体的代码实现过程,可以参见图5。
最后,只需将找到的最大公共子树对应到原始代码,就得到了两段代码的相似片段集合,即重复代码。
参见图6,本发明实施例还提供了一种基于抽象语法树的重复代码检测装置,用于实现上述的重复代码检测方法,具体包括:
构建单元,用于对待检测代码和样本代码分别构建抽象语法树;
分类单元,用于将两棵抽象语法树的子树根据根节点类型分别进行分类;
判断单元,用于将根节点类型相同的两棵抽象语法树的子树进行对比,判断是否存在公共子树;
获取单元,用于当存在公共子树时,获取公共子树对应的代码,该代码即为重复代码。
进一步地,分类单元具体用于;
获取两个抽象语法树的所有子树的节点数;
判断每棵子树的节点数与预设数量阈值的大小:当某棵子树的节点数大于预设阈值时,则子树放入对应的根节点类型集合中;否则,不对子树进行分类。
进一步地,判断单元具体用于:
获取待对比的两棵子树中的相同节点的节点数;
计算节点数占两棵子树所有节点和的比值;
当比值大于预设比例阈值时,则判定两棵子树为一对公共子树。
进一步地,装置还包括过滤单元,具体用于:
将根节点类型相同的两棵抽象语法树的子树进行对比前,判断是否需要过滤低语义信息;其中,低语义信息包括字符串值、变量值、变量名以及变量顺序中的任一种或多种;
当需要时,则利用统一标识对两棵抽象语法树中的低语义信息进行替换。
进一步地,该检测装置还包括选取单元,具体用于:
当两棵抽象语法树中存在多对公共子树时,判断多对公共子树中位于同一棵抽象语法树的多棵子树间是否存在包含关系;
若存在,则选取集合最大的一棵子树作为该棵抽象语法树的公共子树。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。
虽然通过实施例描述了本申请,本领域的技术人员知道,本申请有许多变形和变化而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种基于抽象语法树的重复代码检测方法,其特征在于,包括:
对待检测代码和样本代码分别构建抽象语法树;
将两棵抽象语法树的子树根据根节点类型分别进行分类;
将根节点类型相同的所述两棵抽象语法树的子树进行对比,判断是否存在公共子树;
当存在公共子树时,获取所述公共子树对应的代码,判定所述代码为重复代码。
2.如权利要求1所述的方法,其特征在于,所述将两棵抽象语法树的子树根据根节点类型分别进行分类,包括;
获取所述两个抽象语法树的所有子树的节点数;
判断每棵子树的节点数与预设数量阈值的大小:当某棵子树的节点数大于预设阈值时,则将该子树放入对应的根节点类型集合中;否则,不对该子树进行分类。
3.如权利要求1所述的方法,其特征在于,所述将根节点类型相同的两棵抽象语法树的子树进行对比,判断是否存在公共子树,包括:
获取待对比的两棵子树中的相同节点的节点数;
计算所述节点数占所述两棵子树所有节点和的比值;
当所述比值大于预设比例阈值时,则判定所述两棵子树为一对公共子树。
4.如权利要求1所述的方法,其特征在于,所述将根节点类型相同的两棵抽象语法树的子树进行对比前,包括:
判断是否需要忽略低语义信息;其中,所述低语义信息包括字符串值、变量值、变量名以及变量顺序中的任一种或多种;
当需要时,则利用统一标识对所述两棵抽象语法树中的低语义信息进行替换。
5.如权利要求1所述的方法,其特征在于,所述方法还包括:
当所述两棵抽象语法树中存在多对公共子树时,判断所述多对公共子树中位于同一棵抽象语法树的多棵子树间是否存在包含关系;
若存在,则选取集合最大的一棵子树作为该棵抽象语法树的公共子树。
6.一种基于抽象语法树的重复代码检测装置,其特征在于,包括:
构建单元,用于对待检测代码和样本代码分别构建抽象语法树;
分类单元,用于将两棵抽象语法树的子树根据根节点类型分别进行分类;
判断单元,用于将根节点类型相同的所述两棵抽象语法树的子树进行对比,判断是否存在公共子树;
获取单元,用于当存在公共子树时,获取所述公共子树对应的代码,则判定所述代码即为重复代码。
7.如权利要求6所述的装置,其特征在于,所述分类单元具体用于;
获取所述两个抽象语法树的所有子树的节点数;
判断每棵子树的节点数与预设数量阈值的大小:当某棵子树的节点数大于预设阈值时,则将该子树放入对应的根节点类型集合中;否则,不对该子树进行分类。
8.如权利要求6所述的装置,其特征在于,所述判断单元具体用于:
获取待对比的两棵子树中的相同节点的节点数;
计算所述节点数占所述两棵子树所有节点和的比值;
当所述比值大于预设比例阈值时,则判定所述两棵子树为一对公共子树。
9.如权利要求6所述的装置,其特征在于,所述装置还包括过滤单元,具体用于:
将根节点类型相同的所述两棵抽象语法树的子树进行对比前,判断是否需要过滤低语义信息;其中,所述低语义信息包括字符串值、变量值、变量名以及变量顺序中的任一种或多种;
当需要时,则利用统一标识对所述两棵抽象语法树中的低语义信息进行替换。
10.如权利要求6所述的装置,其特征在于,所述装置还包括选取单元,具体用于:
当所述两棵抽象语法树中存在多对公共子树时,判断所述多对公共子树中位于同一棵抽象语法树的多棵子树间是否存在包含关系;
若存在,则选取集合最大的一棵子树作为该棵抽象语法树的公共子树。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610282319.7A CN105975392A (zh) | 2016-04-29 | 2016-04-29 | 一种基于抽象语法树的重复代码检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610282319.7A CN105975392A (zh) | 2016-04-29 | 2016-04-29 | 一种基于抽象语法树的重复代码检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105975392A true CN105975392A (zh) | 2016-09-28 |
Family
ID=56993511
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610282319.7A Pending CN105975392A (zh) | 2016-04-29 | 2016-04-29 | 一种基于抽象语法树的重复代码检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105975392A (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107220180A (zh) * | 2017-06-08 | 2017-09-29 | 电子科技大学 | 一种基于神经网络语言模型的代码分类方法 |
CN107273294A (zh) * | 2017-06-19 | 2017-10-20 | 电子科技大学 | 一种基于神经网络语言模型的重复代码检测方法 |
CN108279990A (zh) * | 2017-01-06 | 2018-07-13 | 阿里巴巴集团控股有限公司 | 一种***检查方法、装置及电子设备 |
CN108614695A (zh) * | 2016-12-06 | 2018-10-02 | 北京奇虎科技有限公司 | 快速定位安卓应用代码文件中的指定内容的方法和装置 |
CN109635569A (zh) * | 2018-12-10 | 2019-04-16 | 国家电网有限公司信息通信分公司 | 一种漏洞检测方法及装置 |
CN109816038A (zh) * | 2019-01-31 | 2019-05-28 | 广东工业大学 | 一种物联网固件程序分类方法及其装置 |
CN110347416A (zh) * | 2019-07-19 | 2019-10-18 | 网易(杭州)网络有限公司 | 脚本的更新方法和装置 |
CN110515838A (zh) * | 2019-07-31 | 2019-11-29 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 基于主题模型软件缺陷检测的方法和*** |
CN110688307A (zh) * | 2019-09-09 | 2020-01-14 | 平安普惠企业管理有限公司 | JavaScript代码检测方法、装置、设备和存储介质 |
CN111737107A (zh) * | 2020-05-15 | 2020-10-02 | 南京航空航天大学 | 一种基于异质信息网络的重复缺陷报告检测方法 |
CN113065322A (zh) * | 2021-04-06 | 2021-07-02 | 中山大学 | 一种代码段注释生成方法、***及可读存储介质 |
CN113312904A (zh) * | 2021-05-31 | 2021-08-27 | 南京航空航天大学 | 一种基于抽象语法树的代码片段推荐方法与*** |
CN113821448A (zh) * | 2021-11-22 | 2021-12-21 | 上海斗象信息科技有限公司 | 一种Webshell代码的检测方法及装置、可读存储介质 |
CN115129364A (zh) * | 2022-07-05 | 2022-09-30 | 四川大学 | 基于抽象语法树和图神经网络的指纹身份识别方法和*** |
CN115145633A (zh) * | 2022-07-25 | 2022-10-04 | 杭州师范大学 | 一种基于控制流图的代码错误自动检出方法 |
CN116432125A (zh) * | 2023-06-01 | 2023-07-14 | 中南大学 | 基于哈希算法的代码分类方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697121A (zh) * | 2009-10-26 | 2010-04-21 | 哈尔滨工业大学 | 一种基于程序源代码语义分析的代码相似度检测方法 |
US20140331203A1 (en) * | 2013-05-01 | 2014-11-06 | International Business Machines Corporation | Analysis of source code changes |
US20150082276A1 (en) * | 2013-09-18 | 2015-03-19 | Vmware, Inc. | Extensible code auto-fix framework based on xml query languages |
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
-
2016
- 2016-04-29 CN CN201610282319.7A patent/CN105975392A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697121A (zh) * | 2009-10-26 | 2010-04-21 | 哈尔滨工业大学 | 一种基于程序源代码语义分析的代码相似度检测方法 |
US20140331203A1 (en) * | 2013-05-01 | 2014-11-06 | International Business Machines Corporation | Analysis of source code changes |
US20150082276A1 (en) * | 2013-09-18 | 2015-03-19 | Vmware, Inc. | Extensible code auto-fix framework based on xml query languages |
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
Non-Patent Citations (2)
Title |
---|
IRA D.BAXTER等: "《IEEE Xplore Digital Library》", 6 April 2002 * |
李建松: ""基于抽象语法树的软件抄袭检测算法研究"", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108614695A (zh) * | 2016-12-06 | 2018-10-02 | 北京奇虎科技有限公司 | 快速定位安卓应用代码文件中的指定内容的方法和装置 |
CN108279990B (zh) * | 2017-01-06 | 2021-06-29 | 阿里巴巴集团控股有限公司 | 一种***检查方法、装置及电子设备 |
CN108279990A (zh) * | 2017-01-06 | 2018-07-13 | 阿里巴巴集团控股有限公司 | 一种***检查方法、装置及电子设备 |
CN107220180A (zh) * | 2017-06-08 | 2017-09-29 | 电子科技大学 | 一种基于神经网络语言模型的代码分类方法 |
CN107273294B (zh) * | 2017-06-19 | 2020-07-28 | 电子科技大学 | 一种基于神经网络语言模型的重复代码检测方法 |
CN107273294A (zh) * | 2017-06-19 | 2017-10-20 | 电子科技大学 | 一种基于神经网络语言模型的重复代码检测方法 |
CN109635569A (zh) * | 2018-12-10 | 2019-04-16 | 国家电网有限公司信息通信分公司 | 一种漏洞检测方法及装置 |
CN109816038A (zh) * | 2019-01-31 | 2019-05-28 | 广东工业大学 | 一种物联网固件程序分类方法及其装置 |
CN109816038B (zh) * | 2019-01-31 | 2022-07-29 | 广东工业大学 | 一种物联网固件程序分类方法及其装置 |
CN110347416A (zh) * | 2019-07-19 | 2019-10-18 | 网易(杭州)网络有限公司 | 脚本的更新方法和装置 |
CN110515838A (zh) * | 2019-07-31 | 2019-11-29 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 基于主题模型软件缺陷检测的方法和*** |
CN110688307A (zh) * | 2019-09-09 | 2020-01-14 | 平安普惠企业管理有限公司 | JavaScript代码检测方法、装置、设备和存储介质 |
CN110688307B (zh) * | 2019-09-09 | 2023-11-17 | 国信金宏信息咨询有限责任公司 | JavaScript代码检测方法、装置、设备和存储介质 |
CN111737107A (zh) * | 2020-05-15 | 2020-10-02 | 南京航空航天大学 | 一种基于异质信息网络的重复缺陷报告检测方法 |
CN111737107B (zh) * | 2020-05-15 | 2021-10-26 | 南京航空航天大学 | 一种基于异质信息网络的重复缺陷报告检测方法 |
CN113065322A (zh) * | 2021-04-06 | 2021-07-02 | 中山大学 | 一种代码段注释生成方法、***及可读存储介质 |
CN113312904A (zh) * | 2021-05-31 | 2021-08-27 | 南京航空航天大学 | 一种基于抽象语法树的代码片段推荐方法与*** |
CN113821448A (zh) * | 2021-11-22 | 2021-12-21 | 上海斗象信息科技有限公司 | 一种Webshell代码的检测方法及装置、可读存储介质 |
CN115129364A (zh) * | 2022-07-05 | 2022-09-30 | 四川大学 | 基于抽象语法树和图神经网络的指纹身份识别方法和*** |
CN115145633A (zh) * | 2022-07-25 | 2022-10-04 | 杭州师范大学 | 一种基于控制流图的代码错误自动检出方法 |
CN116432125A (zh) * | 2023-06-01 | 2023-07-14 | 中南大学 | 基于哈希算法的代码分类方法 |
CN116432125B (zh) * | 2023-06-01 | 2023-09-05 | 中南大学 | 基于哈希算法的代码分类方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105975392A (zh) | 一种基于抽象语法树的重复代码检测方法及装置 | |
CN103092761B (zh) | 基于差异信息文件识别和检查修改代码块的方法及装置 | |
CN105068925A (zh) | 软件安全缺陷发现*** | |
CN111459799A (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及*** | |
CN103177215A (zh) | 基于软件控制流特征的计算机恶意软件检测新方法 | |
CN106991325A (zh) | 一种软件漏洞的防护方法和装置 | |
Stephan et al. | Using mutation analysis for a model-clone detector comparison framework | |
Störrle | Effective and efficient model clone detection | |
CN104866764A (zh) | 一种基于对象引用图的Android手机恶意软件检测方法 | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测***、存储设备 | |
CN111722998A (zh) | 代码的质量控制方法、***、设备及存储介质 | |
Liu et al. | Automated pattern-directed refactoring for complex conditional statements | |
CN106096117B (zh) | 基于流量和可靠性的不确定图关键边评估方法 | |
CN108182142A (zh) | 测试资源整合方法、***及功能测试方法、*** | |
CN109389972B (zh) | 语义云功能的质量测试方法、装置、存储介质和设备 | |
Koch et al. | Static spreadsheet analysis | |
CN104932870B (zh) | 一种对虚幻脚本的数据处理方法,及装置 | |
Kusunoki et al. | How much do code repositories include peripheral modifications? | |
CN104794397A (zh) | 病毒检测方法和装置 | |
CN104317903A (zh) | 章节式文本的章节完整性的识别方法和装置 | |
Simpson | Changeset based developer communication to detect software failures | |
CN114610844A (zh) | 一种敏感信息检测方法、装置、存储介质及终端 | |
Sahu et al. | Computing dynamic slices of feature--oriented programs using execution trace file | |
Zoubi et al. | Study the impact of improving source code on software metrics | |
CN102662834B (zh) | 一种重构CoSy中间表示的缓冲区溢出检测方法 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160928 |