一种基于修复偏好的自动程序修复工具集成策略_32页_5mb
报告摘要
2024 AI+研发数字峰会总结
核心内容
本次2024 AI+研发数字峰会聚焦于AI驱动研发变革,特别是在**自动程序修复(APR)**领域,探讨了如何通过集成多种APR工具来提升修复性能,同时降低工具调用和人工验证的成本。会议中,南京大学的李传艺助理教授提出了一种基于修复偏好的集成策略(P-EPR),旨在通过分析Bug特征与APR工具的修复能力之间的关系,实现更高效的工具选择和修复流程。
主要观点
-
APR工具的多样性
当前已有超过40种APR工具,主要分为三类:- 基于启发式搜索的工具(如GenProg)
- 基于语义约束的工具(如Nopol)
- 基于修复模板的工具(如TBar)
-
基于大语言模型(LLM)的APR工具
随着LLM的发展,出现了多种基于LLM的APR工具,如RepairLLaMA、ChatRepair、ThinkRepair等。这些工具在多个基准数据集上表现出色,特别是在Defects4J、QuixBugs和HumanEval-Java等数据集上。 -
集成策略的重要性
单个APR工具无法修复所有Bug,且不同工具在不同Bug类型上的表现差异显著。因此,集成策略成为提升修复性能的重要手段。 -
基于修复偏好的集成方案(P-EPR)
P-EPR是一种非基于训练的集成策略,通过分析Bug特征与APR工具的修复偏好之间的关系,为Bug推荐最合适的工具。该方法具有以下优势:- 不需要专门的训练数据
- 可灵活添加新工具
- 性能随着修复历史的积累而提升
- 优先选择传统APR工具,提升可解释性和可信度
-
基于学习的集成方案的局限性
传统的基于学习的集成方法(如E-APR)存在训练成本高、特征选取随机性大、新增工具需重新训练等问题。P-EPR通过修复偏好实现更高效的工具选择。
关键信息
APR工具分类与修复模式
| Bug Feature | Pattern | Description |
|---|---|---|
| BF1 | P6, 11, 12 | Node type of the buggy statement |
| BF2 | P3, 5, 7-9 | Child node types within the buggy statement |
| BF3 | P1, 10 | BF1 & BF2 |
| BF4 | P4 | Type of the test error |
修复模式与预要求
| Repair Pattern | Pre requirement |
|---|---|
| P1 | Insert Cast Checker |
| P2 | Insert Null Pointer Checker |
| P3 | Insert Range Checker |
| P4 | Throw Exception |
| P5 | Mutate Class Instance Creation |
| P6 | Mutate Conditional Expression |
| P7 | Mutate Data Type |
| P8 | Mutate Integer Division Operation |
| P9 | Mutate Literal Expression |
| P10 | Mutate Method Invocation Expression |
实验结果
| Metric | Top-1 | Top-2 | Top-3 | Top-4 | Top-5 | Top-6 | Top-7 | Top-8 | Top-9 | Optimal | All |
|---|---|---|---|---|---|---|---|---|---|---|---|
| # of correctly fixed bugs | 54/89 | 68/100 | 78/113 | 87/129 | 86/133 | 95/138 | 101/146 | 108/157 | 109/160 | 122/180 | 122/180 |
| Tool Invocation Times (TISP) | 1010 (33%) | 1461 (39%) | 1925 (41%) | 2330 (44%) | 2701 (38%) | 3102 (41%) | 3488 (41%) | 3906 (42%) | 4282 (38%) | 395 (95%) | 8295 |
| Human Validation Times (HVSP) | 98 (20%) | 117 (26%) | 148 (27%) | 175 (27%) | 191 (22%) | 214 (24%) | 229 (25%) | 257 (24%) | 271 (21%) | 180 (54%) | 393* |
LLM-based APR工具的性能对比
| Model or Method | Defects4J (835 bugs) | HumanEval-Java (163 bugs) | BugsInPy (54 bugs) |
|---|---|---|---|
| GPT-3.5-Turbo | 53 | 97 | 7 |
| SRepair | 137 | 160 | 7 |
| FixAgent | 126 | 114 | 9 |
| SRepair w/o E | 84 | 146 | 5 |
| FixAgent w/o E | 104 | 103 | 6 |
| Test Report Prompt | 62 | 113 | 7 |
LLM记忆程度对修复性能的影响
| Metric | Initial | SFT |
|---|---|---|
| Base LLM | 7 | 15 |
| SRepair w/o E | 5 | 13 |
| FixAgent w/o E | 6 | 20 |
| RefinedTRP | 7 | 19 |
总结与展望
总结
- APR工具种类繁多,各有优劣,集成策略能有效提升修复性能。
- P-EPR是一种基于修复偏好的集成方法,无需训练,可灵活扩展,性能随修复经验提升。
- LLM-based APR工具(如SRepair、FixAgent)在多个数据集上表现优异,但依赖于对数据集的记忆程度。
- 通过分析Bug特征与工具修复能力之间的关系,可以实现更智能、高效的Bug修复推荐。
展望
-
集成方案的优化
- 提高Top-1选中正确APR工具的概率。
- 尝试使用“基于学习的策略”度量NPR和Bug之间的关联。
-
LLM-based APR的泛化性
- 提高LLM对不同数据集的记忆程度,以增强其修复能力。
- 探索如何在不依赖大量训练数据的情况下提升自增强方法的性能。
-
未来研究方向
- 评估LLM在不同修复场景下的泛化能力。
- 探索更高效的工具调用和人工验证流程。
- 增强工具之间的协同工作,实现更全面的Bug修复覆盖。
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载