A long-standing open challenge for automated program repair is the overfitting problem, which is caused by having insufficient or incomplete specifications to validate whether a generated patch is correct or not. Most available repair systems rely on weak specifications (i.e., specifications that are synthesized from test cases) which limits the quality of generated repairs. To strengthen specifications and improve the quality of repairs, we propose to closer integrate static bug detection techniques with automated program repair. The integration combines automated program repair with static analysis techniques in such a way that bug detection patterns can be synthesized into specifications that the repair system can use. We explore the feasibility of such integration using two types of bugs: arithmetic bugs, such as integer overflow, and logical bugs, such as termination bugs. As part of our analysis, we make several observations that help to improve patch generation for these classes of bugs. Moreover, these observations assist with narrowing down the candidate patch search space, and inferring an effective search order.
翻译:自动化程序维修长期面临的一个公开挑战就是过于适应问题,其原因是没有足够或不完整的规格来验证生成的补丁是否正确。大多数可用的修理系统依靠薄弱的规格(即从测试个案中合成的规格)来限制所生成的修理质量。为了加强规格和改进修理质量,我们提议将静态错误检测技术与自动程序维修更紧密地结合起来。整合将自动程序维修与静态分析技术结合起来,这样就可以将故障检测模式合成修复系统可以使用的规格。我们利用两种类型的错误来探索这种整合的可行性:算术错误,例如整数溢出,和逻辑错误,例如终止错误。作为我们分析的一部分,我们提出若干意见,帮助改进这些种类错误的补丁生成。此外,这些观察有助于缩小候选补丁搜索空间,并推断有效的搜索命令。