CN114398278A - 程序依赖图引导修复模板的空指针引用自动修复方法 - Google Patents

程序依赖图引导修复模板的空指针引用自动修复方法 Download PDF

Info

Publication number
CN114398278A
CN114398278A CN202210048418.4A CN202210048418A CN114398278A CN 114398278 A CN114398278 A CN 114398278A CN 202210048418 A CN202210048418 A CN 202210048418A CN 114398278 A CN114398278 A CN 114398278A
Authority
CN
China
Prior art keywords
program
defect
repair
repairing
template
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
CN202210048418.4A
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.)
China University of Petroleum East China
Original Assignee
China University of Petroleum East China
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 China University of Petroleum East China filed Critical China University of Petroleum East China
Priority to CN202210048418.4A priority Critical patent/CN114398278A/zh
Publication of CN114398278A publication Critical patent/CN114398278A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3628Software debugging of optimised code

Landscapes

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

Abstract

本发明公开一种程序依赖图引导修复模板的空指针引用自动修复方法,本方法利用程序依赖图充分了解语句间复杂的依赖关系,从而准确选择缺陷修复位置,针对不同情况的空指针引用制定不同的修复模板进行修复。该方法包括:A、通过程序依赖图及其扩展图分析程序间的数据和控制依赖关系;B、四种修复策略下的空指针引用缺陷的修复模板生成;C、依据缺陷程序的上下文信息匹配修复模板选择缺陷修复位置完成缺陷修复;本发明的程序依赖图引导修复模板的空指针引用自动修复方法,可实现对程序缺陷点位置依赖关系的精准识别,同时实施多策略的修复机制对过程间和过程内的空指针引用缺陷修复的精准修复,提高缺陷修复的准确率。

Description

