1、一种基于修复偏好的自动程序修复工具集成策略李传艺 南京大学演讲嘉宾李传艺南京大学 助理教授CCF系统软件专委、软件工程专委执行委员。主要研究方向为智能化软件技术,在ACM TOSEM、IEEE TSC、IEEE/ACM TASLP、ACM TKDD、JSS、InS.、FGCS、JPDC、软件学报、计算机学报 和 ICSE、ESEC/FSE、ASE、ACL、AAAI、IJCAI、EMNLP等国内外重要学术期刊和会议发表论文60余篇,获授权专利6项。主持国家自然科学基金项目、CCF-华为胡杨林基金项目,以及华为、腾讯、华夏幸福等企业创新项目10余项,成果研制了一系列智能化软件工具,落地应用于国产编
2、程语言开发环境搭建、国产操作系统生态建设等信创领域。4目 录CONTENTS1.APR研究现状及集成方法2.本工作动机3.基于修复偏好的集成方案4.实验和结果讨论5.总结、展望与补充讨论APR研究现状及集成方法PART 01丰富的APR系统(1)lAPR(Automated Program Repair)旨在自动修复软件系统中的缺陷l目前已经有超过40种的APR工具,包括l 传统的基于规则的工具 l 基于神经机器翻译的工具(NPR)l 基于大语言模型(LLM)的工具71.基于启发式搜索:人工定义启发式规则,指导修复补丁的生成过程例子:GenProg1,采用遗传算法,以能通过的测试用例的数量为优
3、化目标,不断修改缺陷的代码片段直到产生通过所有测试用例的代码2.基于语义约束:通过某种手段推断程序的正确规约,作为约束指导补丁的生成过程例子:Nopol2,针对java程序中的条件语句,首先在出错的代码位置搜集所有变量的取值情况,然后根据期望的条件语句取值情况(true 或 false),将程序语义编码成为Z3约束求解器的约束进行求解3.基于修复模板的方法:根据开发者、研究人员的经验或者数据挖掘的结果预定义一些补丁模板或者补丁生成策略用于指导修复的过程例子:TBar3,基于修复模板的大成之作,集成了大量的补丁模板1 Le Goues,C.,Nguyen,T.,Forrest,S.,&Weime
4、r,W.(2011).Genprog:A generic method for automatic software repair.Ieee transactions on software engineering,38(1),54-72.2 Xuan,Jifeng,et al.Nopol:Automatic repair of conditional statement bugs in java programs.IEEE Transactions on Software Engineering 43.1(2016):34-55.3 Liu,K.,Koyuncu,A.,Kim,D.and B
5、issyand,T.F.,2019,July.TBar:Revisiting template-based automated program repair.ISSTA 2019(pp.31-42).丰富的APR系统(2)lAPR(Automated Program Repair)旨在自动修复软件系统中的缺陷l目前已经有超过40种的APR工具,包括l 传统的基于规则的工具 l 基于神经机器翻译的工具(NPR)l 基于大语言模型(LLM)的工具81.Tufano等人1将程序修复定义为神经机器翻译(Neural Machine Translation)任务;CoCoNut2就结合了上下文感知的NM
6、T架构和CNN模型用于程序修复2.目前NPR的改进角度大致可以分为三类:数据预处理、输入表示(recoder)和输出搜索(decoder)3.SequenceR3 能够在类级别的代码上下文中接受最多1,000个令牌作为输入,以确保其在不同场景中的适用性;DLFix4为有bug的代码实现了重命名抽象,这样可以增强修复模型学习如何修复类似错误的能力。Cure5在其NMT架构中添加了一个在源代码上预训练的GPT编码模块,而Circle6和RewardRepair7则利用一个基于Transformer的预训练语言模型T5作为它们的编码器。目前NPR的解码器架构主要分为两种类型:一类是LSTM或Tran