一种基于修复偏好的自动程序修复工具集成策略
一种基于修复偏好的自动程序修复工具集成策略李传艺 南京大学演讲嘉宾李传艺南京大学 助理教授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余项,成果研制了一系列智能化软件工具,落地应用于国产编程语言开发环境搭建、国产操作系统生态建设等信创领域。4目 录CONTENTS1.APR研究现状及集成方法2.本工作动机3.基于修复偏好的集成方案4.实验和结果讨论5.总结、展望与补充讨论APR研究现状及集成方法PART 01丰富的APR系统 (1)l APR(Automated Program Repair)旨在自动修复软件系统中的缺陷l 目前已经有超过40种的APR工具,包括l 传统的基于规则的工具 l 基于神经机器翻译的工具(NPR)l 基于大语言模型(LLM)的工具71. 基于启发式搜索:人工定义启发式规则,指导修复补丁的生成过程例子: GenProg[1], 采用遗传算法,以能通过的测试用例的数量为优化目标,不断修改缺陷的代码片段直到产生通过所有测试用例的代码2. 基于语义约束:通过某种手段推断程序的正确规约,作为约束指导补丁的生成过程例子: Nopol[2],针对java程序中的条件语句,首先在出错的代码位置搜集所有变量的取值情况,然后根据期望的条件语句取值情况(true 或 false),将程序语义编码成为Z3约束求解器的约束进行求解3. 基于修复模板的方法:根据开发者、研究人员的经验或者数据挖掘的结果预定义一些补丁模板或者补丁生成策略用于指导修复的过程例子: TBar[3],基于修复模板的大成之作,集成了大量的补丁模板[1] Le Goues, C., Nguyen, T., Forrest, S., & Weimer, 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 Bissyandé, T.F., 2019, July. TBar: Revisiting template-based automated program repair. ISSTA 2019 (pp. 31-42).丰富的APR系统 (2)l APR(Automated Program Repair)旨在自动修复软件系统中的缺陷l 目前已经有超过40种的APR工具,包括l 传统的基于规则的工具 l 基于神经机器翻译的工具(NPR)l 基于大语言模型(LLM)的工具81. Tufano等人[1]将程序修复定义为神经机器翻译(Neural Machine Translation)任务; CoCoNut[2]就结合了上下文感知的NMT架构和CNN模型用于程序修复2.目前NPR的改进角度大致可以分为三类:数据预处理、输入表示(recoder)和输出搜索(decoder)3. SequenceR[3] 能够在类级别的代码上下文中接受最多1,000个令牌作为输入,以确保其在不同场景中的适用性;DLFix[4]为有bug的代码实现了重命名抽象,这样可以增强修复模型学习如何修复类似错误的能力。Cure[5]在其NMT架构中添加了一个在源代码上预训练的GPT编码模块,而Circle[6]和RewardRepair[7]则利用一个基于Transformer的预训练语言模型T5作为它们的编码器。目前NPR的解码器架构主要分为两种类型:一类是LSTM或Transformer序列解码器,由Codit[8]和SelfAPR[9]采用;另一类是Recoder[10]和Tare[11]自己设计的结构感知解码器,它们将解码阶段建模为AST的修改,而不是生成文本序列。4. 最近随着各种大语言模型(LLM)的出现,NPR研究人员开始探索将LLM用于程序修复。 RepairLLaMA[12],设计了多种输入/输出的内容格式,并采用Lora方法来微调CodeLLaMA丰富的APR系统 (2)——引用列表9[1] An Empirical Study on Learning Bug_x0002_Fixing Patches in the Wild via Neural Machine Translation.[2] CoCoNuT: combining context-aware neural translation models using ensemble for program repair.[3] SequenceR: Sequence-to-Sequence Learning for End-to-End Program Repair. [4] DLFix: context-based code transformation learning for automated program repair. [5] CURE: Code-Aware Neural Machine Translation for Automatic Program Repair. [6] CIRCLE: continual repair across programming languages. [7] Neural Program Repair with Execution-based Backpropagation.[8] CODIT: Code Editing With Tree-Based Neural Models.[9] SelfAPR: Self-supervised Program Repair with Test Execution Diagnostics.[10] A syntax-guided edit decoder for neural program repair.[11] Tare: Type-Aware Neural Program Repair.[12] RepairLLaMA: Efficient Representations and Fine-Tuned Adapters for Program Repair.丰富的APR系统 (3)l APR(A
[中智凯灵(北京)科技]:一种基于修复偏好的自动程序修复工具集成策略,点击即可下载。报告格式为PDF,大小6.56M,页数33页,欢迎下载。