程序依赖图引导修复模板的空指针引用自动修复方法
技术领域
本发明涉及一种空指针引用缺陷自动修复的方法,特别涉及一种利用程序依赖图对程序间的控制和数据依赖关系详细分析对空指针引用缺陷实施不同的缺陷修复机制生成候选补丁。
背景技术
程序缺陷修复是软件开发及维护过程中繁琐且无可避免的工作,极大消耗和降低软件开发人员的精力和效率,因此程序自动修复技术成为一大研究热点,目前的程序自动修复技术主要分为三个阶段:缺陷定位,补丁生成和补丁验证。不同缺陷产生的原因以及缺陷影响域各不相同,对所有的程序缺陷制定通用的修复策略往往会造成不精确的缺陷修复位置和不恰当的修复策略,造成补丁的搜索范围较大且所获得修复补丁并不正确,修复效率大大下降。综上所述,对于特定的程序缺陷制定特定的修复策略显得尤为重要。
程序依赖图包括控制依赖图和数据依赖图。控制依赖图显示语句结点之间的控制依赖关系,数据依赖图主要描述程序语句结点间之间的数据依赖关系。程序依赖图呈现的主要依赖关系有:控制依赖和数据依赖。假设n1和n2均为语句结点,n1和n2之间存在执行路径,n2使用了在n1定义的变量p,且执行路径中不包含对p的重新定义,表明n2数据依赖于n1,即
Figure BDA0003473447440000011
假设n1和n2均为语句结点,存在一条从n1到n2的执行路径p,p中除n1和n2的任何语句结点都被n2后向支配,并且n1不被n2后向支配,表明n2控制依赖于n1,即
Figure BDA0003473447440000012
假设G=<N,E>为程序依赖图,其中
Figure BDA0003473447440000013
N为语句结点。
发明内容
有鉴于此,本发明的主要目的在于通过实现对程序依赖关系的精细化分析,归纳总结修复方式提出了赋值、约束、规避、转移机制制定修复模板。针对此提出了程序依赖图引导修复模板的空指针引用自动修复方法。
为达到上述目的,本发明的技术方案是这样实现的:
程序依赖图引导修复模板的空指针引用自动修复方法,该方法包括:
1、程序依赖图引导修复模板的空指针引用自动修复方法,其特征在于,该分析方法包括以下几个步骤:
A、通过程序中的数据和控制依赖关系构建程序依赖图及其扩展图分析程序间的依赖关系;
B、四种修复策略下的空指针引用缺陷的修复模板生成;
C、依据缺陷程序的上下文信息匹配修复模板选择缺陷修复位置完成缺陷修复。
其中,所述步骤A中的程序依赖图的构建示例如图1所示,在控制流分析的基础上分析语句结点间后向支配关系,捕获程序语句结点间的控制依赖关系,并且利用静态单赋值技术将程序转换为中间语言来分析程序中的变量及对象间的定义使用链,捕获程序语句结点间的数据依赖关系,将数据和控制依赖关系融合成程序依赖图从而获取程序间的依赖关系。
所述步骤B中的四种修复机制细化的修复模板如下:
ldef和luse分别表示变量v的定义语句和使用语句对应程序依赖图中的ndef和nuse语句结点,表示需要添加的语句,c表示空检查的条件判断。new object()为v的构造方法,根据v的类型不同,获取new object()的方式不同。第一类v为第三方API库,根据修复点的活跃变量匹配各个构造方法的形参选择最佳匹配的构造方法;第二类v为自定义类型且声明类型没有子类,若只有一个构造方法,就选取唯一的构造方法,若有多个构造方法,通过反射机制获取所有的构造方法,可根据当前程序点上活跃变量匹配构造方法中的参数排除一些满足不了实参要求的构造方法,从而选择最佳构造方法;第三类v为自定义类型且声明类型有子类,根据变量名与子类名称的最佳匹配选择子类类型从而选择最佳构造方法。NEW_VALUE的取值分为三类:第一类若方法中存在与返回值同类型的变量则NEW_VALUE的取值为这个变量的值;第二类方法返回值若为基本类型,NEW_VALUE的取值为基本类型的默认值;第三类方法返回值若不是基本类型,NEW_VALUE的取值则通过反射机制获取返回类型的构造方法得到。
Figure BDA0003473447440000031
所述步骤C中的依据缺陷程序的上下文信息匹配修复模板选择缺陷修复位置完成程序自动修复的总体框架如图2所示。
本发明所提供的程序依赖图引导修复模板的空指针引用自动修复方法,具有以下优点:
本发明的空指针引用修复方法相比现有的大多数修复方法,可实现对程序缺陷点变量或对象的精确依赖关系分析,同时将修复方式细化成四种修复策略可形成多策略的空指针引用的修复方式。
附图说明
图1为程序依赖图的构建示例;
图2为程序自动修复的总体框架。
具体实施方式
下面结合本发明的示例对本发明的空指针引用作进一步详细的说明。
如,下面代码段:
Figure BDA0003473447440000041
(a)
Figure BDA0003473447440000042
(b)
(a)中的程序片段,在L5行的对空对象parser的方法调用出现了空指针故障,此时再采用赋值机制很难获取正确补丁,在这种情况下需要尽量避免空对象的触发。通过程序依赖关系分析可得故障语句结点为L5,{L6,L7,L9}通过有向边集合数据依赖于L5,且有向边集合表明了L7和L9均受到L5的语句结点的控制,故故障变量parser的缺陷影响域为{L5,L6,L7,L9}。采用约束机制对缺陷感染域进行空检查,若对象parser为空则跳过缺陷感染域。(a)中的程序片段则为修复后的程序补丁。

Claims (4)

