CN111026433A - 基于代码变更历史的软件代码质量问题自动修复方法、系统及介质 - Google Patents

基于代码变更历史的软件代码质量问题自动修复方法、系统及介质 Download PDF

Info

Publication number
CN111026433A
CN111026433A CN201911338355.0A CN201911338355A CN111026433A CN 111026433 A CN111026433 A CN 111026433A CN 201911338355 A CN201911338355 A CN 201911338355A CN 111026433 A CN111026433 A CN 111026433A
Authority
CN
China
Prior art keywords
cqi
code
repair
mode
repairing
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
Application number
CN201911338355.0A
Other languages
English (en)
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.)
National University of Defense Technology
Original Assignee
National University of Defense 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 National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN201911338355.0A priority Critical patent/CN111026433A/zh
Publication of CN111026433A publication Critical patent/CN111026433A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • 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/0793Remedial or corrective actions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于代码变更历史的软件代码质量问题自动修复方法、系统及介质,本发明自动修复方法的步骤包括获取待修复的目标CQI代码,根据其所违反的静态检查规则信息从预先基于代码变更历史建立的修复模式库中找出匹配的CQI修复模式,其中修复模式库中包含目标CQI代码所违反的静态检查规则信息及其对应CQI修复模式之间的映射;根据匹配的CQI修复模式生成目标CQI代码的CQI修复补丁。本发明重点关注从软件代码库的历史记录中提取到的代码质量问题修复模式,利用其对代码质量问题进行自动修复,该方法计算简单,可扩展性强,可以有效的自动化修复代码质量问题,降低软件开发的维护成本,提高开发者的开发效率。

Description

