基于代码结构化信息及审查知识的Java代码审查评论生成方法及装置制造方法及图纸

技术编号:39034483 阅读:15 留言:0更新日期:2023-10-10 11:47
本发明专利技术涉及一种基于代码结构化信息及审查知识的Java代码审查评论生成方法及装置。该方法包括:获得原始Java代码审查数据,对代码文本和代码审查评论进行向量化表示;在无监督训练阶段对词向量分别通过打乱向量表示和加入掩码标签引入噪声,建立判别式的图模型和语言模型,对被打乱的输入内容进行还原;在有监督训练阶段通过融合无监督训练阶段的模型进行代码审查评论生成,并辅以代码变更预测任务;根据无监督训练阶段、有监督训练阶段所生成的模型,对输入的待审查代码进行自动化代码审查评论输出。本发明专利技术能够提高代码审查评论生成的效率,利用无监督训练和有监督训练二者结合,具有较高解耦性的同时,还能够提高模型的原有性能。原有性能。原有性能。

【技术实现步骤摘要】
基于代码结构化信息及审查知识的Java代码审查评论生成方法及装置


[0001]本专利技术涉及一种基于代码结构化信息及审查知识的Java代码审查评论生成方法及装置,属于计算机技术应用领域。

技术介绍

[0002]自1976年第一次提出“代码审查”的概念开始,在过去的几十年中,代码审查得到了长足的发展。
[0003]然而,在实践过程中,通常有两个方面的因素严重阻碍了这些优势的发挥:1)代码审查评论的撰写过程需要耗费大量时间,且质量不稳定;2)对于审查代码内容的理解同样耗时,且代码理解情况因人而异,存在效果偏差。虽然已有相关工作对这些问题进行研究,但在如今的软件开发过程中,工程师们仍需将大量精力投入到代码审查评论的撰写当中。
[0004]目前代码审查方法主要分为静态分析类方法和机器学习模型方法。对于静态分析类方法主要存在以下不足:一是模型性能有限且不稳定,模型性能依赖于各个静态分析工具的准确性,且模型无法对所选静态工具范围以外的代码进行审查,模型性能更为依靠特征工程的质量以及人工分析的准确性;二是自动化过程不充分,导致泛化性较差,造成这一点的原因是,模型输入内容都是二次处理的结果,而不是审查代码本身,无法对代码中的具体内容进行具体分析,因此应用场景较为有限。对于现有的机器学习模型方法,由于模型设计原理面向的是所有相关的文本类任务,在代码审查评论自动生成任务上的性能表现及专业性存在不足,并且还存在部分粗粒度表示以及代码结构化信息破坏等问题,因此仍有继续改善的空间。
[0005]总的来说,虽然代码审查评论自动生成技术已经初步在学术界有所展现,但现有工作忽略了代码特有的结构化知识及代码审查场景中其他有用的信息,且使用模型的性能表现较为有限,无法于实际场景中实用。

技术实现思路

[0006]本专利技术通过分析研究,提出一种成功基于代码结构化信息及审查知识的Java代码审查评论生成预训练模型。通过对问题进行建模,结合Java代码结构化信息(以代码抽象语法树的形式)及审查知识(以代码变更信息的形式)进行方法设计,通过建立实验验证模型性能,并对生成结果进行有效性分析。
[0007]本专利技术解决其技术问题所采用的技术方案是:
[0008]一种基于代码结构化信息及审查知识的Java代码审查评论生成方法,其步骤包括:
[0009]数据准备阶段:获得原始Java代码审查数据;
[0010]词向量表示阶段:对原始Java代码审查数据中的代码文本使用抽象语法树进行句法解析,获得其结构化表示,对原始Java代码审查数据中的代码审查评论进行切词等处理,
二者会分别根据对应的模型词表进行向量化表示,包括代码文本向量化、代码结构向量化、代码审查评论文本向量化,生成对应的词向量;
[0011]无监督训练阶段:基于语言模型,对词向量分别通过打乱向量表示和加入掩码标签两种模式引入噪声,然后建立判别式的图模型和语言模型(属于预训练模型中的图模型和语言模型),通过无监督训练对被打乱的输入内容进行还原;
[0012]有监督训练阶段:通过融合无监督训练阶段的图模型和语言模型,以其为基础进行有监督训练,进行代码审查评论生成,同时辅以代码变更预测任务;其中,代码变更预测任务是预测当前代码段是需要进行删除,增加还是修改;
[0013]根据无监督训练阶段、有监督训练阶段所生成的模型,对输入的待审查代码进行自动化代码审查评论输出。
[0014]进一步地,建立代码文本的词向量表示的方法包括:建立代码文本序列化表示及抽象语法树结构化表示。
[0015]进一步地,通过以下步骤得到代码文本和代码审查评论的向量表示:
[0016]建立代码抽象语法树,并通过层级抽取形成代码文本形式化表示,再通过SBT(结构化横向切面算法,structure

based traversal)算法将其转化成序列化向量表示;
[0017]建立一个映射字典,将英文标注映射成对应的数字,得到标注数据(代码审查评论文本)的向量表示。
[0018]进一步地,所述代码审查评论包括对代码进行审查后保留的意见内容,包括但不限于:Bug查找,代码改进,团队交流。
[0019]进一步地,通过以下步骤实现代码文本向量化、代码结构向量化:
[0020]1)通过使用javalang工具包(https://github.com/c2nes/javalang)中的形式化表示功能,将代码文本表示为代码抽象语法树;
[0021]2)以“树”形式展现Java代码文本及其中各模块层级,对函数级的节点进行抽取、分离,从而实现代码文本向量化;
[0022]3)采用SBT算法,以深度搜索的形式将结构化信息转化为由特殊符号分割表现的序列化信息;
[0023]4)将获得的序列化信息输入T5模型,得到代码文本的结构化信息的向量化表示,从而实现代码结构向量化。
[0024]进一步地,所述结构化信息包括:节点信息,节点关系,层级划分。
[0025]进一步地,所述语言模型是在大型数据集上预先训练好的模型,这些模型可以用来进行迁移学习,也就是在新的任务上进行微调,从而获得较好的性能。
[0026]进一步地,所述语言模型包括:T5模型(文本到文本迁移转换器,Text

to

Text Transfer Transformer)。
[0027]进一步地,所述T5模型包括:Huggingface社区开源的t5

