咨询与建议

看过本文的还看了

相关文献

该作者的其他文献

文献详情 >代码克隆检测任务的算法优化与应用研究 收藏
代码克隆检测任务的算法优化与应用研究

代码克隆检测任务的算法优化与应用研究

作     者:刘虎 

作者单位:北京邮电大学 

学位级别:硕士

导师姓名:赵慧

授予年度:2023年

学科分类:08[工学] 0812[工学-计算机科学与技术(可授工学、理学学位)] 081202[工学-计算机软件与理论] 

主      题:代码克隆检测 抽象语法树 图神经网络 Transformer TreeBERT 

摘      要:代码克隆检测起源于人们编写软件代码过程中的复制-粘贴-修改的行为模式,其目的就是去识别相似的代码片段。这是软件领域的一个重要课题,在软件开发管理和系统维护、软件知识产权保护、软件安全三个方面具有十分重要的意义。同时对于任何一个需要软件编程的专业领域都有着重要的工程实用意义。本文首先介绍了国内外多种代码克隆检测算法及其最新研究进展,并对现有算法进行了研究与改进,最后实现了对应的demo软件。本文的主要研究点如下:目前基于深度学习的代码克隆检测获得了良好的效果。但在实际应用中,一方面实际工业生产环境中数据集会经常扩展或更新,另一方面分布式设备或移动设备受限于算力和功耗难以运行复杂度较高的检测模型。针对这种场景,本文提出了一种基于图神经网络的低复杂度代码克隆检测算法,在保证性能指标和基线模型相似的前提下,显著降低模型计算复杂度。该算法在数据预处理步骤上,对抽象语法树(Abstract Syntactical Tree,AST)中非重要节点之间的边进行剪枝:这不仅减少了预处理的计算量,而且减少了在后续模型的消息传播中冗余信息的干扰。在模型上,通过合并图的方法合并代码对的双图,利用门控循环单元(Gated Recurrent Unit,GRU)代替图映射网络(Graph Mapping Network,GMN)实现双图节点之间的隐式映射,减少了模型训练的计算量。在BigCloneBench(BCB)上的测试结果显示,在获得与基线模型相似性能指标的前提下,本文的模型算法减少了 25%的参数和 16%的乘加累计操作(Multiply-accumulate Operations,MACs);在GoogleCodeJam上的实验结果显示,相比类级的检测粒度,该算法更适合于函数级小粒度的代码克隆检测场景。本文还从自然语言处理(Natural Language Processing,NLP)任务的角度对代码克隆检测任务进行算法研究,以实现代码文本和结构的混合编码为目标,将代码生成领域的预训练模型扩展到代码克隆检测领域,提出了一种基于TreeBERT预训练模型的微调网络。在TreeBERT预训练网络的编码器组件基础上,本文构建了内编码器来分别获取代码对中两个代码片段的向量表示,构建了互编码器来建立两个代码片段向量的相互联系,实现了 TreeBERT预训练模型对于代码克隆检测任务的微调。在BCB上的实验显示,所提出的微调模型的检测性能可达到70%的精确率和60%的召回率,超过了基线微调模型。另外基于使用图神经网络的低复杂度代码克隆检测算法,本文给出了代码克隆检测系统软件架构,将检测系统模块化并分别实现,完成了面向函数级检测粒度的代码克隆检测软件系统。经人工测试,可以实现预期检测功能。

读者评论 与其他读者分享你的观点

用户名:未登录
我的评分