中文

用结构化预测学习代码特征与代码变换之间的关系

软件工程 2023-06-06 v2 机器学习 编程语言

摘要

为有效引导自动化代码演化技术中代码变换空间的探索,我们在本文中提出首个使用条件随机场(CRFs)在AST节点层级结构化预测代码变换的方法。我们的方法首先离线学习一个概率模型,捕捉特定代码变换如何应用于特定AST节点,随后使用学到的模型对任意新的、未见的代码片段预测变换。{我们的方法包含程序与代码变换的新颖表示。具体而言,我们引入定义所谓AST级代码变换的形式化框架,并展示CRF模型如何相应设计、学习并用于预测}。我们在Java程序修复变换预测的背景下实例化了该方法。我们的实例化包含一组精心设计的代码特征,处理了训练数据不平衡问题,并包含代码特有的变换约束。我们基于来自真实Java项目的缺陷修复提交数据集进行了大规模实验评估。结果表明,当使用流行的评估指标\emph{top-3}时,我们的方法预测代码变换的准确率依变换不同在41%到53%之间变化。我们的模型优于基于历史概率与神经机器翻译(NMT)的两个基线,表明考虑代码结构对获得良好预测准确率的重要性。此外,我们实现了一个概念验证合成器,将部分修复变换具体化为最终补丁。该合成器在Defects4j基准上的评估确认了所预测的AST级修复变换在生成高质量补丁中的有用性。

关键词

引用

@article{arxiv.1907.09282,
  title  = {Learning the Relation between Code Features and Code Transforms with Structured Prediction},
  author = {Zhongxing Yu and Matias Martinez and Zimin Chen and Tegawendé F. Bissyandé and Martin Monperrus},
  journal= {arXiv preprint arXiv:1907.09282},
  year   = {2023}
}