×

使用演绎合成自动修复堆操作程序。 (英语) Zbl 1472.68040号

Henglein,Fritz(编辑)等人,《验证、模型检验和抽象解释》。第22届国际会议,VMCAI 2021,丹麦哥本哈根,2021年1月17日至19日。诉讼程序。查姆:斯普林格。莱克特。注释计算。科学。12597, 376-400 (2021).
总结:我们提出了一种使用约束求解和演绎合成自动修复错误堆操作程序的新方法。给定输入程序C及其以Hoare三元组形式的形式规范:\(\{\mathcal{P}\}\)C\({\mathcal{Q}\}\),我们使用基于分离逻辑的验证器来验证程序C其规格正确。如果程序C如果发现有bug,我们将按照以下步骤进行修复。首先,我们根据验证结果收集错误程序的可疑语句列表。对于每个可疑的语句,我们临时用表示所需语句的模板补丁替换它。模板补丁也使用一对未知的前置和后置条件进行正式指定。接下来,我们使用验证器分析临时修补程序,以收集与模板修补的前置和后置条件相关的约束。然后,使用我们的约束求解技术求解这些约束,以发现合适的模板补丁规范。随后,这些规范可用于合成模板补丁的程序语句,从而创建候选程序。最后,如果候选程序经过验证,它将作为修复的程序返回。我们通过对231个缺陷程序的基准测试,评估我们的实现和最先进的方法,证明了我们方法的有效性。实验结果表明,我们的工具成功地修复了223个有缺陷的程序,性能明显优于比较工具。
关于整个系列,请参见[Zbl 1471.68017号].

MSC公司:

68号30 软件工程的数学方面(规范、验证、度量、需求等)
68第05页 数据结构
PDF格式BibTeX公司 XML格式引用
全文: DOI程序

参考文献:

[1] 布罗瑟斯顿,J。;辛普森,A.,归纳和无限下降的序贯计算,J.逻辑计算。,21, 6, 1177-1216 (2011) ·Zbl 1242.03084号 ·doi:10.1093/log.com/exq052
[2] Calcagno,C.,Distefano,D.:推断:用于C程序内存安全的自动程序验证器。摘自:NASA形式方法国际研讨会(NFM),第459-465页(2011年)
[3] Calcagno,C.:软件验证进展迅速。在:美国国家航空航天局正式方法国际研讨会(NFM),第3-11页(2015)
[4] Calcagno,C.,Distefano,D.,O'Hearn,P.W.,Yang,H.:通过双折法进行成分形状分析。J.ACM 58(6),26:1-26:66(2011)·Zbl 1281.68155号
[5] Charguéraud,A.:序列程序的分离逻辑(功能珍珠)。摘自:函数式编程国际会议(ICFP),第116:1-116:34页(2020年)
[6] Chin,W.N.,David,C.,Nguyen,H.H.,Qin,S.:使用分离逻辑增强模块化OO验证。摘自:程序设计语言原则研讨会(POPL),第87-99页(2008年)·Zbl 1295.68082号
[7] Chin,W.N.,David,C.,Nguyen,H.H.,Qin,S.:通过分离逻辑中用户定义的谓词自动验证形状、大小和袋子属性。科学。计算。程序。(SCP)77(9),1006-1036(2012)·Zbl 1243.68148号
[8] Costea,A.,Zhu,A.,Polikarpova,N.,Sergey,I.:简明只读规范,用于更好地综合带有指针的程序。摘自:欧洲规划研讨会(ESOP),第141-168页(2020年)·Zbl 1508.68056号
[9] 库索,P.,库索,R.:抽象解释:通过构造或近似不动点对程序进行静态分析的统一格模型。摘自:程序设计语言原则研讨会(POPL),第238-252页(1977年)
[10] de Moura,L.M.,Björner,N.:Z3:高效SMT求解器。摘自:国际系统构建和分析工具和算法会议(TACAS),第337-340页(2008年)
[11] Demsky,B.,Rinard,M.C.:自动检测和修复数据结构中的错误。摘自:面向对象编程系统语言与应用国际会议(OOPSLA),第78-95页(2003)
[12] Demsky,B.,Rinard,M.C.:使用目标导向推理修复数据结构。摘自:国际软件工程会议(ICSE),第176-185页(2005)
[13] Gopinath,D.,Malik,M.Z.,Khurshid,S.:使用SAT进行基于规范的程序修复。In:系统构建和分析工具和算法国际会议(TACAS),第173-188页(2011)·Zbl 1315.68092号
[14] Gulwani,S.、Radiček,I.、Zuleger,F.:介绍性编程作业的自动集群和程序修复。在编程语言设计与实现会议(PLDI),第465-480页(2018)
[15] Gupta,R.,Pal,S.,Kanade,A.,Shevade,S.:深度修复:通过深度学习修复常见的C语言错误。摘自:AAAI人工智能会议(AAAI),第1345-1351页(2017)
[16] Harman,M.,《自动修补技术:修复方法:技术视角》,Tech.Perspect。Commun公司。ACM,53、5、108(2010年)·doi:10.1145/1735223.1735248
[17] Hong,S.、Lee,J.、Lee,J.和Oh,H.:节省:可扩展、精确和安全的内存错误修复。参加:国际软件工程会议(ICSE)(2020年)
[18] Hu,Y.,Ahmed,U.Z.,Mechtaev,S.,Leong,B.,Roychoudhury,A.:基于重构的程序修复应用于编程任务。摘自:自动化软件工程国际会议(ASE),第388-398页(2019年)
[19] Ishtiaq,S.S.,O'Hearn,P.W.:BI作为可变数据结构的断言语言。摘自:程序设计语言原则研讨会,第14-26页(2001年)·兹比尔1323.68077
[20] Jackson,D.,Vaziri,M.:使用约束求解器查找错误。摘自:软件测试与分析国际研讨会(ISSTA),第14-25页(2000)
[21] Kim,D.、Nam,J.、Song,J.和Kim,S.:从人工编写的补丁中学习自动补丁生成。摘自:国际软件工程会议(ICSE),第802-811页(2013)
[22] Kneuss,E。;库库托斯,M。;昆卡,V。;Kroening,D。;Péséreau,CS,演绎程序修复,计算机辅助验证,217-233(2015),Cham:Springer,Cham·doi:10.1007/978-3-319-21668-3_13
[23] Kneuss,E.,Kuraj,I.,Kuncak,V.,Suter,P.:合成模递归函数。摘自:面向对象编程系统语言与应用国际会议(OOPSLA),第407-426页(2013)
[24] 乐,QL;Gherghina,C。;秦,S。;下巴,W-N;Biere,A。;Bloem,R.,通过二阶双向投影进行形状分析,计算机辅助验证,52-68(2014),查姆:斯普林格,查姆·doi:10.1007/978-3-319-08867-94
[25] Le,T.C.,Gherghina,C.,Hobor,A.,Chin,W.N.:基于资源的终止和非终止证明逻辑。In:形式工程方法国际会议(ICFEM),第267-283页(2014)
[26] Le,T.C.,Qin,S.,Chin,W.N.:终止和非终止规范推断。摘自:编程语言设计与实现会议(PLDI),第489-498页(2015年)
[27] Le,T.C.,Zheng,G.,Nguyen,T.:SLING:使用动态分析推断分离逻辑中的程序不变量。摘自:编程语言设计与实现会议(PLDI),第788-801页(2019年)
[28] Le,X.B.D.,Le,Q.L.,Lo,D.,Le-Goues,C.:使用演绎验证增强自动程序修复。在:IEEE软件维护与进化国际会议(ICSME)(2016)
[29] Le Goues,C。;阮,电视台;福雷斯特,S。;Weimer,W.,Genprog:自动软件修复的通用方法,IEEE Trans。柔和。工程(TSE),38,1,54-72(2012)·doi:10.1109/TSE.2011.04
[30] 古伊斯,CL;Pradel,M。;Roychoudhury,A.,自动化程序修复,Commun。ACM,62,12,56-65(2019)·doi:10.1145/3318162
[31] Logozzo,F.,Ball,T.:模块化和经验证的自动程序修复。摘自:面向对象编程系统语言与应用国际会议(OOPSLA),第133-146页(2012)
[32] Long,F.,Rinard,M.:带条件合成的分阶段程序修复。摘自:欧洲软件工程联合会议和软件工程基础研讨会(ESEC/FSE),第166-178页(2015)
[33] Long,F.,Rinard,M.:通过学习正确的代码自动生成补丁。摘自:程序设计语言原则研讨会(POPL),第298-312页(2016年)
[34] Mechtaev,S.,Nguyen,M.D.,Noller,Y.,Grunske,L.,Roychoudhury,A.:使用参考实现的语义程序修复。摘自:国际软件工程会议(ICSE),第129-139页(2018)
[35] Mechtaev,S.,Yi,J.,Roychoudhury,A.:Directfix:寻找简单的程序修复。摘自:国际软件工程会议(ICSE),第448-458页(2015)
[36] Mechtaev,S.,Yi,J.,Roychoudhury,A.:Angelix:通过符号分析的可扩展多行程序补丁合成。摘自:国际软件工程会议(ICSE),第691-701页(2016年)
[37] Nguyen,H.D.T.,Qi,D.,Roychoudhury,A.,Chandra,S.:Semfix:通过语义分析修复程序。摘自:国际软件工程会议(ICSE),第772-781页(2013)
[38] Nguyen,H.H.,Chin,W.N.:用引理增强程序验证。摘自:计算机辅助验证国际会议(CAV),第355-369页(2008年)·Zbl 1155.68443号
[39] Nguyen,T-T;Ta,Q-T;下巴,W-N;Enea,C。;Piskac,R.,《使用形式验证和表达式模板的自动程序修复》,《验证、模型检查和抽象解释》,70-91(2019),查姆:施普林格,查姆·Zbl 1522.68159号 ·doi:10.1007/978-3-030-11245-54
[40] Polikarpova,N.,Sergey,I.:构建堆操作程序的合成。在:程序设计语言原理研讨会(POPL),第72:1-72:30页(2019)
[41] Qi,Y.,Mao,X.,Lei,Y.Dai,Z.,Wang,C.:自动程序修复的随机搜索强度。摘自:国际软件工程会议(ICSE),第254-265页(2014)
[42] Qiu,X.,Solar Lezama,A.:可证明正确的数据结构操作的自然合成。摘自:面向对象编程系统语言与应用国际会议(OOPSLA),第65:1-65:28页(2017)
[43] Ray,B.,Hellendorn,V.,Godhane,S.,Tu,Z.,Bacchelli,A.,Devanbu,P.:关于错误代码的“自然性”。摘自:国际软件工程会议(ICSE),第428-439页(2016)
[44] Reynolds,J.C.:分离逻辑:共享可变数据结构的逻辑。摘自:计算机科学逻辑研讨会(LICS),第55-74页(2002年)
[45] Sakkas,G.,Endres,M.,Cosman,B.,Weimer,W.,Jhala,R.:通过分析程序修复的类型错误反馈。摘自:编程语言设计与实现会议(PLDI),第16-30页(2020年)
[46] Sidiroglou-Douskos,S.,Lahtinen,E.,Long,F.,Rinard,M.:通过跨多个应用程序的水平代码传输自动消除错误。在:编程语言设计与实现会议(PLDI),pp.43-54(2015)
[47] Ta,Q.-T.,Le,T.C.,Khoo,S.-C.,Chin,W.-N.:分离逻辑中的自动互显归纳证明。摘自:形式方法国际研讨会(FM),第659-676页(2016)·Zbl 1427.68350号
[48] Ta,Q.-T.,Le,T.C.,Khoo,S.-C.,Chin,W.-N.:符号层次分离逻辑中的自动引理合成。摘自:程序设计语言原则研讨会(POPL),第9:1-9:29页(2018年)
[49] van Tonder,R.,Le Goues,C.:堆属性的静态自动程序修复。摘自:国际软件工程会议(ICSE),第151-162页(2018)
[50] Verma,S.、Roy,S.:堆操作的协同调试修复。摘自:欧洲软件工程联合会议和软件工程基础研讨会(ESEC/FSE),第163-173页(2017年)
[51] Wang,K.,Singh,R.,Su,Z.:搜索、对齐和修复:为入门编程练习生成数据驱动的反馈。摘自:编程语言设计与实现会议(PLDI),第481-495页(2018年)
[52] Weimer,W.,Fry,Z.P.,Forrest,S.:利用程序等效性进行自适应程序修复:模型和首次结果。摘自:自动化软件工程国际会议(ASE),第356-366页(2013)
[53] Weimer,W.,Nguyen,T.,Le Goues,C.,Forrest,S.:使用遗传编程自动查找补丁。摘自:国际软件工程会议(ICSE),第364-374页(2009年)
[54] Xuan,J.,Nopol:Java程序中条件语句错误的原子修复,IEEE Trans。柔和。工程(TSE),43,1,34-55(2017)·doi:10.1109/TSE.2016.2560811
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。