base

java模型(https://huggingface.co/SEBIS/code_trans_t5_large_code_documentation_generation_java_multit ask_finetune)。
[0028]进一步地,所述对输入的待审查代码进行自动化代码审查评论输出,其获取代码审查评论的方法包括:在无监督训练阶段采用随机打乱和掩码模型的“引噪

降噪”模式,在有监督训练阶段采用多任务微调模式。其中,多任务是指代码变更预测任务,代码审查评论
生成任务;多任务微调模式是指在此二者任务基础上进行预训练模型参数微调训练。
[0029]进一步地,所述对输入的待审查代码进行自动化代码审查评论输出,是通过以下步骤得到代码审查评论:
[0030]1)判别式训练。以T5模型为基础,在其输出层之后再加入判别器,对被破坏字词位置进行反预测,以恢复原文本数据。判别器根据T5模型输出的文本词向量表示,对被破坏的节点信息进行预测,取其中预测概率最大值作为预测结果,再与原结果进行对比,获得反馈结果,训练5000步,每步16组数据。
[0031]2)掩码模型训练。通过掩码随机遮盖文本字词,再对被掩码遮盖的字词进行反预测,进行内容复原,训练5000步,每步16组数据。掩码模型遮盖内容可能为一个词或连续的多个词,也可能没有遮盖任何词。...

【技术保护点】

【技术特征摘要】
1.一种基于代码结构化信息及审查知识的Java代码审查评论生成方法,其特征在于,包括:获得原始Java代码审查数据;对原始Java代码审查数据中的代码文本和代码审查评论进行向量化表示,包括代码文本向量化、代码结构向量化、代码审查评论文本向量化,生成对应的词向量;在无监督训练阶段,对词向量分别通过打乱向量表示和加入掩码标签两种模式引入噪声,然后建立判别式的图模型和语言模型,对被打乱的输入内容进行还原;在有监督训练阶段,通过融合无监督训练阶段的图模型和语言模型,进行代码审查评论生成,同时辅以代码变更预测任务;根据无监督训练阶段、有监督训练阶段所生成的模型,对输入的待审查代码进行自动化代码审查评论输出。2.如权利要求1所述的方法,其特征在于,对所述代码文本和所述代码审查评论进行向量化表示的方法包括:建立代码抽象语法树,并通过层级抽取形成代码文本形式化表示,再通过SBT算法将其转化成序列化向量表示;建立一个映射字典,将英文标注映射成对应的数字,得到代码审查评论的向量表示。3.如权利要求1所述的方法,其特征在于,通过以下步骤实现代码文本向量化、代码结构向量化:通过使用javalang工具包中的形式化表示功能,将代码文本表示为代码抽象语法树;以“树”形式展现Java代码文本及其中各模块层级,对函数级的节点进行抽取、分离,从而实现代码文本向量化;采用SBT算法,以深度搜索的形式将结构化信息转化为由特殊符号分割表现的序列化信息;将获得的序列化信息输入T5模型,得到代码文本的结构化信息的向量化表示,从而实现代码结构向量化;所述结构化信息包括:节点信息,节点关系,层级划分。4.如权利要求1所述的方法,其特征在于,所述语言模型包括T5模型;所述T5模型包括Huggingface社区开源的t5

base

java模型。5.如权利要求1所述的方法,其特征在于,所述对输入的待审查代码进行自动化代码审查评论输出,包括:在无监督训练阶段采用随机打乱和掩码模型的“引噪

降噪”模式,在有监督训练阶段采用多任务微调模式,其中多任务是指代码变更预测任务和代码审查评论生成任务。6.如权利要求1所述的方法,其特征在于,所述对输入的...

【专利技术属性】
技术研发人员:杨立李凌伟马肖肖张凤军左春
申请(专利权)人:中国科学院软件研究所
类型:发明
国别省市:

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

1