CN113778852A - 一种基于正则表达式的代码分析方法 - Google Patents

一种基于正则表达式的代码分析方法 Download PDF

Info

Publication number
CN113778852A
CN113778852A CN202110627060.6A CN202110627060A CN113778852A CN 113778852 A CN113778852 A CN 113778852A CN 202110627060 A CN202110627060 A CN 202110627060A CN 113778852 A CN113778852 A CN 113778852A
Authority
CN
China
Prior art keywords
program statements
abnormal program
regular expression
code
abnormal
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
CN202110627060.6A
Other languages
English (en)
Other versions
CN113778852B (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.)
Southwest University of Science and Technology
Original Assignee
Southwest 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 Southwest University of Science and Technology filed Critical Southwest University of Science and Technology
Priority to CN202110627060.6A priority Critical patent/CN113778852B/zh
Publication of CN113778852A publication Critical patent/CN113778852A/zh
Application granted granted Critical
Publication of CN113778852B publication Critical patent/CN113778852B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0775Content or structure details of the error report, e.g. specific table structure, specific error fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing
    • G06F16/334Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/36Creation of semantic tools, e.g. ontology or thesauri
    • G06F16/367Ontology
    • 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)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Machine Translation (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于正则表达式的代码分析方法,所述方法包括:获取代码更改文本,并对所述代码更改文本进行提取预处理,得到若干程序语句;将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句;根据若干所述异常程序语句,生成Github留言。本发明通过对所述代码更改文本进行提取预处理,能够实现逐行匹配每个错误模式,通过将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,能够对不完整的代码片段进行快速分析,无需编译和解析整个代码库。

Description

一种基于正则表达式的代码分析方法
技术领域
本发明涉及计算机技术领域,尤其涉及的是一种基于正则表达式的代码分析方法。
背景技术
在多人合作的软件开发中,开发者常需要对代码贡献者的提交进行审查以确保代码质量。人工审查代码是非常费时的,因为它要求开发者阅读贡献者更改的代码,检查是否有潜在的代码缺陷,并与贡献者交流需要作出的修改。但是现有自动代码审查(codereview)方法还存在如下问题:需要获取所有代码,并对所有代码进行编译来生成JAVA字节码,无法快速分析不完整的代码片段。
因此,现有技术还有待改进和发展。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种基于正则表达式的代码分析方法,旨在解决现有技术中自动代码审查(code review)方法需要获取所有代码,并对所有代码进行编译来生成JAVA字节码,无法快速分析不完整的代码片段的问题。
本发明解决问题所采用的技术方案如下:
第一方面,本发明实施例提供一种基于正则表达式的代码分析方法,其中,所述方法包括:
获取代码更改文本,并对所述代码更改文本进行提取预处理,得到若干程序语句;
将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句;
根据若干所述异常程序语句,生成Github留言,其中,所述Github留言包括代码引用和留言文本。
在一种实现方式中,其中,所述对所述代码更改文本进行提取预处理,得到若干程序语句包括:
提取所述代码更改文本的上下文对象和新增行对象;
对所述上下文对象和所述新增行对象进行更改和分割处理,得到若干程序语句。
在一种实现方式中,其中,所述将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句包括:
基于正则表达式规则,对若干所述程序语句进行语法引导匹配检测,得到若干第一异常程序语句;
基于正则表达式规则,对若干所述第一异常程序语句进行类型驱动匹配检测,得到若干第二异常程序语句;
对若干所述第二异常程序语句进行单词边界匹配检测,当若干所述第二异常程序语句中的单词包含边界时,则只对由所述单词组成的独立字符串进行匹配,得到若干第三异常程序语句;
对若干所述第三异常程序语句进行背景信息匹配检测,得到若干第四异常程序语句;
对若干所述第四异常程序语句进行编码运算符优先级匹配检测,当检测到若干所述第四异常程序语句中包含编码运算符时,基于预设的运算符优先级对若干所述第四异常程序语句进行检测,得到若干第五异常程序语句;
对若干所述第五异常程序语句进行反模式匹配检测,得到若干异常程序语句。
在一种实现方式中,其中,所述基于正则表达式规则,对若干所述程序语句进行语法引导匹配检测,得到若干第一异常程序语句包括:
获取签名信息,其中,所述签名信息用于表征程序语句中的代表类名、方法名、变量名、字段名、修饰词、JAVA关键词和操作符的信息;
将签名信息加入到正则表达式规则中,得到第一融合正则表达式规则;
对若干所述程序语句进行关键词匹配检测,当检测到若干所述程序语句中包含代表一个或若干错误模式的条件的关键词,则记录所述关键字所在行的源码信息、文件路径、行数、匹配模式名称、模式描述和优先级,得到若干关键词异常程序语句;
基于所述第一融合正则表达式规则,对若干所述关键词异常程序语句进行基于模式的匹配检测,得到若干第一异常程序语句。
在一种实现方式中,其中,所述基于正则表达式规则,对若干所述第一异常程序语句进行类型驱动匹配检测,得到第二异常程序语句包括:
获取数据类型信息,其中所述数据类型信息用于表征第一异常程序语句的类型信息;
将数据类型信息加入到正则表达式规则中,得到第二融合正则表达式规则;
基于所述第二融合正则表达式规则,对若干所述第一异常程序语句进行类型匹配检测;
当检测到若干所述第一异常程序语句中的类型信息模式错误时,则记录类型信息模式所在行的源码信息、文件路径、行数、匹配模式名称、模式描述、优先级,得到若干第二异常程序语句。
在一种实现方式中,其中,所述对若干所述第三异常程序语句进行背景信息匹配检测,得到若干第四异常程序语句包括:
基于预设的搜索策略,对若干所述第三异常程序语句进行背景信息匹配检测,当检测到若干所述第三异常程序语句中的背景信息存在安全隐患时,则只对存在安全隐患的若干所述第三异常程序语句进行检测,得到若干第四异常程序语句,其中,所述搜索策略包括在所有代码更改文本中搜索和在代码托管平台上搜索。
在一种实现方式中,其中,所述对若干所述第五异常程序语句进行反模式匹配检测,得到若干异常程序语句包括:
基于关键词过滤编码反模式,对若干所述第五异常程序语句进行匹配检测,当检测到若干所述第五异常程序语句中的关键词符合预设的命名规则时,对符合预设的命名规则的关键词进行检测,得到若干第六异常程序语句;
基于负向先行断言编码反模式,对若干所述第六异常程序语句进行匹配检测,得到若干异常程序语句。
在一种实现方式中,其中,所述根据若干所述异常程序语句,生成Github留言包括:
根据每一个所述异常程序语句,确定每一个所述异常程序语句对应的源码信息、文件路径、行数、匹配模式名称、模式描述和优先级;
将每一个所述异常程序语句对应的所述源码信息、所述文件路径、所述行数、所述匹配模式名称、所述模式描述、优先级输入至留言生成器,生成Github留言。
第二方面,本发明实施例还提供一种基于正则表达式的代码审查装置,其中,所述装置包括:
若干程序语句获取单元,用于获取代码更改文本,并对所述代码更改文本进行提取预处理,得到若干程序语句;
若干异常程序语句获取单元,用于将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句;其中,所述异常程序语句为包含错误信息的程序语句;
留言文本生成单元,用于根据若干所述异常程序语句,生成Github留言,其中,所述Github留言包括代码引用和留言文本。
第三方面,本发明实施例还提供一种智能终端,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于执行如上述任意一项所述的基于正则表达式的代码分析方法。
第四方面,本发明实施例还提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如上述中任意一项所述的基于正则表达式的代码分析方法。
本发明的有益效果:本发明实施例首先获取代码更改文本,并对所述代码更改文本进行提取预处理,得到若干程序语句;然后将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句;其中,所述异常程序语句为包含错误信息的程序语句;最后根据若干所述异常程序语句,生成Github留言,其中,所述Github留言包括代码引用和留言文本。可见,本发明实施例中通过对所述代码更改文本进行提取预处理,能够实现逐行匹配每个错误模式,通过将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,能够对不完整的代码片段进行快速分析,无需编译和解析整个代码库。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于正则表达式的代码分析方法流程示意图。
图2为本发明实施例提供的codegex工作流程。
图3为本发明实施例提供的OpenJDK中的一个Pull Request收到的反馈实例。
图4为本发明实施例提供的SpotBugs和Codegex的有效性对比图。
图5为本发明实施例提供的基于正则表达式的代码审查装置的原理框图。
图6为本发明实施例提供的智能终端的内部结构原理框图。
具体实施方式
本发明公开了基于正则表达式的代码分析方法,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当本发明称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
由于现有技术中,在自动代码审查(code review)领域,一种常见的做法是通过静态分析检查代码。但现有的工作有以下缺点:(1)一些开发者认为,运行像FindBugs这样的静态分析工具可能会导致生产力下降,因为这些工具需要很长的时间来运行;(2)它们更关注如何展示静态分析工具的输出,或使用微服务来将静态分析应用到大型代码库,而不是调整静态分析工具,以提高它们在代码审查领域的应用效果;(3)像FindBugs这样的静态分析工具是分析Java字节码的,这意味着要运行这些工具,还需要满足前提条件:获得所有的依赖关系以成功生成字节码。随着Github等基于拉取的网站的流行,静态分析工具还需要面对如何快速分析不完整的代码片段的问题,因为它们通常需要获取所有的代码进行编译来生成Java字节码。
其它自动代码审查的技术要么依靠深度学习来对代码变更和相应的审查留言进行建模,要么依靠代码审查员的推荐。尽管这些技术有可能被用来发现给定代码变更中的新问题,但它们更适合于对存在许多PRs(Pull Requests,改动的代码内容)和代码审查意见的成熟项目进行代码审查,如果用在代码片段中就会使得自动审查过程过于繁琐复杂。
为了解决现有技术的问题,本实施例提供了一种基于正则表达式的代码分析方法,通过对所述代码更改文本进行提取预处理,能够实现逐行匹配每个错误模式,通过将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,能够对不完整的代码片段进行快速分析,无需编译和解析整个代码库。具体实施时,首先首先获取代码更改文本,并对所述代码更改文本进行提取预处理,得到若干程序语句;然后将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句;其中,所述异常程序语句为包含错误信息的程序语句;最后根据若干所述异常程序语句,生成Github留言,其中,所述Github留言包括代码引用和留言文本。
示例性方法
本实施例提供一种基于正则表达式的代码分析方法,该方法可以应用于计算机的智能终端。具体如图1所示,所述方法包括:
步骤S100、获取代码更改文本,并对所述代码更改文本进行提取预处理,得到若干程序语句;
如图2所示的方法流程图中,在代码更改文本也即代码补丁,代码补丁是指对出现BUG的程序或者软件编制的代码小程序,以使得程序或者软件更加的完善。在本发明实施例中,会对每个代码补丁进行提取预处理,以得到若干程序语句。相应的,所述对所述代码更改文本进行提取预处理,得到若干程序语句包括如下步骤:
步骤S101、提取所述代码更改文本的上下文对象和新增行对象;
步骤S102、对所述上下文对象和所述新增行对象进行更改和分割处理,得到若干程序语句。
具体地,对于一个代码补丁(patches)而言,通常是对一段程序或者软件进行修正,修正的方式包括上下文对象(contexts)(也即是编程的全部环境)、新增行对象和被删除的行对象。上下文对象为一段代码的上段和下段内容。新增行对象(additions)是编写代码补丁的作者添加的新的行代码。而被删除的行对象(deletions)是编写代码补丁的作者删除的行代码,由于被删除的行代码在以后的代码版本中不存在,故在本实施例中可以忽略被删除的行对象。接着对所述上下文对象和所述新增行对象进行更改和分割处理,得到若干程序语句,例如:给定一个带有Unified diff格式的代码变更C的PR,Codegex会将C视为文本,并使用Java程序的终止符(即分号、“{”和“}”)来将文本分割成程序语句。由于大多数正则表达式库对单行匹配有较好的支持,这个预处理步骤使Codegex能够逐行匹配每个错误模式,而不是一次性匹配多行代码。
得到若干程序语句后,就可以执行如图1所示的如下步骤:S200、将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句;其中,所述异常程序语句为包含错误信息的程序语句;
具体地,对于从更改的内容中提取的语句(statements),基于正则的分析器通过缺陷模式检测(bug pattern detection),来检查语句中的问题。分析器面临的主要技术挑战是设计正则规则(regex rules),来表示从SpotBugs中选出的模式,而不是依靠现成的程序分析技术。为了解决这个问题,本发明使用了几种策略来确保错误检测的有效性。相应的,所述将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句包括如下步骤:
S201、基于正则表达式规则,对若干所述程序语句进行语法引导匹配检测,得到若干第一异常程序语句;
S202、基于正则表达式规则,对若干所述第一异常程序语句进行类型驱动匹配检测,得到若干第二异常程序语句;
S203、对若干所述第二异常程序语句进行单词边界匹配检测,当若干所述第二异常程序语句中的单词包含边界时,则只对由所述单词组成的独立字符串进行匹配,得到若干第三异常程序语句;
S204、对若干所述第三异常程序语句进行背景信息匹配检测,得到若干第四异常程序语句;
S205、对若干所述第四异常程序语句进行编码运算符优先级匹配检测,得到若干第五异常程序语句;
S206、对若干所述第五异常程序语句进行反模式匹配检测,得到若干异常程序语句。
在步骤S201中,所述基于正则表达式规则,对若干所述程序语句进行语法引导匹配检测(Type-driven matching),得到若干第一异常程序语句包括如下步骤:获取签名信息,其中,所述签名信息用于表征程序语句中的代表类名、方法名、变量名、字段名、修饰词、JAVA关键词和操作符的信息;将签名信息加入到正则表达式规则中,得到第一融合正则表达式规则;对若干所述程序语句进行关键词匹配检测,当检测到若干所述程序语句中包含代表一个或若干错误模式的条件的关键词,则记录所述关键字所在行的源码信息、文件路径、行数、匹配模式名称、模式描述和优先级,得到若干关键词异常程序语句;基于所述第一融合正则表达式规则,对若干所述关键词异常程序语句进行基于模式的匹配检测,得到若干第一异常程序语句。
具体地,在本发明对SpotBugs的模式调查中,SpotBugs中的大多数模式都使用类签名(3.65%)或方法签名(13.70%)的信息进行检测。先将签名信息加入到正则表达式规则中,得到第一融合正则表达式规则;如将签名信息加入到本发明的正则规则(regexrules)中,本发明使用了Java语法中的代表类/方法/变量/字段名的关键词、修饰词(如“静态”)、Java关键词(如“if”)和操作符(“&&”)用于检测。为了支持语法指导下的匹配,本发明使用分层分析方法,使用两个阶段检查每个模式。第一个模式为关键词匹配检测,对若干所述程序语句进行关键词匹配检测,当检测到若干所述程序语句中包含代表一个或若干错误模式的条件的关键词,则记录所述关键字所在行的源码信息、文件路径、行数、匹配模式名称、模式描述和优先级,得到若干关键词异常程序语句;关键词匹配是一种更快的分析,旨在过滤不匹配任何错误模式的语句。也就是说关键词匹配是检查一个程序语句是否包含代表一个错误模式或一组错误模式的条件的关键字。例如,在检查可序列化类的特殊字段名serialVersionUID是否被声明为静态(SE_NONSTATIC_SERIALVERSIONID)时,本发明使用关键字匹配来跳过不包含关键字“serialVersionUID”的语句。关键词匹配检测后,为了得到更加准确的匹配结果,基于所述第一融合正则表达式规则,对若干所述第二异常程序语句进行基于模式的匹配检测,得到若干第一异常程序语句。
在步骤S202中,所述基于正则表达式规则,对若干所述第一异常程序语句进行类型驱动匹配检测(Type-driven matching),得到第二异常程序语句包括如下步骤:获取数据类型信息,其中所述数据类型信息用于表征第一异常程序语句的类型信息;类型信息包括字节型、短整型、整型、长整型、单精度浮点型、双精度浮点型、布尔型、字符型;将类型信息加入到正则表达式规则中,得到第二融合正则表达式规则;基于所述第二融合正则表达式规则,对若干所述第一异常程序语句进行类型匹配检测;当检测到若干所述第一异常程序语句中的类型信息模式错误时,则记录类型信息模式所在行的源码信息、文件路径、行数、匹配模式名称、模式描述、优先级,得到若干第二异常程序语句。
在本实施例中,在本发明的调查中,约44.29%的模式都需要数据类型信息,尽管Codegex本质上是将代码修改视为纯文本来匹配,但本发明通过使用数据类型作为分析的关键词,来将类型信息纳入错误模式,也即将类型信息加入到正则表达式规则中,得到第二融合正则表达式规则;基于所述第二融合正则表达式规则,对若干所述第一异常程序语句进行类型匹配检测;当检测到若干所述第一异常程序语句中的类型信息模式错误时,则记录类型信息模式所在行的源码信息、文件路径、行数、匹配模式名称、模式描述、优先级,得到若干第二异常程序语句。例如,在检测模式RV_01_TO_INT中,当从0到1的随机值被强制转换为整数值时,会生成警告。本发明使用正则“\(\s*int\s*\)\s*(\w+)\.(?:random|nextDouble|nextFloat)\(\s*\)”来检测该模式,其中“\(\s*int\s*\)”用于检测强制类型转换。通过考虑数据类型信息,本发明可以确定地以最高优先级(与SpotBugs中使用的优先级相同)来报告这一模式。
在步骤S203中,本发明通过使用单词边界(word boundary)来按词匹配,从而优化正则表达式性能。在正则语法中,语句是由单词(word)组成,每个单词(word)由字母、数字或者下划线组成。边界的界定为由由字母和数字组成的字符序列或下划线字符(_)与任何其他字符之间的边缘。‘\b’会匹配一个单词(word)的边界。例如,词组“\bif\b”匹配独立的字符串“if”,但不匹配字符串“ifa”,因为它的“if”的右边没有单词的边界。由于源代码的文本通常是单词串,正则表达式规则Codegex限制每个错误模式按词搜索,这样它就能快速跳过不匹配的输入。
在步骤S204中,所述对若干所述第三异常程序语句进行背景信息匹配检测,得到若干第四异常程序语句包括如下步骤:基于预设的搜索策略,对若干所述第三异常程序语句进行背景信息匹配检测,当检测到若干所述第三异常程序语句中的背景信息存在安全隐患时,则只对存在安全隐患的若干所述第三异常程序语句进行检测,可以起到提高警告优先级或排除误报的作用,最终得到若干第四异常程序语句,其中,所述搜索策略包括在所有代码更改文本中搜索和在代码托管平台上搜索。
具体地,预设的搜索策略包括“diff”search(在所有的代码更改内搜索)和onlinesearch(在Github上搜索代码),Github是一个面向开源及私有软件项目的托管平台,Github留言就是在Github上留言。现有技术表明,SpotBugs中的一些错误模式需要更多的背景信息来确保准确的错误检测。故需要基于预设的搜索策略,对若干所述第三异常程序语句进行背景信息匹配检测,得到若干第四异常程序语句。实际中,Codegex使用了两种搜索策略,来增加分析的背景信息:diff搜索和在线搜索。当这些搜索策略成功地找到相关的分析上下文对象时,Codegex将调整给定错误模式的优先级,因为当给定更多的上下文对象时,对错误模式的确定概率提高。对于大多数已实现的错误模式,Codegex用一个正则表达式去匹配单行程序语句statements。当diff搜索策略在一个缺陷bug模式中被激活时,Codegex将通过搜索输入的更改的代码内容(也叫拉取请求)PR中的所有代码变化来使用语句statements周围的语境信息。例如模式UI_INHERITANCE_UNSAFE_GETRESOURCE检查this.getClass().getResource()的调用,因为如果调用该方法的类被另一个包中的一个类扩展,那么该方法的调用可能是不安全的。检测这种模式需要检查(1)程序语句中是否包含getClass().getResource()方法的调用(可以用regex来匹配),以及(2)该类是否被扩展(如果满足这个条件,SpotBugs会提高警告的优先级)。为了检查第二个条件,Codegex使用diff搜索策略在给定的更改的代码内容PR中的代码变化(“diff”)中搜索“extendsClassA”关键字(ClassA是调用getResource()方法的类的名称)。如果diff搜索失败,Codegex将使用在线搜索,对第二个条件进行进一步检查。具体来说,在线搜索使用GitHub搜索API来对给定PR的整个仓库进行代码搜索。例如,为了检测UI_INHERITANCE_UNSAFE_GETRESOURCE这个模式,Codegex会在版本库中搜索"extends ClassA"这个关键词。如果在相关代码修改的版本库中找到该查询,Codegex将提高该错误模式的优先级,因为第二个条件已经满足。目前,Codegex只在一种模式中使用在线搜索,因为(1)它很昂贵,非常依赖于GitHub搜索API的速度,(2)它需要定义一个精确匹配的搜索查询(例如,如果将查询改为"extends Class”,搜索可能会返回许多不相关的结果)。
在步骤S205中,本发明在分析器中编码了Java运算符优先级(用于确定运算符的评估顺序),以提高分析算术运算和位运算的准确性。例如,当检测SA_LOCAL_SELF_COMPUTATION模式时,该模式检查在语句“return i|i&j;”中的无意义的自我运算时,如果本发明用简单的正则表达式来提取位操作,它将匹配第一个表达式“i|i”,因为“i|i”这个运算符是无意义的,但在i|i&j中,这是一个假阳性(false positive);因为它实际上意味着“i|(i&j)”,因为操作符‘&’的优先级高于‘|’。在这个例子中,将运算符优先级编码到模式中有助于降低Codegex的误判率,这样对若干所述第四异常程序语句进行编码运算符优先级匹配检测,得到若干第五异常程序语句。
在步骤S206中,所述对若干所述第五异常程序语句进行反模式匹配检测,得到若干异常程序语句包括如下步骤:基于关键词过滤编码反模式,对若干所述第五异常程序语句进行匹配检测,得到若干第六异常程序语句;基于负向先行断言编码反模式,对若干所述第六异常程序语句进行匹配检测,得到若干异常程序语句。
具体地,在设计正则规则时,现有技术的SpotBugs中的大多数错误模式都有一套不允许匹配某些程序元素的规则,以防止误报。本发明称这些规则为反模式(anti-patterns)。为了确保错误检测的准确性,本发明使用几种策略对反模式进行编码:关键词过滤编码反模式和负向先行断言编码反模式(negative lookahead)。关键词过滤编码反模式:在每个模式的设计之初,本发明参考了几个来源:(1)错误描述,(2)源代码,以及(3)SpotBugs中的测试案例;本发明从上述测试案例中提取反模式以提高分析的准确性。例如,模式NM_CLASS_NAMING_CONVENTION检查一个Java类的类名是否符合大驼峰法命名规则(upper camel cases)(在JAVA程序中是推荐使用大驼峰命名规则和小驼峰命名规则的)。为了防止在分析特殊类时出现误报,SpotBugs为单词首带有下划线字符’_’的类名添加了一个过滤规则。为了在Codegex中重用这个过滤器,本发明跳过了对带有下划线字符的类名的命名规则检查。负向先行断言(negative lookahead)编码反模式:对于某些模式,Codegex使用负向先行断言(regex结构“q(?!u)”,用于匹配后面不跟着正则表达式u的q)来过滤负向或角落的情况。例如,为了检测NM_METHOD_NAMING_CONVENTION模式,即检查一个Java方法是否为小驼峰命名规则(lower camel cases),本发明包括了正则“(?!new)”以避免匹配首字母可能为大写字母的构造函数(例如“new Object()”),因为它的方法名可能以大写字母开头。
在本发明的另一种实现方式中,本发明使用python语言内建的正则方法库re和它的拓展库regex来实现。如果使用其它语言开发的话,可以使用对应的正则方法库替代。
得到若干异常程序语句后,就可以执行如下步骤:S300、根据若干所述异常程序语句,生成Github留言。相应的,所述根据若干所述异常程序语句,生成Github留言包括如下步骤:
S301、根据每一个所述异常程序语句,确定每一个所述异常程序语句对应的源码信息、文件路径、行数、匹配模式名称、模式描述和优先级;
S302、将每一个所述异常程序语句对应的所述源码信息、所述文件路径、所述行数、所述匹配模式名称、所述模式描述、优先级输入至留言生成器,生成Github留言。
具体地,上述若干所述异常程序语句中会包含警告,也即产生有关模式类型(pattern type)、匹配模式名称、文件路径、错误模式描述(bug description)、源信息(文件名、行数)和警告的优先级等的信息,上述过程是在一个基于正则表达式规则的分析器中完成的。基于分析器中的上述若干所述异常程序语句的所述源码信息、所述文件路径、所述行数、所述匹配模式名称、所述模式描述、优先级,就可以在更改的代码内容(PR)留言生成器(Github)自动生成包含代码引用的Github留言。对于本发明的分析器产生警告的更改的代码内容(PR)中的每个代码片段,本发明的PR留言生成器将给出一个带有留言代码的Github留言。从形式上看,一个违反bug模式的行有(1)它所属的bug类别cat(如BADPRACTICE),(2)短描述sd,和(3)长描述ld。正则表达式Codegex使用下面的模板生成一个留言:I detect that this code is problematic.According to the cat,sd(pat).ld。图3展示了一个Codegex生成的留言的例子,在该例子中,Codegex报告了BAD_PRACTICE分类下的NM_METHOD_NAMING_CONVENTION模式的警告,并且引用了出现问题的代码行。
本发明的优点,Codegex与SpotBugs具有相同的精度,且在检测某些模式方面更加精确。首先,本发明截取了Github前100个开源项目,这些项目(1)拥有最多的stars数,(2)使用Maven进行编译(本发明使用SpotBugs Maven插件作为比较基准)。虽然Codegex不需要编译,但SpotBugs只能在已编译的代码上运行,所以本发明排除了48个不能用默认的Maven编译命令编译的Java项目,该命令跳过了其他文件的编译(Com:mvn clean install-DskipTests=true-Dgpg.skip=true-Drat.skip=true-Dmaven.javadoc.skip=true-fn-Bdependency:purge-local-repository)。最后本发明在52个项目上评估了Codegex和SpotBugs,统计显示这些项目的规模大小不同,包含源代码行数范围从0.01K到1279.49K之间。
图4展示了两个工具的对比结果,本发明主要关注两个工具生成的未能达成一致的警报,因为在Overlaps中两个工具达成了一致,其有效性是相同的,因此本发明不展开这一部分,以节省空间。本发明分别计算了两个工具的准确率(Accuracy)、精确度(Precision)、召回率(Recall)和F1分数。Codegex在10个模式中的6个模式的准确率、召回率和F1分数方面优于SpotBugs。此外,Codegex在总体准确率、召回率和F1分数方面也优于SpotBugs。本发明还观察到,(1)对于大多数错误模式,Codegex可以比SpotBugs多发现一个TP,(2)Codegex在检测DMI_RANDOM_USED_ONLY_ONCE模式时表现得特别好,找到更多的TP和更少的FN。
其次,从SpotBugs的初始编译时间和分析时间角度,Codegex的运行速度比SpotBugs快88k倍。如果只考虑SpotBugs生成分析报告的时间,Codegex的运行速度最高可比SpotBugs快877倍(平均速度=76.87)。
最后,由于本发明将代码当作文本处理,无需编译,本发明不仅适用于完整的项目代码,还能分析不完整的代码片段,应用场景更广泛。
示例性设备
如图5中所示,本发明实施例提供一种基于正则表达式的代码审查装置,该装置包括若干程序语句获取单元401,若干异常程序语句获取单元402,留言文本生成单元403,其中:
若干程序语句获取单元401,用于获取代码更改文本,并对所述代码更改文本进行提取预处理,得到若干程序语句;
若干异常程序语句获取单元402,用于将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句;其中,所述异常程序语句为包含错误信息的程序语句;
留言文本生成单元403,用于根据若干所述异常程序语句,生成Github留言,其中,所述Github留言包括代码引用和留言文本。
基于上述实施例,本发明还提供了一种智能终端,其原理框图可以如图6所示。该智能终端包括通过系统总线连接的处理器、存储器、网络接口、显示屏、温度传感器。其中,该智能终端的处理器用于提供计算和控制能力。该智能终端的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该智能终端的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于正则表达式的代码分析方法。该智能终端的显示屏可以是液晶显示屏或者电子墨水显示屏,该智能终端的温度传感器是预先在智能终端内部设置,用于检测内部设备的运行温度。
本领域技术人员可以理解,图6中的原理图,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的智能终端的限定,具体的智能终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种智能终端,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:
获取代码更改文本,并对所述代码更改文本进行提取预处理,得到若干程序语句;
将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句;其中,所述异常程序语句为包含错误信息的程序语句;
根据若干所述异常程序语句,生成Github留言,其中,所述Github留言包括代码引用和留言文本。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
综上所述,本发明公开了一种基于正则表达式的代码分析方法,所述方法包括:获取代码更改文本,并对所述代码更改文本进行提取预处理,得到若干程序语句;将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句;根据若干所述异常程序语句,生成Github留言。本发明通过对所述代码更改文本进行提取预处理,能够实现逐行匹配每个错误模式,通过将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,能够对不完整的代码片段进行快速分析,无需编译和解析整个代码库。
基于上述实施例,本发明公开了一种基于正则表达式的代码分析方法,应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (10)

1.一种基于正则表达式的代码分析方法,其特征在于,所述方法包括:
获取代码更改文本,并对所述代码更改文本进行提取预处理,得到若干程序语句;
将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句;其中,所述异常程序语句为包含错误信息的程序语句;
根据若干所述异常程序语句,生成Github留言,其中,所述Github留言包括代码引用和留言文本。
2.根据权利要求1所述的基于正则表达式的代码分析方法,其特征在于,所述对所述代码更改文本进行提取预处理,得到若干程序语句包括:
提取所述代码更改文本的上下文对象和新增行对象;
对所述上下文对象和所述新增行对象进行更改和分割处理,得到若干程序语句。
3.根据权利要求1所述的基于正则表达式的代码分析方法,其特征在于,所述将若干所述程序语句进行基于正则表达式规则的代码分析和筛选,得到若干异常程序语句包括:
基于正则表达式规则,对若干所述程序语句进行语法引导匹配检测,得到若干第一异常程序语句;
基于正则表达式规则,对若干所述第一异常程序语句进行类型驱动匹配检测,得到若干第二异常程序语句;
对若干所述第二异常程序语句进行单词边界匹配检测,当若干所述第二异常程序语句中的单词包含边界时,则只对由所述单词组成的独立字符串进行匹配,得到若干第三异常程序语句;
对若干所述第三异常程序语句进行背景信息匹配检测,得到若干第四异常程序语句;
对若干所述第四异常程序语句进行编码运算符优先级匹配检测,当检测到若干所述第四异常程序语句中包含编码运算符时,基于预设的运算符优先级对若干所述第四异常程序语句进行检测,得到若干第五异常程序语句;
对若干所述第五异常程序语句进行反模式匹配检测,得到若干异常程序语句。
4.根据权利要求3所述的基于正则表达式的代码分析方法,其特征在于,所述基于正则表达式规则,对若干所述程序语句进行语法引导匹配检测,得到若干第一异常程序语句包括:
获取签名信息,其中,所述签名信息用于表征程序语句中的代表类名、方法名、变量名、字段名、修饰词、JAVA关键词和操作符的信息;
将签名信息加入到正则表达式规则中,得到第一融合正则表达式规则;
对若干所述程序语句进行关键词匹配检测,当检测到若干所述程序语句中包含代表一个或若干错误模式的条件的关键词,则记录所述关键字所在行的源码信息、文件路径、行数、匹配模式名称、模式描述和优先级,得到若干关键词异常程序语句;
基于所述第一融合正则表达式规则,对若干所述关键词异常程序语句进行基于模式的匹配检测,得到若干第一异常程序语句。
5.根据权利要求3所述的基于正则表达式的代码分析方法,其特征在于,所述基于正则表达式规则,对若干所述第一异常程序语句进行类型驱动匹配检测,得到第二异常程序语句包括:
获取数据类型信息,其中所述数据类型信息用于表征第一异常程序语句的类型信息;
将数据类型信息加入到正则表达式规则中,得到第二融合正则表达式规则;
基于所述第二融合正则表达式规则,对若干所述第一异常程序语句进行类型匹配检测;
当检测到若干所述第一异常程序语句中的类型信息模式错误时,则记录类型信息模式所在行的源码信息、文件路径、行数、匹配模式名称、模式描述、优先级,得到若干第二异常程序语句。
6.根据权利要求3所述的基于正则表达式的代码分析方法,其特征在于,所述对若干所述第三异常程序语句进行背景信息匹配检测,得到若干第四异常程序语句包括:
基于预设的搜索策略,对若干所述第三异常程序语句进行背景信息匹配检测,当检测到若干所述第三异常程序语句中的背景信息存在安全隐患时,则只对存在安全隐患的若干所述第三异常程序语句进行检测,得到若干第四异常程序语句,其中,所述搜索策略包括在所有代码更改文本中搜索和在代码托管平台上搜索。
7.根据权利要求3所述的基于正则表达式的代码分析方法,其特征在于,所述对若干所述第五异常程序语句进行反模式匹配检测,得到若干异常程序语句包括:
基于关键词过滤编码反模式,对若干所述第五异常程序语句进行匹配检测,当检测到若干所述第五异常程序语句中的关键词符合预设的命名规则时,对符合预设的命名规则的关键词进行检测,得到若干第六异常程序语句;
基于负向先行断言编码反模式,对若干所述第六异常程序语句进行匹配检测,得到若干异常程序语句。
8.根据权利要求1所述的基于正则表达式的代码分析方法,其特征在于,所述根据若干所述异常程序语句,生成Github留言包括:
根据每一个所述异常程序语句,确定每一个所述异常程序语句对应的源码信息、文件路径、行数、匹配模式名称、模式描述和优先级;
将每一个所述异常程序语句对应的所述源码信息、所述文件路径、所述行数、所述匹配模式名称、所述模式描述、优先级输入至留言生成器,生成Github留言。
9.一种智能终端,其特征在于,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于执行如权利要求1-8中任意一项所述的方法。
10.一种非临时性计算机可读存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1-8中任意一项所述的方法。
CN202110627060.6A 2021-06-04 2021-06-04 一种基于正则表达式的代码分析方法 Active CN113778852B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110627060.6A CN113778852B (zh) 2021-06-04 2021-06-04 一种基于正则表达式的代码分析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110627060.6A CN113778852B (zh) 2021-06-04 2021-06-04 一种基于正则表达式的代码分析方法

Publications (2)

Publication Number Publication Date
CN113778852A true CN113778852A (zh) 2021-12-10
CN113778852B CN113778852B (zh) 2023-07-28

Family

ID=78835767

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110627060.6A Active CN113778852B (zh) 2021-06-04 2021-06-04 一种基于正则表达式的代码分析方法

Country Status (1)

Country Link
CN (1) CN113778852B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114519332A (zh) * 2022-02-18 2022-05-20 超验信息科技(长沙)有限公司 一种基于断言的处理器验证方法、装置及电子设备
CN117421252A (zh) * 2023-12-18 2024-01-19 荣耀终端有限公司 代码检测方法、装置及计算机可读存储介质
CN117421252B (zh) * 2023-12-18 2024-05-31 荣耀终端有限公司 代码检测方法、装置及计算机可读存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104699611A (zh) * 2015-03-18 2015-06-10 北京航空航天大学 一种基于开源软件缺陷代码修改模式的缺陷信息提取方法
CN105389195A (zh) * 2015-10-27 2016-03-09 北京理工大学 一种基于代码替换和正则表达式的静态分析工具改进方法
CN109857641A (zh) * 2018-12-29 2019-06-07 北京奇安信科技有限公司 对程序源文件进行缺陷检测的方法及装置
CN111177733A (zh) * 2019-12-30 2020-05-19 北京航空航天大学 一种基于数据流分析的软件补丁检测方法及装置
CN111837109A (zh) * 2019-11-22 2020-10-27 深圳海付移通科技有限公司 一种代码质量和缺陷的分析方法、服务器及存储介质
CN112433754A (zh) * 2021-01-13 2021-03-02 南京大学 一种基于程序分析的Java函数注释自动生成方法
CN112651028A (zh) * 2021-01-05 2021-04-13 西安工业大学 基于上下文语义和补丁验证的漏洞代码克隆检测方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104699611A (zh) * 2015-03-18 2015-06-10 北京航空航天大学 一种基于开源软件缺陷代码修改模式的缺陷信息提取方法
CN105389195A (zh) * 2015-10-27 2016-03-09 北京理工大学 一种基于代码替换和正则表达式的静态分析工具改进方法
CN109857641A (zh) * 2018-12-29 2019-06-07 北京奇安信科技有限公司 对程序源文件进行缺陷检测的方法及装置
CN111837109A (zh) * 2019-11-22 2020-10-27 深圳海付移通科技有限公司 一种代码质量和缺陷的分析方法、服务器及存储介质
CN111177733A (zh) * 2019-12-30 2020-05-19 北京航空航天大学 一种基于数据流分析的软件补丁检测方法及装置
CN112651028A (zh) * 2021-01-05 2021-04-13 西安工业大学 基于上下文语义和补丁验证的漏洞代码克隆检测方法
CN112433754A (zh) * 2021-01-13 2021-03-02 南京大学 一种基于程序分析的Java函数注释自动生成方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
张志浩;杨春花;: "基于代码变更块和抽象语法树的两种重构模式识别", 智能计算机与应用 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114519332A (zh) * 2022-02-18 2022-05-20 超验信息科技(长沙)有限公司 一种基于断言的处理器验证方法、装置及电子设备
CN114519332B (zh) * 2022-02-18 2022-12-27 超睿科技(长沙)有限公司 一种基于断言的处理器验证方法、装置及电子设备
CN117421252A (zh) * 2023-12-18 2024-01-19 荣耀终端有限公司 代码检测方法、装置及计算机可读存储介质
CN117421252B (zh) * 2023-12-18 2024-05-31 荣耀终端有限公司 代码检测方法、装置及计算机可读存储介质

Also Published As

Publication number Publication date
CN113778852B (zh) 2023-07-28

Similar Documents

Publication Publication Date Title
Koyuncu et al. Fixminer: Mining relevant fix patterns for automated program repair
Tufano et al. On learning meaningful code changes via neural machine translation
US7788640B2 (en) Using code analysis to generate documentation
US11256502B2 (en) Automatic generation of documentation and aggregation of community content
US11775414B2 (en) Automated bug fixing using deep learning
CN111507086B (zh) 本地化应用程序中翻译文本位置的自动发现
CN110704297B (zh) 代码评审方法、装置、计算机设备及存储介质
CN108170468B (zh) 一种自动检测注释和代码一致性的方法及其系统
Cheung et al. Development nature matters: An empirical study of code clones in JavaScript applications
Liu et al. Automatic detection of outdated comments during code changes
US9311077B2 (en) Identification of code changes using language syntax and changeset data
CN115309451A (zh) 代码克隆检测方法、装置、设备、存储介质及程序产品
Decker et al. srcDiff: A syntactic differencing approach to improve the understandability of deltas
CN115269427A (zh) 针对web注入漏洞的中间语言表示方法及系统
Tang et al. Automated evolution of feature logging statement levels using git histories and degree of interest
Campos et al. Discovering common bug‐fix patterns: A large‐scale observational study
CN113778852B (zh) 一种基于正则表达式的代码分析方法
Sharma et al. A survey on machine learning techniques applied to source code
Zhang et al. Precfix: Large-scale patch recommendation by mining defect-patch pairs
Tao et al. Understanding performance concerns in the api documentation of data science libraries
Zhuang et al. Just-in-time defect prediction based on AST change embedding
Keim et al. Detecting Inconsistencies in Software Architecture Documentation Using Traceability Link Recovery
Lavoie et al. A case study of TTCN-3 test scripts clone analysis in an industrial telecommunication setting
CN110688303A (zh) 一种基于一体化开发平台的软件工件关系的挖掘方法
CN115391785A (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