首页 / 专利库 / 软件 / 控制流图 / 一种基于受限集的程序语义缺陷自动修复方法

一种基于受限集的程序语义缺陷自动修复方法

阅读:249发布:2020-05-13

专利汇可以提供一种基于受限集的程序语义缺陷自动修复方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种基于受限集的程序语义 缺陷 自动修复方法,首先,将常见的程序语义缺陷,根据语法和语义特征归纳总结为缺陷模式,针对变量相关的缺陷模式,将能触发缺陷的相关变量取值集合定义为受限集。然后,基于受限集,对每类缺陷模式预定义修复模板,对于每个缺陷,根据修复模板和检测得到的缺陷信息自动合成修复条件,遵循程序改动最小原则,通过 控制流图 ,利用使用-定义链确定修复 位置 并插入修复条件,实现程序自动修复。本发明提供的技术方案可以有针对性的对程序语义缺陷进行程序自动修复,并且具有修复率高,修复速度快的优点。,下面是一种基于受限集的程序语义缺陷自动修复方法专利的具体信息内容。

1.一种基于受限集的程序语义缺陷自动修复方法,其特征在于,包括以下部分:
A、预定义修复模板,针对缺陷特征给出统一的修复方法,由缺陷报告中的缺陷类型确定对应的预定义修复模板;
B、对缺陷文件进行重建抽象语法树,广度优先遍历AST,找到缺陷语句对应的树结点,更新抽象语法树结点上的缺陷相关信息,获取缺陷操作;
C、获得缺陷相关变量的受限集,进而得到补丁修复条件;
D、遵循程序改动最小原则,利用使用-定义链确定修复位置
2.根据权利要求1所述的一种基于受限集的程序语义缺陷自动修复方法,其特征在于,所述的部分A中,所述预定义修复模板,是通用的缺陷修复模板;程序语义缺陷有语法语义特征,将语义缺陷归纳为缺陷模式,基于缺陷静态检测方法,检测出软件中存在的缺陷,缺陷信息以缺陷报告形式输出,包括缺陷文件名、缺陷类型、缺陷所在行;由通用的缺陷修复模板,针对这些缺陷特征给出统一的修复方法。
3.根据权利要求1所述的一种基于受限集的程序语义缺陷自动修复方法,其特征在于,所述的部分B中,所述更新抽象语法树结点上的缺陷相关信息是指根据读到的缺陷信息对缺陷文件对应的抽象语法树节点上的信息,用于之后的补丁修复位置的确定;重建语法树之后,读取缺陷报告中的信息,将是否为缺陷、缺陷类型、缺陷相关变量三种信息在AST上标记更新结点上的信息,结点初始化默认为非缺陷、缺陷类型和缺陷相关变量为空;广度优先遍历AST,根据缺陷报告中的缺陷信息对AST进行更新。
4.根据权利要求1所述的一种基于受限集的程序语义缺陷自动修复方法,其特征在于,所述的部分C中,所述受限集是指变量可能违反所在程序中合法取值范围的区间集合。
5.根据权利要求4所述的一种基于受限集的程序语义缺陷自动修复方法,其特征在于,令变量区间域记为D,包括空集 连接符集合记作C={∧,∨},如果受限操作的两个操作数都可能违背取值范围,则用连接符∧;否则用连接符∨;由受限集定义受限规则为一个四元组R=,其中domain1表示第一个操作表达式的受限区间域,e表示缺陷表达式,domain2表示第二个操作表达式受限区间域,
c∈C;操作表达式分为操作符前表示式和操作符后表示式,若c=a/b,操作符为算数除法,操作符前表示式为a,操作符后表示式为b,则被除数b的受限集为[0,0]。
6.根据权利要求1所述的一种基于受限集的程序语义缺陷自动修复方法,其特征在于,所述的部分D中,所述程序改动最小原则是指尽量少的对程序进行改动,实现对程序缺陷的修复。
7.根据权利要求6所述的一种基于受限集的程序语义缺陷自动修复方法,其特征在于,设定优先级,优先选择对程序改动最小的方案——对同一语句的同种类型的缺陷进行分析;如果同一类缺陷出现在一个语句块中,且缺陷相关变量相同,没有进行新的赋值也未有对它产生影响的语句的,把语句块开始的位置确定为插入补丁语句的位置;除此之外,把缺陷点的前一位置作为插入位置。

说明书全文

一种基于受限集的程序语义缺陷自动修复方法

技术领域

[0001] 本发明属于程序语义缺陷修复方法技术领域,更具体的说是涉及一种基于受限集的程序语义缺陷自动修复方法。

背景技术

