当前位置: 首页 > 专利查询>南京大学专利>正文

一种基于数据流分析和注意力机制的Java方法注释即时自动更新方法技术

技术编号:36966623 阅读:19 留言:0更新日期:2023-03-22 19:27
本发明专利技术的主要工作是提出一种基于数据流分析和注意力机制的Java方法注释即时自动更新方法:首先,通过代码差异分析模块识别新旧代码之间的变更内容并表示成编辑序列;其次,通过语法分析模块分析语法节点的变化信息;然后,通过数据流分析模块对Java方法进行数据流依赖分析,得到变量节点间的数据流依赖关系;接着,使用代码文本编码神经网络模块将代码编辑序列转换为向量中间表示,使用代码结构编码神经网络将新代码抽象语法树转换为向量中间表示,使用自然语言编码神经网络模块将Java方法对应的旧注释编码为向量中间表示;最后,融合代码变更序列、代码结构、代码旧注释三方面的中间表示,通过注意力导向的解码模块生成对旧注释的操作序列。旧注释的操作序列。旧注释的操作序列。

【技术实现步骤摘要】
一种基于数据流分析和注意力机制的Java方法注释即时自动更新方法


[0001]本专利技术属于计算机
,尤其是软件
本专利技术提出了一种基于数据流分析和注意力机制的Java方法注释即时自动更新方法,通过分析用户对Java方法的修改,自动将旧注释更新为符合修改后的代码的新注释。本专利技术有效预防了项目中出现注释不规范、代码与注释不一致等问题,从而节省了开发人员的工作量并提高了代码的可读性和可维护性。

技术介绍

[0002]随着软件项目的复杂性和软件产品迭代频率的不断提高,程序理解在整个软件开发过程中变得越来越重要。代码注释是软件项目的重要组成部分,除了源代码,注释被认为是程序理解和维护的最基本要素。代码的各种信息,例如:为什么实现一个函数、如何实现一个函数、如何使用一个API、两个代码片段之间的关系是什么以及一个代码段是如何演变的,都可以用自然语言描述(也就是注释)记录在源代码文件中。这些注释可以帮助后续开发人员理解源代码,支持并促进不同开发人员之间的交流。因此,结构良好、内容正确的注释对代码审查、软件维护与演化起着至关重要的作用。
[0003]作为源代码的重要参考内容,注释需要与相应的代码片断共同演化。然而,在实践中,开发人员可能会在改变源代码的同时忽略更新注释,从而导致注释过时。这样的注释会误导开发者,使代码审查复杂化,甚至可能导致错误的引入,并对软件系统的健壮性产生负面影响。因此,有必要及时修复过时的注释,甚至避免其引入。近年来,深度学习技术不断发展,受序列到序列模型和注释自动生成工作的启发,通过神经网络对代码片段进行编码,再用另一个神经网络将该隐藏状态解码成连贯的句子,这样生成的注释往往具有不错的效果,优于传统方法所生成的注释。因此,可以使用序列到序列模型来构建特殊映射,通过训练不断优化模型,最终将代码变更和旧注释输入到训练好的模型并输出所生成的新注释。
[0004]先前已经有相关工作使用上述思路来自动更新注释。但是先前的工作并未充分利用代码的结构信息,并且和注释生成工作一样令模型从头生成新注释,导致生成的注释准确率不高;另一方面,也有工作提出了启发式方法,根据一定的规则来实现代码修改后自动更新注释,但只能处理一些简单的实例。
[0005]因此,本专利技术的主要目标是基于混合分析并充分利用项目中所有对注释更新有利的信息(包括代码的变更信息、代码的结构信息和旧注释),随后基于深度学习领域的序列到序列模型生成注释的更新操作序列,从而实现对旧注释的自动更新,减轻程序员的开发负担,实现开发效率和质量的提高。

技术实现思路

[0006]本专利技术的主要工作是提出一种基于数据流分析和注意力机制的Java方法注释即时自动更新方法,使用到深度学习领域的循环神经网络技术。首先,本专利技术关注的是Java方
法。Java是软件开发中最受欢迎的语言之一,其语言特点有着丰富的结构、类型信息。此外,目前针对Java语言的程序分析技术较为成熟且广泛使用,能够比较方便地提取到生成注释所需要的基本信息。其次,本专利技术关注如何使用程序分析的结果进行模型训练,并使用训练好的深度学习模型进行注释生成。最后,本专利技术会对生成结果进行机器指标和人工指标评估,并和现有方法进行比较,力求更高的注释更新质量。
[0007]本专利技术的工作和贡献如下。
[0008]1.构建了一键式的自动化Java代码差异分析模块:代码差异分析模块将原始数据集中每个样本的新代码与旧代码之间的词汇进行对齐,从而识别出新代码相对于旧代码的增加、修改、删除及保持不变的部分,并为每个部分添加相应的标签,即增加、修改、删除或不变;然后,将添加了标签的代码序列按照原有的代码顺序依次拼接起来,形成代码编辑序列,作为训练时的输入;同理,对新注释与旧注释也进行同样的分析,形成注释编辑序列,作为训练时的标签。
[0009]2.实现了针对代码变更的语法分析模块和变更引导的注意力机制:语法分析模块将训练集中的Java语言方法级别的每一对新、旧代码样本,通过语法分析工具GumTreeDiff分析得到它们的抽象语法树,接着将两个抽象语法树进行合并,对变化的节点进行标记,形成变更引导的注意力矩阵,作为后续训练模型的特征信息。
[0010]3.实现了数据流分析方法,构建了数据流依赖引导的注意力矩阵,改进模型注意力机制:根据代码抽象语法树,针对方法中所有的变量节点,通过多种规则进行数据流分析,抽取变量之间的数据流关系,再通过数据流依赖引导的注意力矩阵记录变量之间的数据流依赖关系,从而保留代码上下文变量之间的长依赖信息。
[0011]4.实现了注意力导向的解码模块:注意力导向的解码模块是由单向GRU构成的解码器,以代码变更序列、代码结构、代码旧注释三方面的中间表示作为输入,并结合波束搜索算法,同时预测多个注释更新操作序列,通过综合考虑文本、结构信息,提高模型预测的综合精度;与一般的解码器不同,该解码器不直接生成完整的自然语言文本作为新注释,而是生成对旧注释的操作序列,从而减少了需要生成的序列长度,提高了预测的准确度。
[0012]为了增强结果的普适性和说服力,复现了当前现有的最好工作并在相同数据集下进行了验证。结果显示,本专利技术的各项指标均显著高于现有工作。
附图说明
[0013]图1为本专利技术基于结构引导的注意力机制示意图
[0014]图2为本专利技术基于序列

