CN110442517A - 一种自动程序修复中获取安全补丁的方法 - Google Patents

一种自动程序修复中获取安全补丁的方法 Download PDF

Info

Publication number
CN110442517A
CN110442517A CN201910650496.XA CN201910650496A CN110442517A CN 110442517 A CN110442517 A CN 110442517A CN 201910650496 A CN201910650496 A CN 201910650496A CN 110442517 A CN110442517 A CN 110442517A
Authority
CN
China
Prior art keywords
patch
test
auto
program
programming
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
CN201910650496.XA
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.)
Jinan University
University of Jinan
Original Assignee
Jinan University
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 Jinan University filed Critical Jinan University
Priority to CN201910650496.XA priority Critical patent/CN110442517A/zh
Publication of CN110442517A publication Critical patent/CN110442517A/zh
Pending legal-status Critical Current

Links

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/079Root cause analysis, i.e. error or fault diagnosis
    • 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/366Software debugging using diagnostics
    • 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
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • 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
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

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)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种自动程序修复中获取安全补丁的方法,包括如下步骤:定位缺陷错误位置,解析缺陷位置处的语义信息,进而在补丁空间中寻找合适的补丁;判定补丁来源并对补丁排列优先级;利用静态分析框架检查优先级最高的补丁,若该补丁通过静态分析检验,则使用测试集对该补丁进行评估;若该补丁;通过评估,则认为该补丁正确,使用该正确的补丁修复程序缺陷;若补丁未通过静态分析检查或未通过测试集评估,则选取优先级次高的补丁进行检验,直至找到正确合法的补丁或检验完所有的候选补丁。此方法根据自动程序修复方法生成的补丁候选者列表进行排序,生成优先级补丁候选者列表,并对补丁进行校验,最终获取更安全的补丁。

Description