[0002] 程序语义缺陷自动修复的过程包括缺陷特征定义,缺陷检测,语义缺陷自动修复。语义缺陷修复是指对缺陷检测出的语义缺陷进行自动修复以防止程序异常,保证系统的正常运行。
[0003] 越来越多的行业注重对于软件缺陷的检测,大型企业一般会单独设立软件测试工作组,进行缺陷检测,保证系统的正常运行,降低系统崩溃带来的各种损失。据统计,(缺陷检测以及程序语义缺陷的普遍性,)已开发的工程项目中,每一千行代码平均约产生5.1个缺陷。一般项目的代码会过万行,这样的千行缺陷率会导致系统缺少安全性。
[0004] 人工修复缺陷的不足。传统修复方式即人工修复,开发人员忙于算法和功能的实现,缺少专业的安全人员,不能及时发现漏洞,面对数量庞大的漏洞,安全人员疲于应对,没有时间顾及隐含的部分语义缺陷,使得系统运营维护阶段的程序缺陷修复,需要耗费大量的人物力,修复成本高。每修复一个花费时间,修复成本高,而程序自动修复能够为人工审计提供良好的补充,也更为经济。现有的程序自动修复的方法主要有:人工修复、基于搜索的修复方法、基于测试集的修复方法、基于语义的修复方法。
[0005] 传统修复方法的缺点:人工修复不及时,不充分,成本高;基于搜索的修复方法,候选补丁多难找出正确补丁,资源开销大;基于测试集的修复方法,依赖测试集,仅保证功能性修复,修复具有盲目性。
[0006] 因此,如何提供一种基于受限集的程序语义缺陷自动修复方法成为了本领域技术人员亟需解决的问题。

发明内容

[0007] 有鉴于此,本发明提供了一种基于受限集的程序语义缺陷自动修复方法,基于受限集描述变量不合法区间的特点,检测到缺陷后,计算相关变量的受限集,合成修复条件。然后,遵循程序改动最小原则,通过控制流图,利用使用-定义链确定修复位置并插入修复条件,再次检测通过测试用例以及不存在同类缺陷或引入其他缺陷,表示修复成功。
[0008] 为了实现上述目的,本发明采用如下技术方案:
[0009] 一种基于受限集的程序语义缺陷自动修复方法,包括以下部分:
[0010] A、预定义修复模板,针对缺陷特征给出统一的修复方法,由缺陷报告中的缺陷类型确定对应的预定义修复模板;
[0011] B、对缺陷文件进行重建抽象语法树(Abstract Syntax Tree,AST),广度优先遍历AST,找到缺陷语句对应的树结点,更新抽象语法树结点上的缺陷相关信息,获取缺陷操作;
[0012] C、获得缺陷相关变量的受限集,进而得到补丁修复条件;
[0013] D、遵循程序改动最小原则,利用使用-定义链确定修复位置。
[0014] 优选的,所述的部分A中,所述预定义修复模板,是通用的缺陷修复模板(repair-pattern);程序语义缺陷有语法语义特征,将语义缺陷归纳为缺陷模式,基于缺陷静态检测方法,检测出软件中存在的缺陷,缺陷信息以缺陷报告形式输出,包括缺陷文件名、缺陷类型、缺陷所在行等;由通用的缺陷修复模板,针对这些缺陷特征给出统一的修复方法。
[0015] 优选的,所述的部分B中,所述更新抽象语法树结点上的缺陷相关信息是指根据读到的缺陷信息对缺陷文件对应的抽象语法树节点上的信息,用于之后的补丁修复位置的确定;重建语法树之后,读取缺陷报告中的信息,将是否为缺陷、缺陷类型、缺陷相关变量三种信息在AST上标记更新结点上的信息,结点初始化默认为非缺陷、缺陷类型和缺陷相关变量为空;广度优先遍历AST,根据缺陷报告中的缺陷信息对AST进行更新。
[0016] 优选的,所述的部分C中,所述受限集是指变量可能违反所在程序中合法取值范围的区间集合。
[0017] 优选的,令变量区间域记为D,包括空集 连接符集合记作C={∧,∨},如果受限操作的两个操作数都可能违背取值范围,则用连接符∧;否则用连接符∨;由受限集定义受限规则为一个四元组R=,其中domain1表示第一个操作表达式的受限区间域,e表示缺陷表达式,domain2表示第二个操作表达式受限区间域,c∈C;操作表达式分为操作符前表示式和操作符后表示式,若c=a/b,操作符为算数除法,操作符前表示式为a,操作符后表示式为b,则被除数b的受限集为[0,0]。
[0018] 优选的,所述的部分D中,所述程序改动最小原则是指尽量少的对程序进行改动,实现对程序缺陷的修复。
[0019] 优选的,设定优先级,优先选择对程序改动最小的方案——对同一语句的同种类型的缺陷进行分析;如果同一类缺陷出现在一个语句块中,且缺陷相关变量相同,没有进行新的赋值也未有对它产生影响的语句的,把语句块开始的位置确定为插入补丁语句的位置;除此之外,把缺陷点的前一位置作为插入位置。
[0020] 本发明的有益效果在于:
[0021] 本发明将缺陷检测信息用于程序合成补丁,充分利用程序静态检测缺陷报告中的缺陷信息,修复条件不依赖测试用例,结合缺陷本身有关的信息,可以直接通过受限集的计算合成精确的修复条件,遵循程序改动最小原则,确定补丁修复位置,生成补丁程序。避免了传统程序自动修复方法的盲目性,更加具有针对性,修复率更高,使得补丁修复具有针对性,简单高效,修复率和扩展性均较有所提高。附图说明
[0022] 为了更清楚地说明本发明实施例现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0023] 图1附图为本发明的缺陷修复框架图。
[0024] 图2附图为本发明由人工修复经验总结得到通用的缺陷修复模板的结构图。

