一种基于修复偏好的自动程序修复工具集成策略_33页_6mb
报告摘要
2024 AI+研发数字峰会总结
核心内容
本次峰会围绕AI在研发领域的应用展开,重点探讨了**自动程序修复(APR)**技术的最新进展,尤其是基于修复偏好的集成策略。该策略旨在通过结合不同APR工具的修复能力,提高程序修复的效率与效果,同时降低工具调用和人工验证的开销。
主要观点
- APR工具多样性:当前已有超过40种APR工具,涵盖传统基于规则、基于神经机器翻译(NPR)和基于大语言模型(LLM)的类型。
- 工具性能差异显著:没有一个工具能修复所有类型的Bug,因此需要集成多种工具以实现更好的修复效果。
- 基于学习的集成方法:虽然已有研究尝试通过学习Bug特征与工具之间的关系来选择最佳工具,但存在训练成本高、泛化能力差等问题。
- P-EPR集成策略:提出了一种基于修复偏好的集成方法(P-EPR),通过分析Bug特征与工具修复偏好的匹配度,为Bug选择最合适的工具。
关键信息
APR研究现状
- APR旨在自动修复软件缺陷,已有多种方法,如:
- 基于启发式搜索:如GenProg,利用测试用例数量作为优化目标。
- 基于语义约束:如Nopol,通过Z3约束求解器进行修复。
- 基于修复模板:如TBar,使用预定义的模板进行修复。
- 基于NPR的工具:如CoCoNuT、SequenceR、DLFix、Cure等,结合上下文感知的神经网络和CNN模型进行修复。
- LLM-based APR工具:如AlphaRepair、ChatRepair、RTTAPR、Srepair、ThinkRepair、FixAgent等,利用LLM的强大语义理解能力进行修复。
修复偏好与集成策略
- 修复偏好:定义为APR工具对Bug特征的修复能力(能/不能),包括:
- BF1: Bug语句节点类型
- BF2: Bug语句子节点类型
- BF3: BF1与BF2的组合
- BF4: 测试错误类型
- P-EPR算法:
- 通过提取Bug特征并计算工具得分,推荐最佳修复工具。
- 使用修复历史数据和修复偏好影响因子(EMα)计算最终得分。
- 优先选择传统APR工具,因其可解释性和可靠性。
实验与结果
- 仿真实验:测试了21种APR工具,发现集成策略在正确修复Bug数量和精准率上优于单独使用任何工具。
- 真实执行实验:在Defects4J和Bears数据集上,P-EPR策略在工具调用次数和人工验证次数上显著减少。
- 性能指标:
- 正确修复的Bug数量
- 似真补丁数量
- 工具调用次数(TISP)
- 人工验证次数(HVSP)
- NPR工具对比:P-EPR在正确修复数量和精准率上超越了所有单个NPR工具。
LLM-based APR泛化性
- SRepair与FixAgent:基于LLM的自增强APR方法在多个数据集上表现优异,尤其是Defects4J和HumanEval-Java。
- 泛化性影响因素:LLM对数据集的记忆程度影响其泛化能力,记忆越多效果越好。
- 数据集变换实验:通过变换数据集(如重排条件、重命名变量、删除未使用语句)测试LLM的记忆与效果之间的关系,发现记忆程度对修复性能有显著影响。
结构清晰的总结
1. APR研究现状及集成方法
- APR旨在自动修复软件系统中的缺陷。
- 已有超过40种APR工具,包括基于规则、NPR、LLM等类型。
- 传统工具如GenProg、Nopol、TBar等,各有其修复策略和适用场景。
- NPR工具如CoCoNuT、SequenceR等,结合上下文感知和深度学习模型。
- LLM-based工具如AlphaRepair、ChatRepair、Srepair等,利用大语言模型的强大语义理解能力。
2. 本工作动机
- 基于学习的集成方法存在训练成本高、泛化能力差等问题。
- 需要一种非基于训练的集成方案,能够灵活添加新工具,随着修复经验积累性能增强。
3. 基于修复偏好的集成方案
- P-EPR:一种基于修复偏好的集成方法,通过分析Bug特征与工具修复偏好的匹配度来选择最佳工具。
- 修复偏好特征:包括节点类型、子节点类型、测试错误类型等。
- 工具分类:
- 基于启发式规则的工具
- 基于约束的工具
- 基于模板的工具
- 算法流程:
- 整理传统APR工具的修复能力与Bug特征的映射关系。
- 根据修复历史数据初始化和更新工具的修复能力。
- 提取Bug特征。
- 计算工具得分并排序。
- 按序执行工具并记录结果。
4. 实验和结果讨论
- 仿真实验:集成21种APR工具,发现Top-1、Top-2等策略在正确修复数量和精准率上优于随机选择和执行所有工具。
- 真实执行实验:在Defects4J和Bears数据集上,P-EPR策略在工具调用次数和人工验证次数上显著减少。
- NPR工具对比:P-EPR在正确修复数量和精准率上超越了所有单个NPR工具。
- LLM-based APR泛化性:
- SRepair和FixAgent在多个数据集上表现优异。
- LLM对数据集的记忆程度影响其泛化能力。
- 数据集变换实验表明,记忆越多效果越好。
5. 总结、展望与补充讨论
- 集成优势:多种APR工具能力互补,集成策略在降低时间和计算资源开销的基础上提升修复性能。
- 未来展望:
- 优化集成策略,提高Top 1选中正确工具的概率。
- 探索基于学习的策略,以度量NPR与Bug之间的关联。
- 持续更新评测数据集,使用新的Bug数据提升APR工具的泛化能力。
- 补充讨论:
- LLM-based APR方法在不同数据集上的表现存在差异。
- 修复能力与LLM对数据集的记忆程度密切相关。
- 需要进一步研究如何提升LLM对不同数据集的泛化能力。
参考文献
- [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.
- [13] Less Training, More Repairing Please: Revisiting Automated Program Repair via Zero-shot Learning.
- [14] How Far Can We Go with Practical Function-Level Program Repair?
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载