中文

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