CN114398278A - 程序依赖图引导修复模板的空指针引用自动修复方法 - Google Patents
程序依赖图引导修复模板的空指针引用自动修复方法 Download PDFInfo
- 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
Links
Images
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/362—Software debugging
- G06F11/3628—Software 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
技术领域
本发明涉及一种空指针引用缺陷自动修复的方法,特别涉及一种利用程序依赖图对程序间的控制和数据依赖关系详细分析对空指针引用缺陷实施不同的缺陷修复机制生成候选补丁。
背景技术
程序缺陷修复是软件开发及维护过程中繁琐且无可避免的工作,极大消耗和降低软件开发人员的精力和效率,因此程序自动修复技术成为一大研究热点,目前的程序自动修复技术主要分为三个阶段:缺陷定位,补丁生成和补丁验证。不同缺陷产生的原因以及缺陷影响域各不相同,对所有的程序缺陷制定通用的修复策略往往会造成不精确的缺陷修复位置和不恰当的修复策略,造成补丁的搜索范围较大且所获得修复补丁并不正确,修复效率大大下降。综上所述,对于特定的程序缺陷制定特定的修复策略显得尤为重要。
发明内容
有鉴于此,本发明的主要目的在于通过实现对程序依赖关系的精细化分析,归纳总结修复方式提出了赋值、约束、规避、转移机制制定修复模板。针对此提出了程序依赖图引导修复模板的空指针引用自动修复方法。
为达到上述目的,本发明的技术方案是这样实现的:
程序依赖图引导修复模板的空指针引用自动修复方法,该方法包括:
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的取值则通过反射机制获取返回类型的构造方法得到。
所述步骤C中的依据缺陷程序的上下文信息匹配修复模板选择缺陷修复位置完成程序自动修复的总体框架如图2所示。
本发明所提供的程序依赖图引导修复模板的空指针引用自动修复方法,具有以下优点:
本发明的空指针引用修复方法相比现有的大多数修复方法,可实现对程序缺陷点变量或对象的精确依赖关系分析,同时将修复方式细化成四种修复策略可形成多策略的空指针引用的修复方式。
附图说明
图1为程序依赖图的构建示例;
图2为程序自动修复的总体框架。
具体实施方式
下面结合本发明的示例对本发明的空指针引用作进一步详细的说明。
如,下面代码段:
(a)
(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验证补丁程序为候选补丁。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102613919B1 (ko) * | 2022-11-24 | 2023-12-13 | 고려대학교 산학협력단 | 널 포인터 예외를 수정하기 위한 방법 |
-
2022
- 2022-01-17 CN CN202210048418.4A patent/CN114398278A/zh active Pending
Cited By (1)
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 |