一种自动程序修复中获取安全补丁的方法
技术领域
本发明涉及自动程序修复领域,具体为一种自动程序修复中通过添加补丁校验获取安全补丁的方法。
背景技术
由于需求理解错误、开发过程不合理和开发者经验不足,软件中不可避免地存在已知或未知的缺陷。通过软件维护减少由于软件错误引起的软件缺陷是软件工程中不可缺少的重要环节。传统方法通过人力进行软件维护会浪费大量的劳动力和时间成本。因此,这就需要自动程序修复促使开发者更快的修复程序中的缺陷。
当前主流的自动程序修复方法是使用测试集对程序缺陷进行定位和修复。使用测试集修复程序缺陷的自动程序修复方法主要分为两类:一类是基于搜索,另一类是基于语义。基于搜索的自动程序修复方法通过基于搜索的软件工程在搜索空间中寻找最合适的补丁。这类自动程序修复方法的代表有GenProg、Prophet等。基于语义的自动程序修复方法通过提取程序的语义信息和测试集中的补丁约束以合成合适的补丁。这类自动程序修复方法的代表有Angelix等。
然而,目前的自动程序修复方法无法保证修复的安全性。虽然在Y Xiong等人[Xiong,Yingfei,et al."Precise condition synthesis for program repair."2017IEEE/ACM 39th International Conference on Software Engineering(ICSE).IEEE,2017.]提到自动化程序修复的过拟合现象,或者在Long等人[Long,Fan,and MartinRinard."Automatic patch generation by learning correct code."ACM SIGPLANNotices.Vol.51.No.1.ACM,2016.]提出一个通过机器学习方法学习人类修复补丁的过程以提高自动程序修复方法的修复准度,但是这些方案却不能保证经过自动程序修复方法修复后的程序可能从有问题的补丁引入新的缺陷,从而影响程序的健壮性以及安全性。
发明内容
本发明的目的是为了解决现有技术中的上述缺陷,提供一种自动程序修复中获取安全补丁的方法。此方法根据自动程序修复方法生成的补丁候选者列表进行排序,生成优先级补丁候选者列表,对补丁进行校验,最终获取更安全的补丁。
本发明的目的能够通过采取如下技术方案达到:
一种自动程序修复中获取安全补丁的方法,包括如下步骤:
定位缺陷错误位置,解析缺陷位置处的语义信息,进而在补丁空间中寻找合适的补丁;
判定补丁来源并对补丁排列优先级,当补丁来源于自身程序,则对程序进行区域划分,对每个区域计算其复杂度;通过补丁所在区域的复杂度对补丁进行排序,复杂度越低则优先级越高;当补丁来源于开源社区或者问答网站,则以信任度作为指标对补丁进行排序;
利用静态分析框架检查优先级最高的补丁,若该补丁通过静态分析检验,则使用测试集对该补丁进行评估;若该补丁;通过评估,则认为该补丁正确,使用该正确的补丁修复程序缺陷;若补丁未通过静态分析检查或未通过测试集评估,则选取优先级次高的补丁进行检验,直至找到正确合法的补丁或检验完所有的候选补丁。
优选的,所述定位缺陷错误位置,解析缺陷位置处的语义信息的步骤具体为:
基于频谱定位缺陷错误位置,利用测试用例集进行程序的测试过程中,收集程序语句的覆盖情况和测试通过与否等相关信息,将每一程序实体s相关的统计数据用一个四元组T(s)=<Tep(s),Tef(s),Tnp(s),Tnf(s)>来表示,其中Tep(s)和Tef(s)分别表示覆盖程序实体s的成功测试用例数和失败测试用例数,Tnp(s)和Tnf(s)分别表示未覆盖程序实体s的成功测试用例数和失败测试用例数;测试套件T中所有成功测试用例数Tp=Tep(s)+Tnp(s),所有失败测试用例数Tf=Tef(s)+Tnf(s),所有测试套件T=Tp+Tf;Tep(s)的数值越大,说明语句s执行且用例成功的次数多,s是缺陷语句的可能性越小;Tef(s)的数值越大,说明语句s执行且用例错误的次数多,s是缺陷语句的可能性越大;Tnf(s)的数值越大,则说明语句s没有被执行到的情况下错误越多,这间接说明s是缺陷语句的可能性越小;
解析缺陷位置处的语义信息:对结构上正确的源程序进行上下文审查。
优选的,当补丁来源于自身程序,以一个函数作为一个区域,将程序划分为若干区域,定位各区域,计算各区域的复杂度;因为程序一般以函数作为程序中一个功能的整体,因此选取函数作为计算程序复杂度,计算出的复杂度细粒度高;
获取补丁所在区域,该区域的复杂度即为补丁的复杂度;
将自动程序修复生成的补丁候选者列表按照其所在区域复杂度进行排序,复杂度低的补丁优先级高,从而获得优先级列表。
优选的,当补丁来源于不同的源,需要提供通用的评分标准,具体评分标准如下:
S=Wd*Sd+Wc*Sc
其中Wd表示开源社区或问答网站的信任度权重,该权重在所有开源社区或问答网站的值都是相同的;Sd表示开源社区或问答网站的分数,该分数本发明采用访问度作为指标,对访问数更多的开源社区或问答网站给予更高的评分,Wc表示补丁源的评分权重,Sc表示补丁源在开源社区或问答网站中的评分;
通过对补丁候选者列表中的补丁进行评分并从高到低进行排序,生成优先级列表,通过权重评分,增加了补丁优先级排序的公正性。
优选的,所述定位各区域的步骤具体为:
程序中的函数具有明显的特征,对于Java程序,函数信息在字节码.class文件记录,保存在class文件的方法表;在C++或C编译的程序Linux下通过程序链接表(PLT,Procedure Link Table)观察函数信息,或直接解析可执行链接格式文件(ELF,Executableand Linkable Format)获取到函数信息;在Windows下,通过解析PE文件获取函数信息以及函数的二进制数据,通过转换获取去汇编形式。
更进一步的,所述计算区域复杂度具体步骤为:
基于McCabe度量法计算区域复杂度V(G),V(G)=D或V(G)=E–N+2或V(G)=P+1;
其中,D表示区域数;E表示流图中边的数,N表示流图中的节点;P表示判定节点(有两条输出弧)的数目,有n条输出弧的判定结点对应程序中的n-1个判断,n>2。根据程序实际上下文动态调整计算的参数,从而使获得补丁的优先级分数能够更加准确。
优选的,所述静态分析框架为LLVM(Low Level Virtula Machine低级虚拟机)框架中的Clang静态分析器(Clang Static Analyzer一种轻量级编译器)构建的静态分析框架。若采用测试用例对补丁进行校验,测试用例错误可能定位错误,从而影响修复稳定性和复杂性,而LLVM构建的静态分析框架具有更好的扩展性和伸缩性,能够快速地为特定的缺陷设计检查器,并且能够使用LLVM内置的缺陷检查器,包括空指针、不安全应用程序编程接口、除零错误等,构建简单且稳定,扩展性强。
优选的,所述测试集中包括测试输入(即程序运行测试用例)以及测试预言(即在测试时确定与实际结果进行比较的预期结果的源),打补丁后的程序运行测试用例(是为某个特殊目标而编制的一组输入参数、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求)的输入参数,输出结果如果满足测试预言,则认为该补丁正确,如果测试预言和测试用例的输出结果不一致,则该补丁无效,无法通过测试集;如果该补丁通过测试集,则认为该补丁正确合法,自动程序修复方法使用该正确的补丁修复程序缺陷;若该补丁未通过静态分析检查或未通过测试集,则选取优先级次高的补丁进行检验,直至找到正确合法的补丁或检验完所有候选补丁。
本发明相对于现有技术具有如下的优点及效果:
1)本发明对补丁候选者列表进行排序,能够促使自动程序修复方法更好更快地获取更安全地补丁,并且不会影响自动程序修复方法生成补丁的过程。
2)本发明在补丁校验过程中采用的是静态分析校验,无需测试用例,校验过程构建简单且稳定,扩展性强。
3)本发明所提方法能够促使自动程序修复方法获取安全性最高的补丁,大大降低自动程序修复方法修复过程中的安全隐患。
附图说明
图1是当前主流的自动程序修复方法中存在安全隐患的主要步骤示意图。
图2是本发明技术方案中以自身代码为搜索空间的补丁优先级列表生成示意图。
图3是本发明技术方案中以开源社区或者问答网站为搜索空间的补丁优先级列表生成示意图。
图4是本发明技术方案中安全补丁获取流程。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
下面结合附图1、附图2、附图3和附图4对本发明所述的技术方案进行详细说明。
一种补丁来自于修复程序自身的获取安全补丁的方法,包括如下步骤:
S1、定位缺陷错误位置,这里的缺陷定位一般采用基于频谱的缺陷定位方法:程序频谱主要是指程序执行过程中产生的关于程序语句的覆盖信息(被覆盖为1,未覆盖为0),以及执行是否通过信息。利用测试用例集进行程序的测试过程中,收集程序语句的覆盖情况和测试通过与否等相关信息,将每一程序实体s相关的统计数据用一个四元组T(s)=<Tep(s),Tef(s),Tnp(s),Tnf(s)>来表示,其中Tep(s)和Tef(s)分别表示覆盖程序实体s的成功测试用例数和失败测试用例数,Tnp(s)和Tnf(s)分别表示未覆盖程序实体s的成功测试用例数和失败测试用例数。测试套件T中所有成功测试用例数Tp=Tep(s)+Tnp(s),所有失败测试用例数Tf=Tef(s)+Tnf(s),所有测试套件T=Tp+Tf。Tep(s)的数值越大,说明语句s执行且用例成功的次数多,s是缺陷语句的可能性越小;Tef(s)的数值越大,说明语句s执行且用例错误的次数多,s是缺陷语句的可能性越大;Tnf(s)的数值越大,则说明语句s没有被执行到的情况下错误越多,这间接说明s是缺陷语句的可能性越小。
S2、然后,解析缺陷位置处的语义信息:解析语义信息,即语义分析,是编译过程的一个逻辑阶段,语义分析的任务是对结构上正确的源程序进行上下文进行审查,进而在补丁空间中搜索合适的补丁。自动程序修复方法常用的补丁空间有自身代码、开源社区、问答网站等,并最终通过测试集验证补丁的正确性。如果在补丁空间中选取的补丁中包含新的未知缺陷,且新的缺陷不能通过该测试集进行检测,则自动程序修复方法就会将未知缺陷引入到程序中,进而影响程序的安全性和质量,大大增加软件的维护成本。
定义F为程序中所有函数的集合,V为程序中所有缺陷函数的集合,R为开源代码仓库中函数的集合,S为补丁空间中函数的集合。对于集合V、S,满足S=F∪R。定义缺陷检测器DE为测试集E维度下函数F到{0,1}的一个映射,如式(1)所示。
缺陷检测器DE检测待检测程序并返回1(包含缺陷)或0(不包含缺陷)。
自动程序修复方法修复程序缺陷需要根据缺陷函数的语义信息,在补丁空间中寻找合适的补丁,在测试集E的维度下成功修复缺陷,如式(2)所示。
其中fix(f,s)为返回自动程序修复方法中通过补丁函数s修复缺陷函数f后的结果,即返回插入补丁后的函数。
自动程序修复方法根据缺陷函数f和测试集E在集合S中寻找补丁s,使DE(s)||DE((fix(f,s))=0。然而,在其它测试集(如E′)维度下有DE′(s)=1,即补丁s包含未知缺陷,但在测试集E维度下无法定位该未知缺陷,此时修复后的程序包含该未知缺陷,使DE′((fix(f,s))=1,此时自动程序修复方法存在安全隐患。
S3、如果自动程序修复方法修复程序使用的补丁来自于修复程序自身,首先把程序划分为多个区域,具体区域划分采取方案为:以程序函数作为区域进行划分。程序一般以函数作为程序中一个功能的整体,因此选取函数作为计算程序复杂度,计算出的复杂度细粒度高。计算函数的复杂度,首先需要定位每个函数的具体位置,程序中的函数具有明显的特征。例如对于Java程序,函数信息在字节码.class文件记录,保存在class文件的方法表,在C++或C编译的程序Linux下能够通过程序链接表(PLT,Procedure Link Table)观察函数信息,也能够直接解析可执行链接格式文件(ELF,Executable and Linkable Format),获取到函数信息,而在Windows下,能够通过解析PE文件获取函数信息以及函数的二进制数据,通过转换能够获取去汇编形式。成功获取程序中各个区域的函数信息后,采用T.J.McCabe提出的程序复杂度计算方法计算每个区域的复杂度。McCabe度量法是一种基于程序控制流的复杂性度量方法,又称环路度量。程序的复杂度很大程度取决于程序图的复杂度,通过程序图的环路数作为程序复杂性的度量值。使用如下三种方法中的一种计算环形复杂度:
1)V(G)=D,D表示区域数;
2)V(G)=E–N+2,E表示流图中边的数,N表示流图中的节点;
3)V(G)=P+1,P表示判定节点(有两条输出弧)的数目,有n(n>2)条输出弧的判定结点对应程序中的n-1个判断。
当程序内分支数或循环个数增加时,复杂度也随之提升,本实施例将自动程序修复生成的补丁候选者列表按照其所在区域复杂度进行排序,复杂度低的补丁优先级高,优先获取复杂度更低的补丁,最终获得优先级列表。
S4、本实施例采用LLVM框架中的Clang静态分析器(Clang Static Analyzer)构建静态分析框架。LLVM构建的静态分析框架具有更好的扩展性和伸缩性,能够快速地为特定的缺陷设计检查器,并且能够使用LLVM内置的缺陷检查器,包括空指针、不安全应用程序编程接口、除零错误等。
从补丁候选者优先级列表中抽取优先级最高的补丁,通过由LLVM框架构建的静态分析器校验该补丁的安全性,如果补丁通过静态分析检查,则再使用测试集对该补丁进行评估,具体评估过程如下:测试集中包括测试输入以及测试预言,打补丁后的程序运行测试用例的输入参数,输出结果如果满足测试预言,则认为该补丁正确,如果测试预言和测试用例的输出结果不一致,则该补丁无效,无法通过测试集。如果该补丁通过测试集,则本发明认为该补丁正确合法,自动程序修复方法使用该正确的补丁修复程序缺陷。若该补丁未通过静态分析检查或未通过测试集,本发明则选取优先级次高的补丁进行检验,直至找到正确合法的补丁或检验完所有候选补丁。
实施例2
一种补丁来自于开源社区或者问答网站的获取安全补丁的方法,本实施例根据开源社区或者问答网站提供的评分指标对补丁进行评判。例如GitHub的Star数,根据Star的数目对补丁进行排序,最终获得优先级列表。如果补丁来源于不同的源,需要提供通用的评分标准,因此,本发明对不同的开源社区或者问答网站提供一个通用的评分指标,具体评分方法如式(3)所示。
S=Wd*Sd+Wc*Sc (3)
其中Wd表示开源社区或问答网站的信任度权重,该权重在所有开源社区或问答网站的值都是相同的。Sd表示开源社区或问答网站的分数,该分数本发明采用访问度作为指标,对访问数更多的开源社区或问答网站给予更高的评分,Wc表示补丁源的评分权重,Sc表示补丁源在开源社区或问答网站中的评分。
最终,通过对补丁候选者列表中的补丁进行评分并从高到低进行排序,生成优先级列表。
本实施例其他步骤与实施例1相同,在此不再赘述。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