基于代码变更历史的软件代码质量问题自动修复方法、系统 及介质
技术领域
本发明涉及软件开发缺陷修复领域,具体涉及一种基于代码变更历史的软件代码质量问题自动修复方法、系统及介质,用于基于海量的开源代码仓库中的静态代码质量问题修复记录中所挖掘的修复模式,自动化的对语义上下文环境所匹配的质量问题代码进行修复。
背景技术
随着科技的发展,软件已成为人们工作,学习,娱乐的重要工具,无论是智能手机还是个人电脑都离不开软件,根据github2018年度报告,github上已经有9600万个软件代码仓库,大到超级计算机,小到智能手表,软件应用已经于社会生活各个方面密不可分。
无论是操作系统软件还是计算器软件,软件的可用性,可维护性,可读性,正确性等质量属性一直被用户以及开发者所关注。而软件质量的一个重要属性是其代码质量。软件的代码质量一般可分为内部质量属性与外部质量属性两种类型。外部质量属性反映软件在运行时阶段的属性,如功能行和正确性,而内部质量属性存在于开发和维护中,这是开发人员所关心的,如可维护性和可读性。高质量的内部源代码不仅提高了代码的可读性,帮助开发人员快速理解代码所表达的显式和隐式含义,而且降低了崩溃的风险和软件维护的成本。代码内部质量问题(CQI)可以通过代码环境和SonarQube等静态分析工具来检测,这些工具在开源社区中得到了广泛的应用。代码内部质量问题可以分为漏洞、Bug和代码气味。
在软件的开发和维护中不可避免会产生代码质量问题,其可以通过静态检查工具进行检测。但是修复则是一个耗时费力的工作,而且目前的修复方法是以经验判定为主,需要开发者花费大量精力对代码质量进行维护,消耗大量的成本,且重复工作很多。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种基于代码变更历史的软件代码质量问题自动修复方法、系统及介质,本发明重点关注从软件代码库的历史记录中提取到的代码质量问题修复模式,利用其对代码质量问题进行自动修复,该方法计算简单,可扩展性强,可以有效的自动化修复代码质量问题,降低软件开发的维护成本,提高开发者的开发效率。
为了解决上述技术问题,本发明采用的技术方案为:
一种基于代码变更历史的软件代码质量问题自动修复方法,实施步骤包括:
1)获取待修复的目标CQI代码;
2)针对目标CQI代码,根据其所违反的静态检查规则信息从预先基于代码变更历史建立的修复模式库中找出匹配的CQI修复模式,所述修复模式库中包含目标CQI代码所违反的静态检查规则信息及其对应CQI修复模式之间的映射;
3)根据匹配的CQI修复模式生成目标CQI代码的CQI修复补丁。
可选地,所述CQI修复模式包括所修复的静态检查规则信息TYPE、所适用的上下文环境信息CCTX、代码变更处的代码变更动作序列FA,其中所适用的上下文环境信息CCTX是一个抽象语法树节点序列所构成的向量。
可选地,步骤2)的详细步骤包括:
2.1)使用Word2Vec将目标CQI代码进行向量化得到第一向量,分别将修复模式库中各个CQI修复模式所对应的修复模式代码使用Word2Vec进行向量化得到第二向量,分别计算第一向量和各个第二向量之间的余弦值;
2.2)选择余弦值最大的修复模式作为和目标CQI代码匹配的CQI修复模式。
可选地,步骤3)的详细步骤包括:
3.1)找到匹配的CQI修复模式的代码变更动作序列FA;
3.2)通过得到的代码变更动作序列FA对目标CQI代码进行修改;
3.3)验证目标CQI代码的CQI是否已经被修改,如果已经被修复,则根据修改后的代码生成目标CQI代码的CQI修复补丁。
可选地,步骤2)之前包括基于代码变更历史建立的修复模式库的步骤,详细步骤包括:
S1)基于代码变更历史收集软件代码库中的CQI修复记录;
S2)对于每一条CQI修复记录,将其软件代码库回退到修复记录前一个版本并进行静态分析,在分析完成后将其软件代码库设置到修复后的版本再次进行静态分析,通过两次静态分析获取该条CQI修复记录所修复的具体CQI;
S3)对于每一条CQI修复记录,提取其中与CQI修复相关的代码变更fix_hook及其相关的代码范围;
S4)针对所有的CQI修复记录进行CQI修复模式挖掘,从而建立包含目标CQI代码所违反的静态检查规则信息及其对应CQI修复模式之间的映射的修复模式库。
可选地,步骤S1)的详细步骤包括:
S1.1)从开源社区网站中获取热门程度靠前的指定数量个指定编程语言的软件代码库;
S1.2)从软件代码库中采用指定的关键词从提交历史中筛选出于代码质量问题代修复有关的CQI修复记录。
可选地,步骤S3)中提取其中与CQI修复相关的代码变更fix_hook的详细步骤包括:
S3.1)针对当前CQI修复记录,输入对应的存储历史记录的变更日志文件logfile、修复版本号commit_SHA和CQI起始代码行数issue_line;
S3.2)通过匹配修复版本号commit_SHA和指定的源文件名来定位大概的修复区域,然后对于修复区域中的每行单独代码进行扫描,初始化变量hooks,在修复前版本和修复后版本中计算其代码行范围,最终将添加的代码行和删除的代码行加入到变量hooks中,最终将变量hooks作为与CQI修复相关的代码变更fix_hook,输出与CQI修复相关的代码变更fix_hook及其相关的代码范围。
可选地,步骤S4)的详细步骤包括:
S4.1)对所有的CQI修复记录的代码进行分词;
S4.2)针对每一个CQI修复记录,将其代码根据分词后的结果解析成抽象语法树AST,然后将抽象语法树AST中每个节点node按照深度优先排列为向量序列,最后将其中与命名有关的节点进行抽象化处理,并对函数名等都进行抽象处理;
S4.3)定义CQI修复模式中对抽象语法树AST进行变更的动作,并按照定义的动作提取各个CQI修复记录中在代码变更fix_hook处的代码变更动作序列FA,从而建立各个CQI修复记录对应的CQI修复模式FP:FP=(TYPE,CCTX,FA),其中TYPE表示CQI修复模式包括所修复的静态检查规则信息、CCTX表示CQI修复模式所适用的上下文环境信息、FA表示CQI修复模式代码变更处的代码变更动作序列,其中所适用的上下文环境信息CCTX是一个抽象语法树节点序列所构成的向量;
S4.4)将所有的CQI修复模式FP组合得到修复模式库。
此外,本发明还提供一种基于代码变更历史的软件代码质量问题自动修复系统,包括计算机设备,该计算机设备被编程或配置以执行所述基于代码变更历史的软件代码质量问题自动修复方法的步骤,或者该计算机设备的存储介质上存储有被编程或配置以执行所述基于代码变更历史的软件代码质量问题自动修复方法的计算机程序。
此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或配置以执行所述基于代码变更历史的软件代码质量问题自动修复方法的计算机程序。
和现有技术相比,本发明具有下述优点:本发明自动修复方法的步骤包括获取待修复的目标CQI代码,根据其所违反的静态检查规则信息从预先基于代码变更历史建立的修复模式库中找出匹配的CQI修复模式,其中修复模式库中包含目标CQI代码所违反的静态检查规则信息及其对应CQI修复模式之间的映射;根据匹配的CQI修复模式生成目标CQI代码的CQI修复补丁。本发明重点关注从软件代码库的历史记录中提取到的代码质量问题修复模式,利用其对代码质量问题进行自动修复,该方法计算简单,可扩展性强,可以有效的自动化修复代码质量问题,降低软件开发的维护成本,提高开发者的开发效率。
附图说明
图1为本发明实施例方法的基本流程示意图。
图2为本发明实施例中所采用算法1的伪代码示意图。
图3为本发明实施例中所采用算法2的伪代码示意图。
图4为本发明实施例中得到的修复模式结果示意图。
图5为本发明实施例中得到的各CQI修复正确率统计结果示意图。
具体实施方式
见图1,本实施例基于代码变更历史的软件代码质量问题自动修复方法的实施步骤包括:
1)获取待修复的目标CQI代码;
2)针对目标CQI代码,根据其所违反的静态检查规则信息从预先基于代码变更历史建立的修复模式库中找出匹配的CQI修复模式,所述修复模式库中包含目标CQI代码所违反的静态检查规则信息及其对应CQI修复模式之间的映射;
3)根据匹配的CQI修复模式生成目标CQI代码的CQI修复补丁。
本实施例中,CQI修复模式包括所修复的静态检查规则信息TYPE、所适用的上下文环境信息CCTX、代码变更处的代码变更动作序列FA,其中所适用的上下文环境信息CCTX是一个抽象语法树节点序列所构成的向量。
本实施例中,步骤2)的详细步骤包括:
2.1)使用Word2Vec将目标CQI代码进行向量化得到第一向量,分别将修复模式库中各个CQI修复模式所对应的修复模式代码使用Word2Vec进行向量化得到第二向量,分别计算第一向量和各个第二向量之间的余弦值;
2.2)选择余弦值最大的修复模式作为和目标CQI代码匹配的CQI修复模式。
本实施例中,步骤3)的详细步骤包括:
3.1)找到匹配的CQI修复模式的代码变更动作序列FA;
3.2)通过得到的代码变更动作序列FA对目标CQI代码进行修改;
3.3)验证目标CQI代码的CQI是否已经被修改,如果已经被修复,则根据修改后的代码生成目标CQI代码的CQI修复补丁。
本实施例步骤2)之前包括基于代码变更历史建立的修复模式库的步骤,详细步骤包括:
S1)基于代码变更历史收集软件代码库中的CQI修复记录;
S2)对于每一条CQI修复记录,将其软件代码库回退到修复记录前一个版本并进行静态分析,在分析完成后将其软件代码库设置到修复后的版本再次进行静态分析,通过两次静态分析获取该条CQI修复记录所修复的具体CQI;
S3)对于每一条CQI修复记录,提取其中与CQI修复相关的代码变更fix_hook及其相关的代码范围;
S4)针对所有的CQI修复记录进行CQI修复模式挖掘,从而建立包含目标CQI代码所违反的静态检查规则信息及其对应CQI修复模式之间的映射的修复模式库。
本实施例中,步骤S1)的详细步骤包括:
S1.1)从开源社区网站中获取热门程度靠前的指定数量个指定编程语言的软件代码库;本实施例中具体是从开源社区github通过API获取前200个star(github中衡量项目热门程度的指标)最多的java语言软件代码库。
S1.2)从软件代码库中采用指定的关键词从提交历史中筛选出于代码质量问题代修复有关的CQI修复记录。在获取软件代码库后,本实施例中通过“fix, CQI fix, code flaw, code quality, checkstyle, findbugs, sonarqube”等关键词,从代码库的git提交历史中筛选出于CQI修复有关的CQI修复记录。
本实施例步骤S2)中对于每一条CQI修复记录,将其软件代码库通过git回退到修复记录前一个版本并使用sonarqube进行静态分析,在分析完成后将其软件代码库设置到修复后的版本再次使用sonarqube进行静态分析,通过两次静态分析获取该条CQI修复记录所修复的具体CQI。
本实施例步骤S3)中提取其中与CQI修复相关的代码变更fix_hook的伪代码如图2的算法1(Algorithm 1)所示,其详细步骤包括:
S3.1)针对当前CQI修复记录,输入对应的存储历史记录的变更日志文件logfile、修复版本号commit_SHA和CQI起始代码行数issue_line;
S3.2)通过匹配修复版本号commit_SHA和指定的源文件名来定位大概的修复区域(图2中第1行),然后对于修复区域中的每行单独代码进行扫描(图2中第2和6行),初始化变量hooks,在修复前版本和修复后版本中计算其代码行范围,最终将添加的代码行和删除的代码行加入到变量hooks中(图2中第19行),最终将变量hooks作为与CQI修复相关的代码变更fix_hook,输出与CQI修复相关的代码变更fix_hook及其相关的代码范围(图2中第24行)。本实施例中从变更历史中提取修复区域的算法伪代码如图2所示,在git的变更日志文件(logfile)中有多个变更区域,我们将CQI代码周围的特定更改区域定义为修复区域(Fixing Hook)。参见图2,算法1通过匹配版本号和指定的源文件名来定位修复修复大概范围。然后,对于修复区域中的每行单独代码,算法在修复前版本和修复后版本中计算其代码行范围。算法第10-18行将添加的代码行和删除的代码行加入到Fix hooks变量中,最终算法返回修复区域代码(Fix hooks)以及其相关的代码范围。本实施例中通过对变更日志文件logfile进行分析,通过对其中每个单行变更的分析,如以“-”(deleted)开头则是删除,以“+”(added)开头则是增加,如若“+”和“-”组合出现则是修改,最终将添加的代码行和删除的代码行加入到变量hooks中,最终将变量hooks作为与CQI修复相关的代码变更fix_hook,输出与CQI修复相关的代码变更fix_hook及其相关的代码范围。
本实施例中,步骤S4)的详细步骤包括:
S4.1)对所有的CQI修复记录的代码进行分词;
S4.2)针对每一个CQI修复记录,将其代码根据分词后的结果解析成抽象语法树AST,然后将抽象语法树AST中每个节点node按照深度优先排列为向量序列,最后将其中与命名有关的节点进行抽象化处理,并对函数名等都进行抽象处理;在上述步骤S3)获取的CQI修复实例代码中包含了实际上有许多无意义的数据,例如变量命名,函数命名等,而这些数据对于后续修复模式的挖掘会产生干扰,因此我们需要对其进行抽象化处理。例如所有的变量命名被替换为“V”,“V0”,“V1”,以此类推。
S4.3)定义CQI修复模式中对抽象语法树AST进行变更的动作,并按照定义的动作提取各个CQI修复记录中在代码变更fix_hook处的代码变更动作序列FA,从而建立各个CQI修复记录对应的CQI修复模式FP:FP=(TYPE,CCTX,FA),其中TYPE表示CQI修复模式包括所修复的静态检查规则信息、CCTX表示CQI修复模式所适用的上下文环境信息、FA表示CQI修复模式代码变更处的代码变更动作序列,其中所适用的上下文环境信息CCTX是一个抽象语法树节点序列所构成的向量;
S4.4)将所有的CQI修复模式FP组合得到修复模式库。
本实施例中定义CQI修复模式中对抽象语法树AST进行变更的动作如下:
替换动作UPD:表示在修复前版本代码中的抽象语法树AST 中的节点node src 在修复后版本代码中的抽象语法树AST节点node dst 所替换,格式为:(UPD node src to node dst )。
移动动作MOV :表示在修复前版本代码中的抽象语法树AST 中的节点node src 在修复后版本代码中被移动到某一个新位置,格式为:( MOV node src ).
插入动作INS:表示修复后版本代码中的抽象语法树AST节点插入了新的节点node dst ,格式为 (INS node dst )。
删除动作DEL:表示在修复前版本代码中的抽象语法树AST 中的节点node src 在修复后版本代码中的抽象语法树AST中被删除,格式为:(DEL node src )。
在GumTree等工具的定义中,DEL动作只能从根节点删除开始,一个节点一个节点的删除,对于处于同一块区域的代码删除,其动作序列生成十分繁杂。本实施例中针对上述问题,还一种提取可合并的删除动作DEL的方法,用于将所有处于同一代码块的代码删除动作序列进行简化,本实施例提取可合并的删除动作DEL的方法的伪代码如图3的算法2(Algorithm 2)所示,Algorithm 2展示了从GumTree变更动作序列中给定位置开始提取可合并的DEL动作的算法。算法的输入包括action_list,它是包含CQI修复区域中所有代码变更动作的序列,start是给定我们算法开始执行的位置。在第1-4行初始化相关变量后,本算法首先过滤掉第5-10行中的2个特定条件:(1)起始位置的动作是action_list中的最后一个动作,(2)当前动作所操作的AST节点是叶节点,但下一个动作不是DEL。在这2个条件下,它们都直接返回当前动作序列而无需对DEL进行合并。在排除这2个条件后,对于每个动作,算法计算其AST节点是否是cur_action所处理节点的父节点。如果判断为真,则遍历delete_list,并删除其AST节点是cur_action所处理节点的子节点的所有DEL动作。总而言之,我们将下一个变更动作添加到delete_list,更新cur_action和cur。当完成action_list的遍历时,算法会返回delete_list,而它则记录了经过改进的DEL动作序列。
最终,步骤S4.4)将所有的CQI修复模式FP组合得到修复模式库,本实施例中将修复模式库命名为Library of CQI Fix Patterns。对于待修复的CQI,我们首先根据其所违反的静态检查规则信息,从之前得到的Library of CQI Fix Patterns中初步匹配出规则相同的修复模式,然后使用Word2Vec方法,将待修复的CQI代码以及匹配结果中修复模式代码向量化,然后计算2个向量的余弦值。余弦值的取值范围为0-1,越接近1表明2个向量越相似,即表明待修复的CQI代码与所匹配到的修复模式代码上下文环境越相似。由此,根据余弦值有大到小取前top5,即为匹配结果。然后根据匹配到的CQI修复模式中的代码变更动作序列,对待修复的CQI代码进行修改。完成修改,使用SonarQube工具验证CQI已被修复后,将修复的补丁推荐给用户,即完成CQI修复补丁推荐。
本实施例中,最终挖掘得到的修复模式如图4所示。本发明选取了收集到的数量排名前20的CQI,对于每条CQI规则,我们随机选择5个未修复的样本文件进行修复测试,CR@N指对于前N的匹配的CQI修复模式所进行修复的正确率,应用所挖掘到的欧式对CQI的修复效果如图5所示。因此,本实施例基于代码变更历史的软件代码质量问题自动修复方法可以有效的自动化修复代码质量问题,降低软件开发的维护成本,提高开发者的开发效率。
此外,本实施例还提供一种基于代码变更历史的软件代码质量问题自动修复系统,包括计算机设备,该计算机设备被编程或配置以执行前述基于代码变更历史的软件代码质量问题自动修复方法的步骤,或者该计算机设备的存储介质上存储有被编程或配置以执行前述基于代码变更历史的软件代码质量问题自动修复方法的计算机程序。
此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或配置以执行前述基于代码变更历史的软件代码质量问题自动修复方法的计算机程序。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种基于代码变更历史的软件代码质量问题自动修复方法,其特征在于实施步骤包括:
1)获取待修复的目标CQI代码;
2)针对目标CQI代码,根据其所违反的静态检查规则信息从预先基于代码变更历史建立的修复模式库中找出匹配的CQI修复模式,所述修复模式库中包含目标CQI代码所违反的静态检查规则信息及其对应CQI修复模式之间的映射;
3)根据匹配的CQI修复模式生成目标CQI代码的CQI修复补丁。
2.根据权利要求1所述的基于代码变更历史的软件代码质量问题自动修复方法,其特征在于,所述CQI修复模式包括所修复的静态检查规则信息TYPE、所适用的上下文环境信息CCTX、代码变更处的代码变更动作序列FA,其中所适用的上下文环境信息CCTX是一个抽象语法树节点序列所构成的向量。
3.根据权利要求2所述的基于代码变更历史的软件代码质量问题自动修复方法,其特征在于,步骤2)的详细步骤包括:
2.1)使用Word2Vec将目标CQI代码进行向量化得到第一向量,分别将修复模式库中各个CQI修复模式所对应的修复模式代码使用Word2Vec进行向量化得到第二向量,分别计算第一向量和各个第二向量之间的余弦值;
2.2)选择余弦值最大的修复模式作为和目标CQI代码匹配的CQI修复模式。
4.根据权利要求2所述的基于代码变更历史的软件代码质量问题自动修复方法,其特征在于,步骤3)的详细步骤包括:
3.1)找到匹配的CQI修复模式的代码变更动作序列FA;
3.2)通过得到的代码变更动作序列FA对目标CQI代码进行修改;
3.3)验证目标CQI代码的CQI是否已经被修改,如果已经被修复,则根据修改后的代码生成目标CQI代码的CQI修复补丁。
5.根据权利要求1所述的基于代码变更历史的软件代码质量问题自动修复方法,其特征在于,步骤2)之前包括基于代码变更历史建立的修复模式库的步骤,详细步骤包括:
S1)基于代码变更历史收集软件代码库中的CQI修复记录;
S2)对于每一条CQI修复记录,将其软件代码库回退到修复记录前一个版本并进行静态分析,在分析完成后将其软件代码库设置到修复后的版本再次进行静态分析,通过两次静态分析获取该条CQI修复记录所修复的具体CQI;
S3)对于每一条CQI修复记录,提取其中与CQI修复相关的代码变更fix_hook及其相关的代码范围;
S4)针对所有的CQI修复记录进行CQI修复模式挖掘,从而建立包含目标CQI代码所违反的静态检查规则信息及其对应CQI修复模式之间的映射的修复模式库。
6.根据权利要求5所述的基于代码变更历史的软件代码质量问题自动修复方法,其特征在于,步骤S1)的详细步骤包括:
S1.1)从开源社区网站中获取热门程度靠前的指定数量个指定编程语言的软件代码库;
S1.2)从软件代码库中采用指定的关键词从提交历史中筛选出于代码质量问题代修复有关的CQI修复记录。
7.根据权利要求5所述的基于代码变更历史的软件代码质量问题自动修复方法,其特征在于,步骤S3)中提取其中与CQI修复相关的代码变更fix_hook的详细步骤包括:
S3.1)针对当前CQI修复记录,输入对应的存储历史记录的变更日志文件logfile、修复版本号commit_SHA和CQI起始代码行数issue_line;
S3.2)通过匹配修复版本号commit_SHA和指定的源文件名来定位大概的修复区域,然后对于修复区域中的每行单独代码进行扫描,初始化变量hooks,在修复前版本和修复后版本中计算其代码行范围,最终将添加的代码行和删除的代码行加入到变量hooks中,最终将变量hooks作为与CQI修复相关的代码变更fix_hook,输出与CQI修复相关的代码变更fix_hook及其相关的代码范围。
8.根据权利要求5所述的基于代码变更历史的软件代码质量问题自动修复方法,其特征在于,步骤S4)的详细步骤包括:
S4.1)对所有的CQI修复记录的代码进行分词;
S4.2)针对每一个CQI修复记录,将其代码根据分词后的结果解析成抽象语法树AST,然后将抽象语法树AST中每个节点node按照深度优先排列为向量序列,最后将其中与命名有关的节点进行抽象化处理,并对函数名等都进行抽象处理;
S4.3)定义CQI修复模式中对抽象语法树AST进行变更的动作,并按照定义的动作提取各个CQI修复记录中在代码变更fix_hook处的代码变更动作序列FA,从而建立各个CQI修复记录对应的CQI修复模式FP:FP=(TYPE,CCTX,FA),其中TYPE表示CQI修复模式包括所修复的静态检查规则信息、CCTX表示CQI修复模式所适用的上下文环境信息、FA表示CQI修复模式代码变更处的代码变更动作序列,其中所适用的上下文环境信息CCTX是一个抽象语法树节点序列所构成的向量;
S4.4)将所有的CQI修复模式FP组合得到修复模式库。
9.一种基于代码变更历史的软件代码质量问题自动修复系统,包括计算机设备,其特征在于,该计算机设备被编程或配置以执行权利要求1~8中任意一项所述基于代码变更历史的软件代码质量问题自动修复方法的步骤,或者该计算机设备的存储介质上存储有被编程或配置以执行权利要求1~8中任意一项所述基于代码变更历史的软件代码质量问题自动修复方法的计算机程序。
10.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有被编程或配置以执行权利要求1~8中任意一项所述基于代码变更历史的软件代码质量问题自动修复方法的计算机程序。
CN201911338355.0A 2019-12-23 2019-12-23 基于代码变更历史的软件代码质量问题自动修复方法、系统及介质 Pending CN111026433A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911338355.0A CN111026433A (zh) 2019-12-23 2019-12-23 基于代码变更历史的软件代码质量问题自动修复方法、系统及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911338355.0A CN111026433A (zh) 2019-12-23 2019-12-23 基于代码变更历史的软件代码质量问题自动修复方法、系统及介质