具体实施方式

[0025] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0026] 请参阅附图1-2,本发明提供了一种基于受限集的程序语义缺陷自动修复方法,包括以下部分:
[0027] A、预定义修复模板,针对缺陷特征给出统一的修复方法,由缺陷报告中的缺陷类型确定对应的预定义修复模板;
[0028] B、对缺陷文件进行重建抽象语法树(Abstract Syntax Tree,AST),广度优先遍历AST,找到缺陷语句对应的树结点,更新抽象语法树结点上的缺陷相关信息,获取缺陷操作;
[0029] C、获得缺陷相关变量的受限集,进而得到补丁修复条件;
[0030] D、遵循程序改动最小原则,利用使用-定义链确定修复位置。
[0031] 其中,在部分A中,所述预定义修复模板,是人工修复经验总结得到通用的缺陷修复模板(repair-pattern);程序语义缺陷有语法语义特征,将语义缺陷归纳为缺陷模式,基于缺陷静态检测方法,检测出软件中存在的缺陷,缺陷信息以缺陷报告形式输出,包括缺陷文件名、缺陷类型、缺陷所在行等;由人工修复经验总结得到通用的缺陷修复模板,针对这些缺陷特征给出统一的修复方法。
[0032] 在部分B中,所述更新抽象语法树结点上的缺陷相关信息是指根据读到的缺陷信息对缺陷文件对应的抽象语法树节点上的信息,用于之后的补丁修复位置的确定;重建语法树之后,读取缺陷报告中的信息,将是否为缺陷、缺陷类型、缺陷相关变量三种信息在AST上标记更新结点(ASTNode)上的信息,结点初始化默认为非缺陷、缺陷类型和缺陷相关变量为空;广度优先遍历AST,根据缺陷报告中的缺陷信息对AST进行更新。
[0033] 在部分C中,所述受限集是指变量可能违反所在程序中合法取值范围的区间集合。令变量区间域记为D,包括空集 连接符集合记作C={∧,∨},如果受限操作的两个操作数都可能违背取值范围,则用连接符∧;否则用连接符∨;由受限集定义受限规则为一个四元组R=,其中domain1表示第一个操作表达式的受限区间域,e表示缺陷表达式,domain2表示第二个操作表达式受限区间域,
c∈C;操作表达式分为操作符前表示式和操作符后表示式,例如,c=a/b,操作符为算数除法,操作符前表示式为a,操作符后表示式为b,由除法的受限规则知被除数不能为零,则被除数b的受限集为[0,0]。
[0034] 在部分D中,所述程序改动最小原则是指尽量少的对程序进行改动,实现对程序缺陷的修复。为了增加程序的可读性,设定优先级,优先选择对程序改动最小的方案——对同一语句块的同种类型的缺陷进行分析;如果同一类缺陷出现在一个语句块中,且缺陷相关变量相同,没有进行新的赋值也未有对它产生影响的语句的,把语句块开始的位置确定为插入补丁语句的位置;除此之外,把缺陷点的前一位置作为插入位置。即以程序改动最小原则,修复多个同类缺陷。
[0035] 本发明将缺陷检测信息用于程序合成补丁,充分利用程序静态检测缺陷报告中的缺陷信息,修复条件不依赖测试用例,结合缺陷本身有关的信息,可以直接通过受限集的计算合成精确的修复条件,遵循程序改动最小原则,确定补丁修复位置,生成补丁程序。避免了传统程序自动修复方法的盲目性,更加具有针对性,修复率更高,使得补丁修复具有针对性,简单高效,修复率和扩展性均较有所提高。
[0036] 应用例1:
[0037] 如下所示程序是Java开源工程jfreechart的PolarPlot.java文件,该程序在1399行进行了变量state初始化为空,而1398行axes.size()可能返回为0,导致接下来的for循环里的语句没有执行,直接执行1411行代码,那state在1417行使用时其值仍然为空,因此,在该处会发生空指针异常缺陷。虽然可以通过测试用例,但仍然可能存在语义缺陷,使用本文的方法可以实现对程序缺陷的修复。利用本文的方法根据缺陷模式选择插入空检查语句,确定变量state的受限集进而合成修复条件state!=null,之后利用定义-使用链和使用-定义链分析确定补丁插入位置,在1416行添加空检查,修复空指针异常缺陷。
[0038] 如果下面中的程序代码1400行开始的for循环中有多个缺陷是由state为空引起的空指针引用异常,state没有进行新的赋值也未有对它产生影响的语句,则把空检查语句放在for循环之前。
[0039]
[0040] 缺陷程序代码
[0041] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0042] 对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