一句话:提出 UniAPR,通过运行时字节码变换重置 JVM 全局状态,实现快速且精确的即时补丁验证。
生成-验证式自动程序修复需要构造大量补丁并反复执行测试,验证过程极其耗时;同时,现有即时补丁验证可能因 JVM 全局状态残留而不精确甚至不健全。本文提出 UniAPR,支持对所有源码级自动程序修复技术进行即时补丁验证,并通过运行时字节码变换重置 JVM 全局状态,以缓解不精确/不健全问题。作者将其实现为全自动 Maven 插件,并开展实证评估。结果表明,即时补丁验证通常能让最先进的源码级自动程序修复加速一个数量级以上,使现有修复技术能探索更大搜索空间以修复更多缺陷;同时首次给出现有即时验证可能不精确/不健全的实证证据,而带 JVM 重置的 UniAPR 能以可忽略开销缓解该问题。
Generate-and-validate (G&V) automated program repair (APR) techniques have been extensively studied during the past decade. Meanwhile, such techniques can be extremely time-consuming due to the manipulation of program code to fabricate a large number of patches and also the repeated test executions on patches to identify potential fixes. PraPR, a recentG furthermore, UniAPR addresses the imprecise patch validation issue by resetting the JVM global state via runtime bytecode transformation. We have implemented UniAPR as a publicly available fully automated Maven Plugin. Our study demonstrates for the first time that on-the-fly patch validation can often speed up state-of-the-art source-code-level APR by over an order of magnitude, enabling all existing APR techniques to explore a larger search space to fix more bugs in the near future. Furthermore, our study shows the first empirical evidence that vanilla on-the-fly patch validation can be imprecise/unsound, while UniAPR with JVM reset is able to mitigate such issues with negligible overhead.