Claims (8)

1.一种自动程序修复中获取安全补丁的方法,其特征在于,包括如下步骤:
定位缺陷错误位置,解析缺陷位置处的语义信息,进而在补丁空间中寻找合适的补丁;
判定补丁来源并对补丁排列优先级,当补丁来源于自身程序,则对程序进行区域划分,对每个区域计算其复杂度;通过补丁所在区域的复杂度对补丁进行排序,复杂度越低则优先级越高;当补丁来源于开源社区或者问答网站,则以信任度作为指标对补丁进行排序;
利用静态分析框架检查优先级最高的补丁,若该补丁通过静态分析检验,则使用测试集对该补丁进行评估;若该补丁;通过评估,则认为该补丁正确,使用该正确的补丁修复程序缺陷;若补丁未通过静态分析检查或未通过测试集评估,则选取优先级次高的补丁进行检验,直至找到正确合法的补丁或检验完所有的候选补丁。
2.根据权利要求1所述的自动程序修复中获取安全补丁的方法,其特征在于,所述定位缺陷错误位置,解析缺陷位置处的语义信息的步骤具体为:
基于频谱定位缺陷错误位置,利用测试用例集进行程序的测试过程中,收集程序语句的覆盖情况和测试通过与否的信息,将每一程序实体s相关的统计数据用一个四元组T(s)=<Tep(s),Tef(s),Tnp(s),Tnf(s)>来表示,其中Tep(s)和Tef(s)分别表示覆盖程序实体s的成功测试用例数和失败测试用例数,Tnp(s)和Tnf(s)分别表示未覆盖程序实体s的成功测试用例数和失败测试用例数;测试套件T中所有成功测试用例数Tp=Tep(s)+Tnp(s),所有失败测试用例数Tf=Tef(s)+Tnf(s),所有测试套件T=Tp+Tf;Tep(s)的数值越大,说明语句s执行且用例成功的次数多,s是缺陷语句的可能性越小;Tef(s)的数值越大,说明语句s执行且用例错误的次数多,s是缺陷语句的可能性越大;Tnf(s)的数值越大,则说明语句s没有被执行到的情况下错误越多,这间接说明s是缺陷语句的可能性越小;
解析缺陷位置处的语义信息:对结构上正确的源程序进行上下文审查。
3.根据权利要求1所述的自动程序修复中获取安全补丁的方法,其特征在于,当补丁来源于自身程序,以一个函数作为一个区域,将程序划分为若干区域,定位各区域,计算各区域的复杂度;获取补丁所在区域,该区域的复杂度即为补丁的复杂度;
将自动程序修复生成的补丁候选者列表按照其所在区域复杂度进行排序,复杂度低的补丁优先级高,从而获得优先级列表。
4.根据权利要求1所述的自动程序修复中获取安全补丁的方法,其特征在于,当补丁来源于不同的源,需要提供通用的评分标准,具体评分标准如下:
S=Wd*Sd+Wc*Sc
其中Wd表示开源社区或问答网站的信任度权重,该权重在所有开源社区或问答网站的值都是相同的;Sd表示开源社区或问答网站的分数,该分数本发明采用访问度作为指标,对访问数更多的开源社区或问答网站给予更高的评分,Wc表示补丁源的评分权重,Sc表示补丁源在开源社区或问答网站中的评分;
通过对补丁候选者列表中的补丁进行评分并从高到低进行排序,生成优先级列表。
5.根据权利要求1所述的自动程序修复中获取安全补丁的方法,其特征在于,所述定位各区域的步骤具体为:
程序中的函数具有明显的特征,对于Java程序,函数信息在字节码.class文件记录,保存在class文件的方法表;在C++或C编译的程序Linux下通过程序链接表观察函数信息,或直接解析可执行链接格式文件获取到函数信息;在Windows下,通过解析PE文件获取函数信息以及函数的二进制数据,通过转换获取去汇编形式。
6.根据权利要求5所述的自动程序修复中获取安全补丁的方法,其特征在于,所述计算区域复杂度具体步骤为:
基于McCabe度量法计算区域复杂度V(G),V(G)=D或V(G)=E–N+2或V(G)=P+1;
其中,D表示区域数;E表示流图中边的数,N表示流图中的节点;P表示判定节点的数目,有n条输出弧的判定结点对应程序中的n-1个判断,n>2。
7.根据权利要求1所述的自动程序修复中获取安全补丁的方法,其特征在于,所述静态分析框架为LLVM框架中的Clang静态分析器构建的静态分析框架。
8.根据权利要求1所述的自动程序修复中获取安全补丁的方法,其特征在于,所述测试集中包括测试输入以及测试预言,打补丁后的程序运行测试用例的输入参数,输出结果如果满足测试预言,则认为该补丁正确,如果测试预言和测试用例的输出结果不一致,则该补丁无效,无法通过测试集;如果该补丁通过测试集,则认为该补丁正确合法,自动程序修复方法使用该正确的补丁修复程序缺陷;若该补丁未通过静态分析检查或未通过测试集,则选取优先级次高的补丁进行检验,直至找到正确合法的补丁或检验完所有候选补丁。
CN201910650496.XA 2019-07-18 2019-07-18 一种自动程序修复中获取安全补丁的方法 Pending CN110442517A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910650496.XA CN110442517A (zh) 2019-07-18 2019-07-18 一种自动程序修复中获取安全补丁的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910650496.XA CN110442517A (zh) 2019-07-18 2019-07-18 一种自动程序修复中获取安全补丁的方法

