中文

学习表示代码补丁

软件工程 2023-10-05 v2

摘要

补丁表示在自动化各种软件工程任务(如判断补丁正确性或总结代码变更)中至关重要。尽管近期研究采用深度学习进行补丁表示,侧重于词元序列或抽象语法树(AST),但它们往往忽略了变更的语义意图以及被修改行的上下文。为弥补这一不足,我们提出了一种新方法 Patcherizer。它深入探究上下文与结构的意图,将周围代码上下文与两种创新表示相融合。这两种表示分别捕捉代码变更中的意图以及补丁前后 AST 结构修改中的意图。这种整体表示恰当地捕捉了补丁的潜在意图。Patcherizer 采用图卷积神经网络进行结构意图图表示,并采用 transformers 进行意图序列表示。我们在三个领域评估了 Patcherizer 嵌入的通用性:(1)补丁描述生成,(2)补丁正确性预测,以及(3)补丁意图识别。我们的实验证明了该表示在所有任务上的有效性,优于当前最优(SOTA)方法。例如,在补丁描述生成中,Patcherizer 表现优异,在 BLEU、ROUGE-L 和 METEOR 分数上分别平均提升 19.39%、8.71% 和 34.03%。

关键词

引用

@article{arxiv.2308.16586,
  title  = {Learning to Represent Patches},
  author = {Xunzhu Tang and Haoye Tian and Zhenghan Chen and Weiguo Pian and Saad Ezzini and Abdoul Kader Kabore and Andrew Habib and Jacques Klein and Tegawende F. Bissyande},
  journal= {arXiv preprint arXiv:2308.16586},
  year   = {2023}
}