一种基于程序分析和神经网络的注释定位方法技术

技术编号:24035085 阅读:49 留言:0更新日期:2020-05-07 01:40
本发明专利技术为一种基于程序分析和神经网络的注释定位方法,步骤如下:首先构建需要分析的项目;提取Java项目中的每个方法的注释,进行人工标注类别,构建注释分类器的训练集;训练注释分类器,对注释进行分类,提取其中描述方法实现细节的注释;获取每个方法体内的所有变量;将方法里的变量和方法的注释进行匹配,找出注释里存在的变量;根据注释里的变量从方法体内提取与之相关的代码片段,构建注释定位模型的训练集;训练注释定位模型,并且通过该模型来计算注释与代码片段的相似度,以此来构建代码与注释之间的映射关系。本发明专利技术主要将注释与其对应的代码进行关联,可以帮助开发人员理解代码功能,提高开发效率。

A method of annotation location based on program analysis and neural network

【技术实现步骤摘要】
一种基于程序分析和神经网络的注释定位方法
本专利技术属于软件工程领域,尤其涉及一种基于程序分析和神经网络的注释定位方法,主要对源代码中的代码和注释进行提取,通过神经网络构建映射关系。
技术介绍
随着软件开发过程不断复杂化,开发人员之间的协作变得更加重要,一个项目的开发往往需要多名开发人员共同协作,经常需要与其他开发人员进行交互,或调用别的开发人员所提供的接口来进行协作开发。在开发过程中也可能伴随着人员的更换,在项目交接的过程中需要阅读其他开发人员所编写的代码来理解业务功能。因此,正确理解已有的API就十分重要,能提高开发效率减少引入重复的BUG,为了理解程序,开发人员主要是通过阅读代码中已有的注释,来了解代码所要表达的意图。高质量的代码注释可以准确的说明代码的核心功能,减少维护人员理解代码的时间。不过开发过程中,虽然往往会要求开发人员对方法或变量添加注释进行说明,并以此生成维护文档。但是因为编写正确且高质量的注释成本太高,因此开发人员倾向于不添加注释,或者仅从自己的角度出发,编写方便自己理解的注释,从而导致代码注释的可读性很差,无法确定所写的注释具体描述的是哪一段代码,需要花费更多的精力来理解代码。针对这些问题的一个有效解决方案是在软件开发人员阅读代码时,可以将每一条注释定位到具体的一段代码。这种定位功能,可以帮助开发人员更好地理解代码的功能,从而提高开发的效率和准确性。但是目前还没有这一项注释定位技术,因此,本专利技术的主要目标是研究一种能够自动生成注释与代码之间的定位信息,帮助开发者理解代码,更好地完成开发任务。
技术实现思路
本专利技术的目的是针对现有问题,提出一种基于程序分析和神经网络的注释定位方法,以解决软件开发中由于书写不规范而造成代码可读性差的问题。本专利技术实现了注释自动定位,提高代码的可读性,降低代码开发成本,提高代码开发的效率。为实现上述目的,本专利技术采用的技术方案是:一种基于程序分析和神经网络的注释定位方法,包含以下步骤:S1、下载Java开源项目,提取项目中方法级别的注释;S2、根据步骤S1中取到的注释数据,进行人工标注注释类别,组成<注释,注释类别>对的集合,作为注释分类的训练集;S3、对步骤S2生成的训练集进行预处理,利用神经网络模型,进行注释分类器的训练;S4、将项目中每个方法的注释使用分类器进行分类,提取How类型的注释,并且从方法体内找出对应的代码,组成<注释,代码片段>对的集合,作为注释定位模型的训练集;S5、对步骤S4所构建的训练集进行预处理,并且利用神经网络模型,进行注释定位模型的训练;S6、注释定位模型训练完成后,给定Java方法中的一条注释语句和多个代码片段,输出与这条注释最相似的代码片段,组成注释和代码片段的映射关系;具体地,步骤S2中,Java方法级别的注释包括What型注释和How型注释。其中What型注释是描述方法功能的注释,How型注释是描述方法具体实现的注释。具体地,步骤S3中,对训练集进行预处理是指,将注释文本进行分词,并且删除其中的稀有符号和停用词,构建一个注释词汇表,并将注释文本转化成数字列表。具体地,步骤S4中,构建注释定位模型的训练集,具体方法为:首先获取方法体内的所有变量,然后与方法的How类型注释进行匹配,找出注释中存在的变量,再根据这些变量从方法体内找出与之相关的代码片段。一条注释可能对应多个代码判断,故需要通过人工判断哪段代码片段与注释意思最相近,从而组和成<注释,代码片段>对的集合。具体地,步骤S5中,注释定位模型是使用的是循环神经网络,将代码与注释映射到一个向量空间,然后通过计算注释向量和代码向量的余弦相似度,来构建注释与代码的映射关系。本专利技术的有益效果:与现有技术相比,本专利技术主要利用程序分析和神经网络技术来实现对注释进行自动定位。本专利技术可以有效解决注释由于书写不规范而带来的问题,定位注释与代码的位置,增强了代码的可读性,减轻开发人员的负担,提高了开发效率。附图说明图1为本专利技术基于程序分析和神经网络的注释定位流程结构示意图;图2为代码与注释提取流程结构示意图;具体实施方式下面将结合本专利技术中的附图,对本专利技术的技术方案作进一步的说明,实施方式提及的内容并非对本专利技术的限定。如图1所示,本专利技术的一种基于程序分析和神经网络的注释定位方法,具体包括以下步骤:S1、下载Java开源项目,提取项目中方法级别的注释;S2、根据步骤S1中取到的注释数据,进行人工标注注释类别,组成<注释,注释类别>对的集合,作为注释分类的训练集;S3、对步骤S2生成的训练集进行预处理,利用神经网络模型,进行注释分类器的训练;S4、将项目中每个方法的注释使用分类器进行分类,提取How类型的注释,并且从方法体内找出对应的代码,组成<注释,代码片段>对的集合,作为注释定位模型的训练集;S5、对步骤S4所构建的训练集进行预处理,并且利用神经网络模型,进行注释定位模型的训练;S6、注释定位模型训练完成后,给定Java方法中的一条注释语句和多个代码片段,输出与这条注释最相似的代码片段,组成注释和代码片段的映射关系;具体地,步骤S1中,本专利技术的目标是训练出一个神经网络模型,所以需要构建足够数据的代码库。从Github开源社区下载star数在2000以上的java开源项目,通过EclipseJDT工具提取其中的方法级别的注释。具体地,步骤S2中,Java方法级别的注释包括What型注释和How型注释。其中What型注释是描述方法功能的注释,How型注释是描述方法具体实现的注释。将从Java项目中提取的方法级别的注释进行人工分类,组成<注释,代码片段>对的集合,作为注释分类模型的训练集。具体地,步骤S3中,通过S2获得的注释数据对注释分类器的训练集,对其进行预处理,具体步骤如下:S3.1、将注释语句进行分词;S3.2、删除停用词;S3.3、将单词变为小写;S3.4、构建一个大小为10000的注释词汇表;S3.5、将注释语句转换为数字列表。进一步地,注释分类模型的主要参数设置为:卷积神经网络的词嵌入维度大小为128,隐藏层数为48,使用Adam优化器。具体地,如图2所示,步骤S4中,构建注释定位模型的训练集,具体步骤如下:S4.1、使用注释分类器对注释进行分类,取出How类型的注释;S4.2、获取方法体内的所有变量;S4.3、将方法体内变量与方法的How类型注释进行匹配,找出注释中存在的变量;S4.4、根据注释中存在的变量从方法体内找出与之相关的代码片段;S4.5一条注释可能对应多个代码片段,故需要通过人工判断哪个代码片段与注释意思最相近,从而组成<注释,代码片段>对的集合。具体地,本文档来自技高网
...