Publications (1)

Publication Number Publication Date
CN110442517A true CN110442517A (zh) 2019-11-12

Family

ID=68430717

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910650496.XA Pending CN110442517A (zh) 2019-07-18 2019-07-18 一种自动程序修复中获取安全补丁的方法

Country Status (1)

Country Link
CN (1) CN110442517A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111124922A (zh) * 2019-12-25 2020-05-08 暨南大学 基于规则的自动程序修复方法、存储介质和计算设备
CN111177733A (zh) * 2019-12-30 2020-05-19 北京航空航天大学 一种基于数据流分析的软件补丁检测方法及装置
CN111897946A (zh) * 2020-07-08 2020-11-06 扬州大学 漏洞补丁推荐方法、系统、计算机设备和存储介质
US20230130772A1 (en) * 2021-10-22 2023-04-27 Suresoft Technologies Inc. Method for Selecting the Last Patch from Among a Plurality Patches for Same Location and the Last Patch Selection Module

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105095085A (zh) * 2015-08-25 2015-11-25 暨南大学 一种基于web的软件测试实训系统及方法
CN105335246A (zh) * 2015-10-27 2016-02-17 北京大学 一种基于问答网站分析的程序崩溃缺陷自动修复方法
US20180011700A1 (en) * 2016-07-11 2018-01-11 Sap Se Prioritization of software patches
CN107577603A (zh) * 2017-08-31 2018-01-12 中国科学院软件研究所 一种基于测试用例构建决策树的程序条件语句自动化修复系统及方法
US20180165182A1 (en) * 2016-12-09 2018-06-14 Fujitsu Limited Automated software program repair

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105095085A (zh) * 2015-08-25 2015-11-25 暨南大学 一种基于web的软件测试实训系统及方法
CN105335246A (zh) * 2015-10-27 2016-02-17 北京大学 一种基于问答网站分析的程序崩溃缺陷自动修复方法
US20180011700A1 (en) * 2016-07-11 2018-01-11 Sap Se Prioritization of software patches
US20180165182A1 (en) * 2016-12-09 2018-06-14 Fujitsu Limited Automated software program repair
CN107577603A (zh) * 2017-08-31 2018-01-12 中国科学院软件研究所 一种基于测试用例构建决策树的程序条件语句自动化修复系统及方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
王赞等: "自动程序修复方法研究述评", 《计算机学报》 *
蔡蕊等: "基于程序频谱的缺陷定位方法", 《计算机系统应用》 *
鹤顶一支草: "McCabe环路复杂度计算方法", 《博客园:HTTPS://WWW.CNBLOGS.COM/ARIESQT/P/7411719.HTML》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111124922A (zh) * 2019-12-25 2020-05-08 暨南大学 基于规则的自动程序修复方法、存储介质和计算设备
CN111124922B (zh) * 2019-12-25 2023-05-30 暨南大学 基于规则的自动程序修复方法、存储介质和计算设备
CN111177733A (zh) * 2019-12-30 2020-05-19 北京航空航天大学 一种基于数据流分析的软件补丁检测方法及装置
CN111177733B (zh) * 2019-12-30 2022-06-21 北京航空航天大学 一种基于数据流分析的软件补丁检测方法及装置
CN111897946A (zh) * 2020-07-08 2020-11-06 扬州大学 漏洞补丁推荐方法、系统、计算机设备和存储介质
CN111897946B (zh) * 2020-07-08 2023-09-19 扬州大学 漏洞补丁推荐方法、系统、计算机设备和存储介质
US20230130772A1 (en) * 2021-10-22 2023-04-27 Suresoft Technologies Inc. Method for Selecting the Last Patch from Among a Plurality Patches for Same Location and the Last Patch Selection Module
US11822915B2 (en) * 2021-10-22 2023-11-21 Suresoft Technologies Inc. Method for selecting the last patch from among a plurality patches for same location and the last patch selection module

