程序源代码的相似性_DeepSim:深度学习代码功能相似性

d9bfd38e4ab4c473d27672753ec1731e.png

论文:Gang Zhao and Jeff Huang. 2018. DeepSim: Deep Learning Code Functional Similarity. In Proceedings of the 26th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE ’18), November 4–9, 2018, Lake Buena Vista, FL, USA. ACM, New York, NY, USA, 11 pages. https://doi.org/10.1145/3236024.3236068

摘要

度量代码相似性是许多软件工程任务的基础,例如代码搜索,重构和重用。然而,大多数现有技术只关注代码语法相似性,而度量代码功能相似性仍然是一个具有挑战性的问题。在本文中,我们提出了一种新的方法,将代码控制流和数据流编码为语义矩阵,其中每个元素是高维稀疏二进制特征向量,并且基于这种表示我们设计了一种新的深度学习模型用来度量代码功能相似性。通过连接从代码对中学习的隐藏表示,这个新模型将检测功能相似的代码的问题转换为二分类问题,其可以有效的学习语法上极不相同而功能上相似的代码之间的模式。

我们已经将我们的方法针对 Java 程序实现成工具 DeepSim ,并且在两个功能相似的代码的大型数据集上评估了它的召回率、精度和时间性能。实验结果表明, DeepSim 明显优于现有的如DECKARD、RtvNN、CDLH以及两个基线深度神经网络模型等先进技术。

技术介绍

在本文中,我们提出了一种新方法 DeepSim ,用于度量代码功能相似性,从而显着提升现有技术水平。 DeepSim 基于两个关键见解。首先,如果具有更高的抽象,则特征表示对于度量代码语义更有效,因为更高的抽象需要捕获更多的代码语义信息。控制流和数据流表示比代码语法特征(如令牌和AST节点)具有更高的抽象。因此, DeepSim 使用控制流和数据流作为相似性度量的基础。更重要的是,我们开发了一种新颖的编码方法,将代码控制流和数据流编码为紧凑的语义特征矩阵,其中每个元素是高维稀疏二进制特征向量。通过这种编码,我们将代码相似性度量问题降低到识别矩阵中的类似模式问题,这比找到同构子图更具可扩展性。

其次,我们不是人工的从语义矩阵中提取特征向量并计算不同代码之间的距离,而是利用深度神经网络(DNN)的功能来学习基于编码语义矩阵的相似性度量。在过去十年中,DNN在计算机视觉,语音识别和自然语言处理等各个领域取得了突破。最近,还采取了一些措施来解决DNN的程序分析问题。我们设计了一个新的DNN模型,该模型进一步从语义矩阵中学习高级特征,并将度量代码功能相似性的问题转化为二元分类。通过连接来自成对代码片段的特征向量,该模型可以有效地学习具有非常不同语法的功能相似代码之间的模式。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值