1.程序依赖图引导修复模板的空指针引用自动修复方法,包括以下部分:
A、通过程序依赖图及其扩展图分析程序间的数据和控制依赖关系;
B、四种修复策略下的空指针引用缺陷的修复模板生成;
C、依据缺陷程序的上下文信息匹配修复模板选择缺陷修复位置完成缺陷修复。
2.根据权利要求1所述的基于程序依赖图及其扩展图分析程序间的数据和控制依赖关系,其特征在于,所述的部分A中,进行控制流分析和语句间后向支配关系获取程序中控制依赖关系,对变量及对象进行定义使用关系分析获取其数据依赖关系,将这两个不同层次的依赖关系融合成程序依赖图获取程序的上下文信息。
3.根据权利要求1所述的程序依赖图引导的四种修复策略下的空指针引用缺陷的修复模板生成,其特征在于,所述的部分B中,为了使得修复模板更加细致且全面,在修复方案中提出四种优先级由高到底的修复机制:赋值机制、约束机制、规避机制、转移机制。通过在程序依赖图中获取的缺陷感染域,程序缺陷点上下文信息等指导修复模板的生成。
4.根据权利要求1所述的依据缺陷程序的上下文信息匹配修复模板选择缺陷修复位置完成缺陷修复,其特征在于,所述的部分C中,依据程序依赖图捕获的缺陷上下文信息与修复模板的相匹配生成程序补丁,利用缺陷检测工具DTSJava验证补丁程序为候选补丁。
CN202210048418.4A 2022-01-17 2022-01-17 程序依赖图引导修复模板的空指针引用自动修复方法 Pending CN114398278A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210048418.4A CN114398278A (zh) 2022-01-17 2022-01-17 程序依赖图引导修复模板的空指针引用自动修复方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210048418.4A CN114398278A (zh) 2022-01-17 2022-01-17 程序依赖图引导修复模板的空指针引用自动修复方法

Publications (1)

Publication Number Publication Date
CN114398278A true CN114398278A (zh) 2022-04-26

Family

ID=81231235

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210048418.4A Pending CN114398278A (zh) 2022-01-17 2022-01-17 程序依赖图引导修复模板的空指针引用自动修复方法

Country Status (1)

Country Link
CN (1) CN114398278A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102613919B1 (ko) * 2022-11-24 2023-12-13 고려대학교 산학협력단 널 포인터 예외를 수정하기 위한 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102613919B1 (ko) * 2022-11-24 2023-12-13 고려대학교 산학협력단 널 포인터 예외를 수정하기 위한 방법

Similar Documents

Publication Publication Date Title
CN108932192B (zh) 一种基于抽象语法树的Python程序类型缺陷检测方法
CN110543421B (zh) 基于测试用例自动生成算法的单元测试自动执行方法
CN110781086B (zh) 一种跨项目缺陷影响分析方法
CN111104335B (zh) 一种基于多层次分析的c语言缺陷检测方法及装置
CN105824756B (zh) 一种基于代码依赖关系的过时需求自动检测方法及系统
CN102375895B (zh) 一种自动构建器件模型参数优化提取过程的方法
CN112214399B (zh) 基于序列模式匹配的api误用缺陷检测系统
CN115905031B (zh) 一种基于精准质量保障系统的测试用例推荐方法
CN108228232B (zh) 一种针对程序中循环问题的自动修复方法
CN114398278A (zh) 程序依赖图引导修复模板的空指针引用自动修复方法
CN114357596B (zh) 一种bim构件资源快捷设计方法及系统
CN112115053A (zh) 基于序列模式匹配的api误用缺陷检测方法
CN112199115A (zh) 基于特征相似度匹配的跨Java字节码和源代码行关联方法
CN117112400A (zh) 测试用例自动生成平台
CN111966578A (zh) 一种安卓兼容性缺陷修复效果的自动化评估方法
CN106991050A (zh) 一种静态测试空指针引用缺陷假阳性识别方法
CN111444106A (zh) 一种对软件可测试需求的分析方法及系统
CN110554952B (zh) 一种基于搜索的分层回归测试数据生成方法
CN116149992A (zh) 航空机载软件安全性分析规则的关联推送方法及其系统
CN106844218B (zh) 一种基于演化切片的演化影响集预测方法
CN116243892B (zh) 一种决策引擎规则的动态java实现方法
CN113568662B (zh) 一种基于调用关系的代码变更影响范围分析方法及系统
CN116880826B (zh) 一种可视化代码生成方法
CN113434408B (zh) 一种基于测试预言的单元测试用例排序方法
CN115934106B (zh) 快速检测apt仓库源依赖完整性的方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication