利用 Stack Overflow 帖子为修复运行时异常提供实时辅助
软件工程
2022-02-11 v1
摘要
运行时异常(REs)是代码开发过程中频繁出现的一类重要缺陷。传统的自动程序修复(APR)工具在这种“开发中”的使用场景下作用有限,因为它们需要一个可用的测试套件作为补丁预言。因此,开发人员通常倾向于手动解决其开发中的 REs,常常通过参考技术论坛,如 Stack Overflow(SO)。为了自动化这一手动过程,我们扩展了先前的工作 MAESTRO,通过推荐相关的建议补丁的 SO 帖子,并从该帖子中合成修复补丁来修复开发人员代码中的 RE,从而为开发人员修复 Java REs 提供实时辅助。MAESTRO 利用一个通过相对廉价、一次性、增量过程从 SO 帖子中半自动挖掘的运行时异常模式(REPs)库。REP 是触发特定 RE 的抽象语句序列。REPs 用于索引 SO 帖子,检索与开发人员代码所呈现的 RE 实例最相关的帖子,然后协调从 SO 帖子中提取具体修复、抽象掉帖子特定细节并将修复具体化到开发人员有缺陷代码的过程。我们在一个包含 78 个实例的已发布 RE 基准上评估了 MAESTRO。MAESTRO 能够在 27% 的案例中于首位生成正确的修复补丁,在 40% 的案例中于前三名内生成正确补丁,并在 81% 的案例中总体返回有用的产物。此外,REPs 的使用对 MAESTRO 性能的各个方面都至关重要,从 SO 帖子的排序和搜索到从给定帖子合成补丁。特别是,MAESTRO 生成的正确补丁中有 45% 是未使用 REPs 的基线技术无法产生的,即使为其提供了 MAESTRO 的 SO 帖子排序。MAESTRO 也很快,平均需要约 1 秒来生成其输出。
引用
@article{arxiv.2202.04762,
title = {Providing Real-time Assistance for Repairing Runtime Exceptions using Stack Overflow Posts},
author = {Sonal Mahajan and Mukul R. Prasad},
journal= {arXiv preprint arXiv:2202.04762},
year = {2022}
}