序列(Seq2Seq)模型的架构示意图
具体实施方式
[0015]本专利技术具体包括以下步骤:
[0016]1)对数据集中的代码变更进行差异分析,对新、旧代码中的差异部分进行标注,形成代码编辑序列,作为模型训练的输入数据;
[0017]2)对数据集中的代码变更进行语法分析,得到包含代码变更的抽象语法树,分析语法树中节点的变化信息,形成变更引导的注意力矩阵;
[0018]3)在语法分析得到的抽象语法树的基础上,提取该方法中所有的变量节点,应用
数据流分析方法,得到节点间的数据流关系,形成数据流依赖引导的注意力矩阵;
[0019]4)分别构建针对代码文本、代码结构和旧注释的编码模块,用于将代码文本、代码结构和旧注释转换为向量中间表示,同时引入步骤2)和步骤3)中的两个注意力矩阵,构成结构引导的的注意力机制,实现自注意力机制层;
[0020]5)将步骤4)中得到的代码变更序列、代码结构和旧注释的三方面中间表示拼接成融合中间表示,将得到的融合中间表示输入到注意力导向的解码模块中,生成对旧注释的更新操作序列;
[0021]6)基于步骤4)的编码器和步骤5)的解码器,得到一个序列

序列(Seq2Seq)模型,在训练数据集上进行训练;为提高训练效率,使用GPU进行训练;训练结束后使用测试数据集中的数据输入模型测试,根据方法变更自动更新注释。
[0022]步骤1)数据集中的每个样本均由一个Java方法的新、旧代码对与新、旧注释对构成。首先,将新、旧代码片段分别转换为两个token序列;然后使用di本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于数据流分析和注意力机制的Java方法注释即时自动更新方法,其特征在于包括如下步骤:1)对数据集中的代码变更进行差异分析,对新、旧代码中的差异部分进行标注,形成代码编辑序列,作为模型训练的输入数据;2)对数据集中的代码变更进行语法分析,得到包含代码变更的抽象语法树,分析语法树中节点的变化信息,形成变更引导的注意力矩阵;3)在语法分析得到的抽象语法树的基础上,提取该方法中所有的变量节点,应用数据流分析方法,得到节点间的数据流关系,形成数据流依赖引导的注意力矩阵;4)分别构建针对代码文本、代码结构和旧注释的编码模块,用于将代码文本、代码结构和旧注释转换为向量中间表示,同时引入步骤2)和步骤3)中的两个注意力矩阵,实现自注意力机制层;5)将步骤4)中得到的代码变更序列、代码结构和旧注释的三方面中间表示拼接成融合中间表示,将得到的融合中间表示输入到注意力导向的解码模块中,生成对旧注释的更新操作序列;6)基于步骤4)的编码器和步骤5)的解码器,得到一个序列

序列(Seq2Seq)模型,在训练数据集上进行训练;为提高训练效率,使用GPU进行训练;训练结束后使用测试数据集中的数据输入模型测试,根据方法变更自动更新注释。2.根据权利要求1描述的基于混合分析和注意力机制的Java方法注释即时自动更新方法,其特征在于,步骤1)中所述的代码差异分析模块,具体如下:代码差异分析模块首先将代码文本分割成token序列,旧代码片段和新代码片段被分别转换为两个token序列,再将新代码与旧代码之间的token进行对齐,从而识别出新代码相对于旧代码的增加、修改、删除及保持不变的部分,并为每个部分添加相应的标签,即增加、修改、删除或不变;最后,将添加了标签的token序列按照原有的代码顺序依次拼接起来,形成代码编辑序列。3.根据权利要求1描述的基于混合分析和注意力机制的Java方法注释即时自动更新方法,其特征在于,步骤2)中所述的语法分析过程和变更引导的注意力矩阵,具体如下:语法分析模块将训练集中的Java语言方法级别的每一对新、旧代码样本,通过语法分析工具GumTreeDiff分析得到它们的抽象语法树,接着将两个抽象语法树进行合并,对变化的节点进行标记,形成变更引导的注意力矩阵M,作为后续训练模型的特征信息,同时也保留代码的抽象语法树的所有节点,包括节点值、节点类型等信息,矩阵M定义为:其中,A是如下定义的节点对集合:n
i
和n
j
是同一节点,或拥有相同值的节点,或n
i
和n
j
之间存在赋值关系;CN是所有变更节点的集合。4.根据权利要求1描述的基于混合分析和注意力机制的Java方法注释即时自动更新方法,其特征在于,步骤3)中所述的数据流分析方法,并根据该方法构建了数据流依赖引导的注意力矩阵,具体数据流依赖提取规则如下:输出流(Output

flow)规则:(1)MethodPar...

【专利技术属性】
技术研发人员:许蕾朱泓全
申请(专利权)人:南京大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1