当前位置: X-MOL 学术IEEE Trans. Softw. Eng. › 论文详情
Our official English website, www.x-mol.net, welcomes your feedback! (Note: you will need to create a separate account there.)
ARJA: Automated Repair of Java Programs via Multi-Objective Genetic Programming
IEEE Transactions on Software Engineering ( IF 7.4 ) Pub Date : 2020-10-01 , DOI: 10.1109/tse.2018.2874648
Yuan Yuan , Wolfgang Banzhaf

Automated program repair is the problem of automatically fixing bugs in programs in order to significantly reduce the debugging costs and improve the software quality. To address this problem, test-suite based repair techniques regard a given test suite as an oracle and modify the input buggy program to make the entire test suite pass. GenProg is well recognized as a prominent repair approach of this kind, which uses genetic programming (GP) to rearrange the statements already extant in the buggy program. However, recent empirical studies show that the performance of GenProg is not fully satisfactory, particularly for Java. In this paper, we propose ARJA, a new GP based repair approach for automated repair of Java programs. To be specific, we present a novel lower-granularity patch representation that properly decouples the search subspaces of likely-buggy locations, operation types and potential fix ingredients, enabling GP to explore the search space more effectively. Based on this new representation, we formulate automated program repair as a multi-objective search problem and use NSGA-II to look for simpler repairs. To reduce the computational effort and search space, we introduce a test filtering procedure that can speed up the fitness evaluation of GP and three types of rules that can be applied to avoid unnecessary manipulations of the code. Moreover, we also propose a type matching strategy that can create new potential fix ingredients by exploiting the syntactic patterns of existing statements. We conduct a large-scale empirical evaluation of ARJA along with its variants on both seeded bugs and real-world bugs in comparison with several state-of-the-art repair approaches. Our results verify the effectiveness and efficiency of the search mechanisms employed in ARJA and also show its superiority over the other approaches. In particular, compared to jGenProg (an implementation of GenProg for Java), an ARJA version fully following the redundancy assumption can generate a test-suite adequate patch for more than twice the number of bugs (from 27 to 59), and a correct patch for nearly four times of the number (from 5 to 18), on 224 real-world bugs considered in Defects4J. Furthermore, ARJA is able to correctly fix several real multi-location bugs that are hard to be repaired by most of the existing repair approaches.

中文翻译:

ARJA:通过多目标遗传编程自动修复 Java 程序

自动程序修复是自动修复程序中的错误以显着降低调试成本和提高软件质量的问题。为了解决这个问题,基于测试套件的修复技术将给定的测试套件视为一个预言机,并修改输入错误的程序,使整个测试套件通过。GenProg 被公认为这种突出的修复方法,它使用遗传编程 (GP) 重新排列错误程序中已经存在的语句。然而,最近的实证研究表明,GenProg 的性能并不完全令人满意,尤其是对于 Java。在本文中,我们提出了 ARJA,这是一种新的基于 GP 的修复方法,用于 Java 程序的自动修复。再具体一点,我们提出了一种新颖的低粒度补丁表示,它适当地解耦了可能有问题的位置、操作类型和潜在修复成分的搜索子空间,使 GP 能够更有效地探索搜索空间。基于这种新表示,我们将自动程序修复制定为多目标搜索问题,并使用 NSGA-II 寻找更简单的修复。为了减少计算工作量和搜索空间,我们引入了一个测试过滤程序,可以加速 GP 的适应度评估,以及三种类型的规则,可以用来避免对代码进行不必要的操作。此外,我们还提出了一种类型匹配策略,该策略可以通过利用现有语句的句法模式来创建新的潜在修复成分。与几种最先进的修复方法相比,我们对 ARJA 及其变体对种子错误和现实世界的错误进行了大规模的实证评估。我们的结果验证了 ARJA 中采用的搜索机制的有效性和效率,并显示了其优于其他方法的优势。特别是,与 jGenProg(Java 的 GenProg 的一个实现)相比,完全遵循冗余假设的 ARJA 版本可以生成一个测试套件足够的补丁,用于两倍以上的错误数量(从 27 到 59),以及一个正确的补丁在 Defects4J 中考虑的 224 个真实世界的错误上,几乎是这个数字的四倍(从 5 到 18)。此外,ARJA 能够正确修复大多数现有修复方法难以修复的几个真实的多位置错误。
更新日期:2020-10-01
down
wechat
bug