【技术保护点】
1.一种基于程序分析和神经网络的注释定位方法,其特征在于,包括步骤如下:/nS1、下载Java开源项目,提取项目中方法级别的注释;/nS2、根据步骤S1中取到的注释数据,进行人工标注注释类别,组成<注释,注释类别>对的集合,作为注释分类的训练集;/nS3、对步骤S2生成的训练集进行预处理,利用神经网络模型,进行注释分类器的训练;/nS4、将项目中每个方法的注释使用分类器进行分类,提取How类型的注释,并且从方法体内找出对应的代码,组成<注释,代码片段>对的集合,作为注释定位模型的训练集;/nS5、对步骤S4所构建的训练集进行预处理,并且利用神经网络模型,进行注释定位模型的训练;/nS6、注释定位模型训练完成后,给定Java方法中的一条注释语句和多个代码片段,输出与这条注释最相似的代码片段,组成注释和代码片段的映射关系。/n

【技术特征摘要】
1.一种基于程序分析和神经网络的注释定位方法,其特征在于,包括步骤如下:
S1、下载Java开源项目,提取项目中方法级别的注释;
S2、根据步骤S1中取到的注释数据,进行人工标注注释类别,组成<注释,注释类别>对的集合,作为注释分类的训练集;
S3、对步骤S2生成的训练集进行预处理,利用神经网络模型,进行注释分类器的训练;
S4、将项目中每个方法的注释使用分类器进行分类,提取How类型的注释,并且从方法体内找出对应的代码,组成<注释,代码片段>对的集合,作为注释定位模型的训练集;
S5、对步骤S4所构建的训练集进行预处理,并且利用神经网络模型,进行注释定位模型的训练;
S6、注释定位模型训练完成后,给定Java方法中的一条注释语句和多个代码片段,输出与这条注释最相似的代码片段,组成注释和代码片段的映射关系。


2.根据权利要求1所描述的一种基于程序分析和神经网络的注释定位方法,其特征在于,所述步骤S2中,Java方法级别的注释包括What型注释和How型注释。其中What型注释是描述方法功能的注释,...

【专利技术属性】
技术研发人员:张卫丰李小满周国强王子元张迎周
申请(专利权)人:南京邮电大学
类型:发明
国别省市:江苏;32

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

1