Similar Documents

Publication Publication Date Title
CN110442517A (zh) 一种自动程序修复中获取安全补丁的方法
Karampatsis et al. How often do single-statement bugs occur? the manysstubs4j dataset
US20150370685A1 (en) Defect localization in software integration tests
KR101051600B1 (ko) 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
CN104536883B (zh) 一种静态缺陷检测方法及其系统
Gong et al. Interactive fault localization leveraging simple user feedback
CN108804326B (zh) 一种软件代码自动检测方法
US20160342720A1 (en) Method, system, and computer program for identifying design revisions in hardware design debugging
KR20110020520A (ko) 소프트웨어 개발 과정이 통합된 소프트웨어의 안전성 분석 방법 및 그를 위한 시스템
Fry et al. Clustering static analysis defect reports to reduce maintenance costs
Femmer Reviewing Natural Language Requirements with Requirements Smells–A Research Proposal–
Binamungu et al. Detecting duplicate examples in behaviour driven development specifications
Dakhel et al. Effective test generation using pre-trained large language models and mutation testing
Islam et al. Comparing bug replication in regular and micro code clones
CN112685320B (zh) 一种基于多候选程序的软件缺陷修复方法及装置
US11086768B1 (en) Identifying false positives in test case failures using combinatorics
US10761962B1 (en) Automated software program repair
JP2020129371A (ja) 自動化されたソフトウェアプログラム修復
JP2020126603A (ja) 自動候補修正パッチ生成
WO2023030282A1 (en) Methods and devices for assessing generalizability of benchmarks
CN115827353A (zh) 故障诊断方法及装置
CN113051582B (zh) 一种计算机软件技术开发调试系统
CN106095663B (zh) 基于切片模型的程序回归错误定位方法
Saxena et al. Software Fault Localization: Techniques, Issues and Remedies.
Muñoz et al. Revisiting Fault Localization Techniques for Model Transformations: Towards A Hybrid Approach.

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
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20191112

WD01 Invention patent application deemed withdrawn after publication