一句话:实证表明程序修复虽受益于通用序列到序列模型,却不应照搬机器翻译设计,基于此提出更有效的编辑合成修复方案。
本文重新审视“补丁修复类似语言翻译”这一移植假设,以程序修复为案例比较序列到序列模型与机器翻译模型。研究发现,程序修复虽能从通用 seq2seq 架构显著受益,却会受翻译模型内建设计选择的损害,无论翻译准确率还是多样性均受影响。基于实证结果与软件开发知识,作者提出更原则化的模型设计,并支持以缺陷上下文为条件合成代码编辑的修复趋势。作者实现概念验证工具,实验证实其相比翻译式架构更有效且行为根本不同。结果说明,研究机器学习模型细节既能揭示被准确率掩盖的问题,也能推动模型创新并提升修复水平。复现数据与材料将公开。
Machine Learning models from other fields, like Computational Linguistics, have been transplanted to Software Engineering tasks, often quite successfully. Yet a transplanted model's initial success at a given task does not necessarily mean it is well-suited for the task. In this work, we examine a common example of this phenomenon: the conceit that "software patching is like language translation". We demonstrate empirically that there are subtle, but critical distinctions between sequence-to-sequence models and translation model: while program repair benefits greatly from the former, general modeling architecture, it actually suffers from design decisions built into the latter, both in terms of translation accuracy and diversity. Given these findings, we demonstrate how a more principled approach to model design, based on our empirical findings and general knowledge of software development, can lead to better solutions. Our findings also lend strong support to the recent trend towards synthesizing edits of code conditional on the buggy context, to repair bugs. We implement such models ourselves as "proof-of-concept" tools and empirically confirm that they behave in a fundamentally different, more effective way than the studied translation-based architectures. Overall, our results demonstrate the merit of studying the intricacies of machine learned models in software engineering: not only can this help elucidate potential issues that may be overshadowed by increases in accuracy; it can also help innovate on these models to raise the state-of-the-art further. We will publicly release our replication data and materials at https://github.com/ARiSE-Lab/Patch-as-translation.