[发明专利]一种基于深度学习的克隆代码语义检测方法有效
申请号: | 202011205774.X | 申请日: | 2020-11-02 |
公开(公告)号: | CN112215013B | 公开(公告)日: | 2022-04-19 |
发明(设计)人: | 成肖云;王建荣;王赞;贾勇哲;马国宁 | 申请(专利权)人: | 天津大学;天津泰凡科技有限公司 |
主分类号: | G06F40/30 | 分类号: | G06F40/30;G06F40/284;G06N3/04 |
代理公司: | 天津市北洋有限责任专利代理事务所 12201 | 代理人: | 李素兰 |
地址: | 300072*** | 国省代码: | 天津;12 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 深度 学习 克隆 代码 语义 检测 方法 | ||
本发明公开了一种基于深度学习的语义克隆检测方法,对于给定代码块对,首先将代码块预处理成TPE的基本单元的序列,然后对它们进行词嵌入操作,用于上下文特性组合的BiLSTM模块;接着,用自注意力机制来集中提取神经网络学习到的克隆代码相关有用信息;将每一个代码片段都被转化为一个向量表示,计算向量之间的欧几里得距离作为分类的特征,对它们进行二分类:如果两个代码块相似,则其经过神经网络生成的向量应该相近,即预测克隆/非克隆。与现有技术相比,本发明的更节省时间,同时可以捕获丰富的语法和语义信息;TPE还可以避免词汇量不足(OOV)的问题。
技术领域
本发明涉及程序分析和机器学习领域,尤其是涉及一种源代码的表示和语义克隆检测方法。
背景技术
克隆代码就是重复的代码、相似的代码。常见的是将代码克隆分为四种类型:1)一型克隆是除空格、格式和注释不同外是完全相同的两个代码片段;2)二型克隆是两个代码片段除标识符、常量、变量类型不同外是完全相同的两个代码片段;3)三型克隆是对复制过来代码片段进行少量语句修改,如改变、增加或删除少量语句的代码的两个代码片段;4)四型克隆主要与功能相似性有关。前三种类型主要与文本相似性有关。代码克隆的存在不必要地增加了程序大小,对代码段的更改也需要对其克隆进行修改,从而增加维护工作量,而且复制包含错误的代码片段会导致错误传播。检测代码克隆有助于降低软件维护成本并防止发生错误。
在各种检测代码克隆的方法中很少能够检测语义克隆,因为语义克隆是最难以检测的,它们包括在语法上不同但仍然执行相同功能的克隆,因此,提出一个有效检测代码语义克隆的方法是十分有必要的。
语义克隆检测的一个关键问题是如何有效地学习源代码的表示,从而有效地捕捉其语义。Token和抽象语法树(AST)通常用于检测代码克隆。但是Token无法很好的学习到代码结构中包含的语义信息,这对于语义克隆检测任务来说是不够的。最近的语义克隆检测工作多利用抽象语法树(AST)来结合语法信息来表示代码,这些方法被证明是有效的,但检测效率较低,因为代码的抽象语法树(AST)通常比文本的解析树更复杂。代码克隆检测不仅考虑准确度还要考虑效率。
在代码克隆检测任务中,使用Token作为代表程序源代码的基本分割方法非常常见。经过规范化的Token词汇量很小(通常不超过300个不同的规范化Token),词汇量小导致学习到的词汇表(预训练获得的一种外部知识)容量有限,使得外部预训练对神经模型无效。因此语义克隆检测任务通常采用未规范化的令牌。但是Token仍然可能无法捕获丰富的语义信息,特别是在程序中使用无意义的变量。
为了从预训练中提取更多的信息,一种直接的方法是扩大输入词汇量。语句级分割可能是一种自然选择,但是,由于语句的多样性,它的词汇量可以无限大。不可能训练一个包含所有可能语句表示的词汇表。因此,可能会遇到在词汇表中找不到向量表示的输入语句,这被称为OOV(out-of-vocabulary)问题。OOV问题严重限制了代码表示的有效性。
发明内容
本发明旨在解决程序中语义代码克隆的检测问题,提出一种基于深度学习的语义克隆检测方法,通过提出一种源代码表示单元TPE来表示程序源代码,再利用有监督的分类器实现侧重语义克隆检测的代码克隆对的检测。
本发明的一种基于深度学习的克隆代码语义检测方法,该方法具体包括以下流程:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于天津大学;天津泰凡科技有限公司,未经天津大学;天津泰凡科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011205774.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种农业机械翻土装置
- 下一篇:轴承滚子球基面分区研磨设备