Nopol:Java 程序中条件语句错误的自动修复
软件工程
2021-11-12 v1
摘要
我们提出 NOPOL,一种针对错误条件语句(即 if-then-else 语句)的自动修复方法。该方法以含错程序及测试套件为输入,输出带有条件表达式的补丁。测试套件需包含通过测试用例以建模程序预期行为,以及至少一个暴露待修复错误的失败测试用例。NOPOL 过程包含三个主要阶段。首先,NOPOL 采用 angelic 修复定位,在测试执行期间识别条件的期望值。其次,利用运行时轨迹收集来采集变量及其实际值,包括原始数据类型与面向对象特性(如空值检查),作为补丁生成的构建块。第三,NOPOL 将收集的数据编码为可满足模理论(SMT)问题实例,再将 SMT 实例的可行解翻译回代码补丁。我们在两个大型开源项目 Apache Commons Math 与 Apache Commons Lang 上的 22 个真实错误(16 个含错 IF 条件错误与 6 个缺失前置条件错误)上评估 NOPOL。针对这些错误的实证分析表明,我们的方法能有效修复含错 IF 条件与缺失前置条件错误。我们通过真实错误修复的案例研究说明了 NOPOL 的能力与局限。
引用
@article{arxiv.1811.04211,
title = {Nopol: Automatic Repair of Conditional Statement Bugs in Java Programs},
author = {Jifeng Xuan and Matias Martinez and Favio Demarco and Maxime Clément and Sebastian Lamelas and Thomas Durieux and Daniel Le Berre and Martin Monperrus},
journal= {arXiv preprint arXiv:1811.04211},
year = {2021}
}
备注
IEEE Transactions on Software Engineering, 2016