中文

利用图神经网络与流增强抽象语法树检测代码克隆

软件工程 2020-02-21 v1 人工智能

摘要

代码克隆是语义相似且语法相似或不同的代码片段对。检测代码克隆有助于降低软件维护成本并预防缺陷。先前已提出大量代码克隆检测方法,但大多数聚焦于检测语法克隆,对具有不同语法特征的语义克隆表现不佳。为检测语义克隆,研究者尝试采用深度学习进行代码克隆检测,以从数据中自动学习潜在语义特征。特别地,为利用语法信息,若干方法使用抽象语法树 (AST) 作为输入,并在多种编程语言的代码克隆基准上取得显著进展。然而,这些基于 AST 的方法仍无法充分利用代码片段的结构信息,尤其是控制流和数据流等语义信息。为利用控制流与数据流信息,本文中我们构建了一种称为流增强抽象语法树 (FA-AST) 的程序图表示。我们通过用显式的控制流和数据流边增强原始 AST 来构造 FA-AST。然后我们在 FA-AST 上应用两类不同的图神经网络 (GNN) 来衡量代码对的相似度。就我们所知,我们是将图神经网络应用于代码克隆检测领域的首例。我们将 FA-AST 和图神经网络应用于两个 Java 数据集:Google Code Jam 和 BigCloneBench。我们的方法在 Google Code Jam 和 BigCloneBench 任务上均优于当前最优 (SOTA) 方法。

关键词

引用

@article{arxiv.2002.08653,
  title  = {Detecting Code Clones with Graph Neural Networkand Flow-Augmented Abstract Syntax Tree},
  author = {Wenhan Wang and Ge Li and Bo Ma and Xin Xia and Zhi Jin},
  journal= {arXiv preprint arXiv:2002.08653},
  year   = {2020}
}

备注

Accepted by SANER 2020