Publications (1)

Publication Number Publication Date
CN111026433A true CN111026433A (zh) 2020-04-17

Family

ID=70212643

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911338355.0A Pending CN111026433A (zh) 2019-12-23 2019-12-23 基于代码变更历史的软件代码质量问题自动修复方法、系统及介质

Country Status (1)

Country Link
CN (1) CN111026433A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112699018A (zh) * 2020-10-23 2021-04-23 西安交通大学 基于软件缺陷关联分析的软件缺陷定位方法
CN112799712A (zh) * 2021-01-29 2021-05-14 中国工商银行股份有限公司 维护工作量的确定方法、装置、设备、介质和程序产品
CN113238937A (zh) * 2021-05-11 2021-08-10 西北大学 一种基于代码精简与误报过滤的编译器模糊测试方法
CN113656207A (zh) * 2021-08-16 2021-11-16 北京百度网讯科技有限公司 故障处理方法、装置、电子设备和介质
CN113918427A (zh) * 2021-12-14 2022-01-11 阿里云计算有限公司 一种数据变更响应方法以及装置
CN116561768B (zh) * 2023-05-19 2024-05-28 国家计算机网络与信息安全管理中心 设备固件漏洞检测方法、装置、设备及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110532019A (zh) * 2019-06-27 2019-12-03 北京大学 一种软件代码片段历史追溯的方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110532019A (zh) * 2019-06-27 2019-12-03 北京大学 一种软件代码片段历史追溯的方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
薛江涛: "History-Driven Fix for Code Quality Issues" *
许福;杨湛宇;陈志泊;孙钰;张海燕;: "开源代码仓库增量分析方法" *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112699018A (zh) * 2020-10-23 2021-04-23 西安交通大学 基于软件缺陷关联分析的软件缺陷定位方法
CN112699018B (zh) * 2020-10-23 2023-06-20 西安交通大学 基于软件缺陷关联分析的软件缺陷定位方法
CN112799712A (zh) * 2021-01-29 2021-05-14 中国工商银行股份有限公司 维护工作量的确定方法、装置、设备、介质和程序产品
CN112799712B (zh) * 2021-01-29 2024-02-02 中国工商银行股份有限公司 维护工作量的确定方法、装置、设备、介质
CN113238937A (zh) * 2021-05-11 2021-08-10 西北大学 一种基于代码精简与误报过滤的编译器模糊测试方法
CN113238937B (zh) * 2021-05-11 2023-02-03 西北大学 一种基于代码精简与误报过滤的编译器模糊测试方法
CN113656207A (zh) * 2021-08-16 2021-11-16 北京百度网讯科技有限公司 故障处理方法、装置、电子设备和介质
CN113656207B (zh) * 2021-08-16 2023-11-03 北京百度网讯科技有限公司 故障处理方法、装置、电子设备和介质
CN113918427A (zh) * 2021-12-14 2022-01-11 阿里云计算有限公司 一种数据变更响应方法以及装置
CN113918427B (zh) * 2021-12-14 2023-03-31 阿里云计算有限公司 一种数据变更响应方法以及装置
CN116561768B (zh) * 2023-05-19 2024-05-28 国家计算机网络与信息安全管理中心 设备固件漏洞检测方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
JP7398068B2 (ja) ソフトウェアテスト
CN111026433A (zh) 基于代码变更历史的软件代码质量问题自动修复方法、系统及介质
KR101989802B1 (ko) 테스트 케이스를 이용하여 테스트를 수행하는 방법 및 장치
US11775414B2 (en) Automated bug fixing using deep learning
Langer et al. A posteriori operation detection in evolving software models
US20140013304A1 (en) Source code analytics platform using program analysis and information retrieval
CN111382070B (zh) 兼容性测试方法、装置、存储介质和计算机设备
JP2019153270A (ja) クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別
Dintzner et al. FEVER: An approach to analyze feature-oriented changes and artefact co-evolution in highly configurable systems
Chapela-Campa et al. Discovering infrequent behavioral patterns in process models
JP4951416B2 (ja) プログラム検証方法、プログラム検証装置
D’Souza et al. Collective intelligence for smarter API recommendations in python
Schlie et al. Detecting variability in MATLAB/Simulink models: An industry-inspired technique and its evaluation
CN110990055B (zh) 一种基于程序分析的Pull Request功能分类方法
Yang et al. Transplantfix: Graph differencing-based code transplantation for automated program repair
Stephan et al. MuMonDE: A framework for evaluating model clone detectors using model mutation analysis
Hentze et al. Quantifying the variability mismatch between problem and solution space
Stoermer et al. Practice patterns for architecture reconstruction
CN111966578A (zh) 一种安卓兼容性缺陷修复效果的自动化评估方法
Shaikh et al. More than two decades of research on verification of UML class models: A systematic literature review
CN114880673A (zh) 针对小程序源代码进行隐私数据泄露检测的方法及系统
Smirnov et al. Revizor: a data-driven approach to automate frequent code changes based on graph matching
Kasegn et al. Spatial locality based identifier name recommendation
JP6955162B2 (ja) 解析装置、解析方法および解析プログラム
KR100656559B1 (ko) Bibd 방법론을 이용하는 프로그램 자동 개발 장치

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