Bug fixing is generally a manually-intensive task. However, recent work has proposed the idea of automated program repair, which aims to repair (at least a subset of) bugs in different ways such as code mutation, etc. Following in the same line of work as automated bug repair, in this paper we aim to leverage past fixes to propose fixes of current/future bugs. Specifically, we propose Ratchet, a corrective patch generation system using neural machine translation. By learning corresponding pre-correction and post-correction code in past fixes with a neural sequence-to-sequence model, Ratchet is able to generate a fix code for a given bug-prone code query. We perform an empirical study with five open source projects, namely Ambari, Camel, Hadoop, Jetty and Wicket, to evaluate the effectiveness of Ratchet. Our findings show that Ratchet can generate syntactically valid statements 98.7% of the time, and achieve an F1-measure between 0.29 - 0.83 with respect to the actual fixes adopted in the code base. In addition, we perform a qualitative validation using 20 participants to see whether the generated statements can be helpful in correcting bugs. Our survey showed that Ratchet's output was considered to be helpful in fixing the bugs on many occasions, even if fix was not 100% correct.
翻译:然而,最近的工作提出了自动程序修复(至少是一个子集)错误的概念,目的是以不同的方式,例如代码突变等方法修复(至少是一个子集的)错误。在与自动错误修复一样的工作之后,我们在本文件中力求利用过去的修正方法来提出当前/未来错误的修复。具体地说,我们提议使用神经机翻译的修复补丁生成系统Rachet。通过学习神经序列至序列模型,Rachet能够为某个特定错误易变代码查询生成一个固定代码(至少是一个子集)。我们用五个开放源项目,即Ambari、Camel、Hadoop、Jetty和Wicket进行一项实验性研究,以评价Rachet的功效。我们的调查结果显示,Rachet能够生成同步有效报表98.7%的时间,并实现对在0.29 - 0.833与实际修正基中采用的代码模型之间的F1测量。此外,我们甚至用100个参与者进行定性验证,以确定我们生成的错误是否正确。