This work is motivated by the pervasive use of method invocations in object-oriented (OO) programs, and indeed their prevalence in patches of OO-program bugs. We propose a generate-and-validate repair technique, called ELIXIR designed to be able to generate such patches. ELIXIR aggressively uses method calls, on par with local variables, fields, or constants, to construct more expressive repair-expressions, that go into synthesizing patches. The ensuing enlargement of the repair space, on account of the wider use of method calls, is effectively tackled by using a machine-learnt model to rank concrete repairs. The machine-learnt model relies on four features derived from the program context, i.e., the code surrounding the potential repair location, and the bug report. We implement ELIXIR and evaluate it on two datasets, the popular Defects4J dataset and a new dataset Bugs.jar created by us, and against 2 baseline versions of our technique, and 5 other techniques representing the state of the art in program repair. Our evaluation shows that ELIXIR is able to increase the number of correctly repaired bugs in Defects4J by 85% (from 14 to 26) and by 57% in Bugs.jar (from 14 to 22), while also significantly out-performing other state-of-the-art repair techniques including ACS, HD-Repair, NOPOL, PAR, and jGenProg.
翻译:这项工作的动机是,在目标导向(OO)方案中广泛使用方法,而且这些方法在OO-program错误的补丁中普遍使用。我们提议一种产生和validate修理技术,称为ELIXIR,目的是能够产生这样的补丁。ELIXIR积极使用的方法,与当地变量、字段或常数一样,要求建立更清晰的修补表达式,这些表达式将进入合成补丁。随后,由于更广泛地使用方法调用,修复空间的扩大,通过使用一个机器-learnt模型来对混凝土修理进行排位排序,从而有效地解决了修复空间的扩大。机器-leant模型依赖于从程序背景中衍生出的四个特征,即潜在修理地点的代码和错误报告。我们实施了ELIXIR,在两个数据集上,即流行的Defects4J数据集和新的数据集集中,以及我们技术的2个基准版本和代表工艺状态的5种技术。我们的评估显示,在程序修理过程中,从EL-IIX系统到另外的修理技术中,正确地将E-ral-rup 4,从25-B-B-I-I-I-I-I-I-I-I-I-I-I-I-B-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-T-T-T-T-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-I-