一种代码片段重要性的判断方法和装置

文档序号:907631 发布日期:2021-02-26 浏览:7次 >En<

阅读说明:本技术 一种代码片段重要性的判断方法和装置 (Method and device for judging importance of code segment ) 是由 舒俊淮 陈湘萍 金舒原 郑子彬 于 2020-12-07 设计创作,主要内容包括:本发明公开了一种代码片段重要性的判断方法和装置,包括:通过预置的分类模型训练过程生成目标分类模型;当接收待注释代码片段时,提取所述待注释代码片段的第一特征向量;将所述第一特征向量输入到所述目标分类模型,输出对所述待注释代码片段的重要性判断结果。该方法能够高效地判断待注释代码的重要性,以便于软件开发与维护人员的注释行为规范化,使代码注释量保持在一个更为合适的范围。(The invention discloses a method and a device for judging the importance of a code segment, which comprises the following steps: generating a target classification model through a preset classification model training process; when a code segment to be annotated is received, extracting a first feature vector of the code segment to be annotated; and inputting the first feature vector into the target classification model, and outputting the importance judgment result of the code segment to be annotated. The method can efficiently judge the importance of the code to be annotated so as to facilitate the standardization of the annotation behavior of software development and maintenance personnel and keep the code annotation amount in a more appropriate range.)

一种代码片段重要性的判断方法和装置

技术领域

本发明涉及计算机技术领域,尤其涉及一种代码片段重要性的判断方法和装置。

背景技术

智能软件工程的研究方向包括软件仓库挖掘、程序代码理解、代码自动生成、注释自动生成等,其目的都是帮助软件开发人员提高开发、维护过程中的效率。近几年来,由于机器学习和深度学习技术的兴起,智能软件工程问题的相关研究人员开始探索用这些先进技术来解决相关研究问题的可能性,并得到了不少令人鼓舞的成果。例如基于信息检索和推荐系统技术帮助开发人员提高对开源软件仓库的利用率;基于机器学习的方法判别出代码中重要的词语以帮助其他任务对程序的正确理解;基于卷积神经网络的代码生成技术;等等。

代码注释的自动生成技术是智能软件工程研究领域一个热门的话题。代码注释可以帮助我们了解代码作者的意图和思路,对软件维护、代码重用和团队协作开发等都有重要作用。该技术的研究旨在对于一个给定的代码片段,由机器自动生成该代码片段的注释,以减少软件开发人员花在撰写代码注释上的时间,提高开发效率。借助机器学习和深度学习技术,研究人员把该问题转化成自然语言处理中的“翻译任务”来解决。通过使用自然语言处理中的序列到序列模型(即,输入一个文本序列,模型会输出一个文本序列),研究人员将代码语言“翻译”成自然语言,将得到的自然语言当成对应代码片段的注释。

但在现有的预测代码注释位置的技术中,只是单纯地将代码文本转化成特征向量来训练模型。这种做法在自然语言处理中是相当常见的。但这样做相当于把代码文本完全当成自然语言,只是利用了代码的文本信息,导致最后这种方法的效果并不那么理想。另外,这种方法对文本信息的利用也不够充分,它只是单纯地将单词转换成特征,没有考虑到文本的分布情况,可能会导致确定代码注释位置的准确性变低,无法给开发人员合理的建议,进而降低软件开发和维护人员的工作效率。

发明内容

本发明提供了一种代码片段重要性的判断方法和装置,解决了现有的预测代码注释位置的技术中仅局限于将代码文本当成无结构的纯文本,对多个维度的特征利用率较低所导致的确定代码注释位置的准确性变低,无法给开发人员合理的建议,进而降低软件开发与维护人员工作效率的技术问题。

本发明提供的一种代码片段重要性的判断方法,包括:

接收待注释代码片段;

提取所述待注释代码片段的第一特征向量;

将所述第一特征向量输入到所述目标分类模型,输出对所述待注释代码片段的重要性判断结果;

其中,所述目标分类模型通过预置的分类模型训练过程所生成。

可选地,所述分类模型训练过程包括:

从预置的软件仓库中获取已注释代码文件;

以函数为单位对所述已注释代码文件进行划分,生成多个训练代码片段;

为具有预设类型注释的所述训练代码片段设置第一预设标签;

为不具有预设类型注释的所述训练代码片段设置第二预设标签;

分别提取每个所述训练代码片段的第二特征向量;

采用多个所述第二特征向量训练预置的初始分类模型,得到目标分类模型。

可选地,所述第一特征向量包括语法特征向量、文本特征向量、结构特征向量和关系特征向量,所述提取所述待注释代码片段的第一特征向量的步骤,包括:

将所述待注释代码片段转换为抽象语法树;

从所述抽象语法树中提取所述待注释代码片段的语句类型信息;

根据对所述语句类型信息的统计结果,确定所述待注释代码片段对应的语法特征向量;

按照预设变量词划分规则从所述待注释代码片段中提取目标单词;

根据对所述目标单词的统计结果,确定所述待注释代码片段对应的文本特征向量;

根据所述待注释代码片段的复杂程度,确定所述待注释代码片段对应的结构特征向量;

基于所述待注释代码片段的函数调用数量,确定所述待注释代码片段对应的关系特征向量。

可选地,所述语句类型信息包括多种语句类型的出现频率、数量和频率分布情况,所述根据对所述语句类型信息的统计结果,确定所述待注释代码片段对应的语法特征向量的步骤,包括:

统计所述多种语句类型的频率分布情况,确定语句频率分布特征;

统计所述多种语句类型的数量,确定语句数量特征;

统计所述多种语句类型所对应的语句总数量,确定总语句数量特征;

采用第一预置词特征转换模型将所述多种语句类型分别转换为语句类型特征;

以所述出现频率作为权重,对多个所述语句类型特征进行加权求和,确定总语句类型特征;

拼接所述语句频率分布特征、所述语句数量特征、所述总语句数量特征和所述总语句类型特征,生成所述待注释代码片段对应的语法特征向量。

可选地,所述预设变量词划分规则包括驼峰规则或下划线规则,所述按照预设变量词划分规则从所述待注释代码片段中提取目标单词的步骤,包括:

从所述待注释代码片段中提取单词;

采用所述驼峰规则或所述下划线规则从所述单词中确定待处理单词;

从所述待处理单词中删除预设停用词,得到待提取单词;

提取所述待提取单词中的词干,生成目标单词。

可选地,所述目标单词包括多个待统计单词,所述根据对所述目标单词的统计结果,确定所述待注释代码片段对应的文本特征向量的步骤,包括:

统计所述多个待统计单词的总数量,确定总单词数量特征;

统计所述多个待统计单词的种类数量,确定单词种类数量特征;

分别计算所述多个待统计单词中的每种待统计单词的出现频次的方差,确定单词方差特征;

统计所述多个待统计单词中非英语单词的比例,确定非单词比例特征;

采用第二预置词特征转换模型将所述多个待统计单词分别转换为单词特征;

以每个所述待统计单词的出现频率作为权重,对所有所述单词特征进行加权求和,生成总单词特征;

拼接所述总单词数量特征、所述单词种类数量特征、所述单词方差特征、所述非单词比例特征和所述总单词特征,生成所述待注释代码片段对应的文本特征向量。

可选地,所述根据所述待注释代码片段的复杂程度,确定所述待注释代码片段对应的结构特征向量的步骤,包括:

统计所述待注释代码片段中的代码行数,确定行数特征;

统计所述待注释代码片段中的嵌套语句数量,确定嵌套语句数量特征;

统计所述待注释代码片段中的最大嵌套层数,确定嵌套最大层数特征;

统计所述待注释代码片段中的形式参数数量,确定形参数量特征;

分别统计所述待注释代码片段中最长语句的单词数量特征、所述待注释代码片段的API调用数量特征、所述待注释代码片段的变量数量特征、所述待注释代码片段的标识符数量特征以及所述待注释代码片段的内部注释数量特征,依次拼接生成综合特征;

拼接所述行数特征、所述嵌套语句数量特征、所述嵌套最大层数特征、所述形参数量特征和所述综合特征,生成所述待注释代码片段对应的结构特征向量。

可选地,所述函数调用数量包括调用额外函数数量和被调用次数,所述基于所述待注释代码片段的函数调用数量,确定所述待注释代码片段对应的关系特征向量的步骤,包括:

遍历所述待注释代码片段所属的待注释代码文件,确定所述待注释代码片段的所述调用额外函数数量和所述被调用次数;

拼接所述调用额外函数数量和所述被调用次数,生成所述待注释代码片段对应的关系特征向量。

可选地,所述将所述第一特征向量输入到所述目标分类模型,输出对所述待注释代码片段的重要性判断结果的步骤,包括:

将所述第一特征向量输入到所述目标分类模型;

当所述目标分类模型的输出为所述第一预设标签时,确定所述待注释代码片段的重要性判断结果为重要;

当所述目标分类模型的输出为所述第二预设标签时,确定所述待注释代码片段的重要性判断结果为不重要。

本发明还提供了一种代码片段重要性的判断装置,包括:

代码片段接收模块,用于接收待注释代码片段;

第一特征向量提取模块,用于提取所述待注释代码片段的第一特征向量;

重要性输出模块,用于将所述第一特征向量输入到所述目标分类模型,输出对所述待注释代码片段的重要性判断结果;

其中,所述目标分类模型通过预置的分类模型训练模块所生成。

从以上技术方案可以看出,本发明具有以下优点:

本发明通过预置的分类模型训练过程生成目标分类模型,当接收到待注释代码片段时,从待注释代码片段提取第一特征向量,最后将第一特征向量输入目标分类模型,以得到待注释代码片段的重要性判断结果。从而解决现有的预测代码注释位置的技术中仅局限于将代码文本当成无结构的纯文本,对多个维度的特征利用率较低所导致的确定代码注释位置的准确性变低,无法给开发人员合理的建议,降低软件开发与维护人员工作效率的技术问题,进而能够高效地判断待注释代码的重要性,以便于优化软件开发与维护人员的注释行为,使代码注释量保持在一个更为合适的范围。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。

图1为本发明实施例提供的一种代码片段重要性的判断方法的步骤流程图;

图2为本发明可选实施例提供的一种代码片段重要性的判断方法的步骤流程图;

图3为本发明实施例中的嵌套语句示例图;

图4为本发明另一实施例提供的一种代码片段重要性的判断方法的步骤流程图;

图5为本发明实施例提供的一种代码片段重要性的判断装置的结构框图。

具体实施方式

本发明实施例提供了一种代码片段重要性的判断方法和装置,用于解决现有的预测代码注释位置的技术中仅局限于将代码文本当成无结构的纯文本,对多个维度的特征利用率较低所导致的确定代码注释位置的准确性变低,无法给开发人员合理的建议,进而降低软件开发与维护人员工作效率的技术问题。

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

请参阅图1,图1为本发明实施例提供的一种代码片段重要性的判断方法的步骤流程图。

本发明提供的一种代码片段重要性的判断方法,包括:

步骤101,接收待注释代码片段;

在本发明实施例中,为更准确地判断出代码片段的重要性,以更好地支持下游任务如判断代码注释的位置,在用户需要对代码片段进行注释之前,可以先接收用户输入的待注释代码片段进行重要性判断过程。

其中,待注释代码片段可以为Java代码片段等,本发明实施例对此不作限制。

步骤102,提取所述待注释代码片段的第一特征向量;

在接收到待注释代码片段后,从待注释代码片段中提取第一特征向量,例如语法特征、文本特征、结构特征和关系特征等,以此作为后续模型的输入量,基于上述特征进行待注释代码片段的重要性判断过程。

步骤103,将所述第一特征向量输入到所述目标分类模型,输出对所述待注释代码片段的重要性判断结果;

在具体实现中,所述目标分类模型通过预置的分类模型训练过程所生成,在得到目标分类模型后,将第一特征向量输入到目标分类模型进行待注释代码片段的重要性判断过程,从而确定该代码片段是否重要作为重要性判断结果。

本发明通过预置的分类模型训练过程生成目标分类模型,当接收到待注释代码片段时,从待注释代码片段提取第一特征向量,最后将第一特征向量输入目标分类模型,以得到待注释代码片段的重要性判断结果。从而解决现有的预测代码注释位置的技术中仅局限于将代码文本当成无结构的纯文本,对多个维度的特征利用率较低所导致的确定代码注释位置的准确性变低,无法给开发人员合理的建议,降低软件开发与维护人员工作效率的技术问题,进而能够高效地判断待注释代码的重要性,以便于优化软件开发与维护人员的注释行为,使代码注释量保持在一个更为合适的范围。

请参阅图2,图2为本发明可选实施例提供的一种代码片段重要性的判断方法的步骤流程图。

本发明提供的一种代码片段重要性的判断方法,包括:

步骤201,接收待注释代码片段;

在步骤201之前,为便于后续能够快速地对待注释代码片段的重要性判断过程,可以在事前通过分类模型训练过程以生成目标分类模型,所述分类模型训练过程包括以下步骤S1-S6:

S1、从预置的软件仓库中获取已注释代码文件;

在本发明实施例中,为了得到足够多可靠的训练数据,首先从软件项目仓库Github中获取一些由国际大型公司或组织开源的有着悠久维护历史的Java项目的代码文件,也就是已注释代码文件。

S2、以函数为单位对所述已注释代码文件进行划分,生成多个训练代码片段;

S3、为具有预设类型注释的所述训练代码片段设置第一预设标签;

S4、为不具有预设类型注释的所述训练代码片段设置第二预设标签;

在具体实现中,由于已注释代码文件往往是包括多个代码片段的,而本发明的目的是判断代码片段的重要性。为此可以先对已注释代码文件以函数为单位进行划分,将已注释代码文件划分为一个个函数的训练代码片段,再根据训练代码片段是否具有为标准,对每个训练代码片段都打上标签。

具体地,可以为具有预设类型注释的所述训练代码片段设置第一预设标签,用于标识该代码片段重要,为不具有预设类型注释的所述训练代码片段设置第二预设标签,用于标识该代码片段不重要。其中,预设类型注释可以为函数头注释等,第一预设标签可以为1,第二预设标签可以为0,本发明实施例对注释类型和标签形式并不限制。

S5、分别提取每个所述训练代码片段的第二特征向量;

S6、采用多个所述第二特征向量训练预置的初始分类模型,得到目标分类模型。

在本发明实施例中,在获取到训练代码片段之后,还需要提取训练代码片段的第二特征向量,第二特征向量的类型与第一特征向量相同,即第二特征向量同样包括语法特征向量、文本特征向量、结构特征向量和关系特征向量,其提取的方式与第一特征向量的提取方式相同。

在得到每个训练代码片段的第二特征向量后,可以采用多个第二特征向量组成训练集,采用训练集训练预置的初始分类模型,以得到目标分类模型。

值得一提的是,初始分类模型可以为随机森林模型或其他分类模型,本发明实施例对此不作限制。

具体的训练过程可以如下:将数据集随机分成10等份,每次取其中1份作为测试集,其他9份作为训练集。用训练集训练模型,用测试集测试模型的效果。当模型在测试集上的效果连续20个迭代都不再提升时,记录下效果最好时对应的迭代次数。重复以上的训练过程10次,让10等分的数据集中,每一份都已经作为测试集,得到10个最佳迭代次数。对这10个迭代次数求平均值,作为我们最终训练模型时的迭代次数。最后我们用全量数据训练一个随机森林模型,当模型迭代次数到达预设值时,训练完成。

在本发明实施例中,所述第一特征向量包括语法特征向量、文本特征向量、结构特征向量和关系特征向量,上述步骤102可以替换为以下步骤202-208:

步骤202,将所述待注释代码片段转换为抽象语法树;

抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。

在本发明实施例中,为能够使待注释代码片段的语法结构能够得到形象具体的体现,可以将待注释代码片段转换为抽象语法树,以便于后续对语语法特征向量的提取。

步骤203,从所述抽象语法树中提取所述待注释代码片段的语句类型信息;

由于抽象语法树能够反映待注释代码片段中的每一种语法结构,也就是能够反映待注释代码片段的语句类型信息,因此可以从抽象语法树中提取所述待注释代码片段的语句类型信息,包括但不限于IfStmt(if语句)、ForStmt(for循环语句)、WhileStmt(while循环语句)等等。

步骤204,根据对所述语句类型信息的统计结果,确定所述待注释代码片段对应的语法特征向量;

本发明实施例涉及待注释代码片段的语法特征向量,目的是描述代码片段在代码语言中的语法信息。可以通过对语句类型信息的统计结果,从而确定待注释代码片段对应的语法特征向量。

其中,语法特征向量可以是:不同语句类型的频率分布情况的频率分布特征、不同语句类型(即,相同语句类型去重)的数量的语句数量特征、语句总数量的总语句数量特征以及基于语句类型加权得到的总语句类型特征。

在本发明实施例中,所述语句类型信息包括多种语句类型的出现频率、数量和频率分布情况,步骤204可以包括以下子步骤:

统计所述多种语句类型的频率分布情况,确定语句频率分布特征;

统计所述多种语句类型的数量,确定语句数量特征;

统计所述多种语句类型所对应的语句总数量,确定总语句数量特征;

采用第一预置词特征转换模型将所述多种语句类型分别转换为语句类型特征;

以所述出现频率作为权重,对多个所述语句类型特征进行加权求和,确定总语句类型特征;

拼接所述语句频率分布特征、所述语句数量特征、所述总语句数量特征和所述总语句类型特征,生成所述待注释代码片段对应的语法特征向量。

在本发明实施例中,可以通过统计每种语句类型的频率分布情况,以确定每种语句类型的语句频率分布特征;分别统计每种语句类型的数量,确定每种语句类型的语句数量特征;统计全部语句的总数量,确定总语句数量特征;采用第一预置词特征转换模型例如Word2Vec模型等,将每种语句类型分别转换为对应的语句类型特征,再以每种语句类型的出现频率作为权重,对语句类型特征进行加权求和,确定总语句类型特征;最后将语句频率分布特征、语句数量特征、总语句数量特征和总语句类型特征进行拼接,以得到表示待注释代码片段的语法特征向量。

值得一提的是,上述统计过程均可以并行进行。

Word2vec,是一群用来产生词特征的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词。训练完成之后,word2vec模型可用来映射每个词到一个特征,可用来表示词对词之间的关系,该特征为神经网络之隐藏层。

步骤205,按照预设变量词划分规则从所述待注释代码片段中提取目标单词;

本发明实施例还需要获取多个关于代码片段的文本特征向量,目的是描述代码片段中文本的分布情况、提取单词的意义以及单词的上下文信息。而在获取文本特征向量之前,还需要对待注释代码片段进行预处理,以获取目标单词。

在具体实现中,可以按照预设变量词划分规则从所述待注释代码片段中提取目标单词。

可选地,所述预设变量词划分规则包括驼峰规则或下划线规则,步骤205可以包括以下子步骤:

从所述待注释代码片段中提取单词;

采用所述驼峰规则或所述下划线规则从所述单词中确定待处理单词;

从所述待处理单词中删除预设停用词,得到待提取单词;

提取所述待提取单词中的词干,生成目标单词。

在具体实现中,由于代码作者在命名代码变量的时候喜欢用驼峰式命名风格或者下划线命名风格将多个英语单词结合在一起给变量命名。因此,可以先从待注释代码片段中提取单词,一般地,用空格、括号或者是分号等分隔符将单词区分开来,再采用驼峰规则或者下划线规则对单词进行划分,以确定待处理单词;再进行预设停用词删除,得到待提取单词,预设停用词即如“the”、“is”、“at”、“on”等没有什么实际含义的功能词;而由于同一词干的单词可能以不同形式出现,为减少单词数量,还可以提取待提取单词中的词干,以得到目标单词。

同时为方便后续操作,可以将所有目标单词统一处理成小写形式,本发明实施例对此不做限制。

步骤206,根据对所述目标单词的统计结果,确定所述待注释代码片段对应的文本特征向量;

进一步地,所述目标单词包括多个待统计单词,步骤206可以包括以下子步骤:

统计所述多个待统计单词的总数量,确定总单词数量特征;

统计所述多个待统计单词的种类数量,确定单词种类数量特征;

分别计算所述多个待统计单词中的每种待统计单词的出现频次的方差,确定单词方差特征;

统计所述多个待统计单词中非英语单词的比例,确定非单词比例特征;

采用第二预置词特征转换模型将所述多个待统计单词分别转换为单词特征;

以每个所述待统计单词的出现频率作为权重,对所有所述单词特征进行加权求和,生成总单词特征;

拼接所述总单词数量特征、所述单词种类数量特征、所述单词方差特征、所述非单词比例特征和所述总单词特征,生成所述待注释代码片段对应的文本特征向量。

在本发明实施例中,文本特征向量包括:总单词数量特征、单词种类数量特征(即,相同单词去重)、单词方差特征、非单词比例特征以及基于单词加权得到的总单词特征,其中,总单词数量特征、单词种类数量特征、单词方差特征这三个特征衡量了待注释代码中目标单词的分布情况;非英语单词,即某些词是代码作者自己“编造”出来的没有实际意义的变量名。非单词比例特征衡量了单词的可解释性信息;总单词特征这个特征包含了单词的上下文信息。

在具体实现中,通过统计全部待统计单词的总数量,以确定总单词数量特征;分别统计各种待统计单词的种类数量,以确定单词种类数量特征;分别计算每种待统计单词的出现频次的方差,确定单词方差特征;统计所述多个待统计单词中非英语单词的比例,确定非单词比例特征;采用第二预置词特征转换模型将所述多个待统计单词分别转换为单词特征;以每个所述待统计单词的出现频率作为权重,对所有所述单词特征进行加权求和,生成总单词特征;拼接所述总单词数量特征、所述单词种类数量特征、所述单词方差特征、所述非单词比例特征和所述总单词特征,生成所述待注释代码片段对应的文本特征向量。

其中,上述统计过程也是可以通过并行进行,第二预设词特征转换模型可以为Word2Vec模型等,本发明实施例对此不作限制。

步骤207,根据所述待注释代码片段的复杂程度,确定所述待注释代码片段对应的结构特征向量;

在本发明的一个示例中,所述步骤207可以包括以下子步骤:

统计所述待注释代码片段中的代码行数,确定行数特征;

统计所述待注释代码片段中的嵌套语句数量,确定嵌套语句数量特征;

统计所述待注释代码片段中的最大嵌套层数,确定嵌套最大层数特征;

统计所述待注释代码片段中的形式参数数量,确定形参数量特征;

分别统计所述待注释代码片段中最长语句的单词数量特征、所述待注释代码片段的API调用数量特征、所述待注释代码片段的变量数量特征、所述待注释代码片段的标识符数量特征以及所述待注释代码片段的内部注释数量特征,依次拼接生成综合特征;

拼接所述行数特征、所述嵌套语句数量特征、所述嵌套最大层数特征、所述形参数量特征和所述综合特征,生成所述待注释代码片段对应的结构特征向量。

本发明实施例还需要确定待注释代码片段的结构特征,目的是确定待注释代码片段的复杂程度。函数代码片段的结构特征是能够描述函数代码片段组成结构上的一些特征。这些结构特征分别是:代码行数、嵌套语句数量、嵌套语句最大层数、函数是否有形式参数以及形式参数的数量、最长语句的单词数量、API调用数量、变量数量、标识符数量以及内部注释数量等。其中,所谓的嵌套语句,指的是一个语句中包含着另一个语句。如图3所示的是一个for循环语句包含着if条件语句的例子,代码片段的复杂程度与其重要性是有正相关关系的。

值得一提的是,上述结构特征的统计过程可以并行进行,上述结构特征并不一定需要全部使用,在实际操作中可以由技术人员根据能否描述代码片段的复杂程度来进行灵活选择的,本发明实施例对此不作限制。

步骤208,基于所述待注释代码片段的函数调用数量,确定所述待注释代码片段对应的关系特征向量。

在本发明的另一个示例中,所述函数调用数量包括调用额外函数数量和被调用次数,步骤208可以包括以下子步骤:

遍历所述待注释代码片段所属的待注释代码文件,确定所述待注释代码片段的所述调用额外函数数量和所述被调用次数;

拼接所述调用额外函数数量和所述被调用次数,生成所述待注释代码片段对应的关系特征向量。

在本发明实施例中,还需要对不同函数代码片段之间的相互联系进行分析,此时可以采用类似社交网络或有向图的方式,以出度值定义当前待注释片段中的被调用次数,以入度值定义调用额外函数数量。再通过扫描遍历整个所述待注释代码片段所属的待注释代码文件,以确定待注释代码片段的出度值和入度值,即调用额外函数数量和被调用次数,再将上述两个特征进行拼接,以生成待注释代码片段对应的关系特征向量。

值得一提的是,步骤202-204作为一个整体,步骤205-206作为一个整体,与步骤207和步骤208之间可以并行执行。

步骤209,将所述第一特征向量输入到所述目标分类模型,输出对所述待注释代码片段的重要性判断结果;

在具体实现中,所述步骤209可以包括以下子步骤:

将所述第一特征向量输入到所述目标分类模型;

当所述目标分类模型的输出为所述第一预设标签时,确定所述待注释代码片段的重要性判断结果为重要;

当所述目标分类模型的输出为所述第二预设标签时,确定所述待注释代码片段的重要性判断结果为不重要。

在本发明实施例中,在得到第一特征向量后,可以将第一特征向量输入到目标分类模型,经目标分类模型基于第一特征向量综合判断,以得到模型输出。当所述目标分类模型的输出为所述第一预设标签时,确定所述待注释代码片段的重要性判断结果为重要;若是所述目标分类模型的输出为所述第二预设标签时,确定所述待注释代码片段的重要性判断结果为不重要。

本发明通过预置的分类模型训练过程生成目标分类模型,当接收到待注释代码片段时,从待注释代码片段提取第一特征向量,最后将第一特征向量输入目标分类模型,以得到待注释代码片段的重要性判断结果。从而解决现有的预测代码注释位置的技术中仅局限于将代码文本当成无结构的纯文本,对多个维度的特征利用率较低所导致的确定代码注释位置的准确性变低,无法给开发人员合理的建议,降低软件开发与维护人员工作效率的技术问题,进而能够高效地判断待注释代码的重要性,以便于优化软件开发与维护人员的注释行为,使代码注释量保持在一个更为合适的范围。

请参阅图4,图4示出了本发明实施例提供的一种代码片段重要性的判断方法的步骤流程图。

从软件仓库中收集Java项目代码文件;以函数为单位划分项目代码文件;带函数头注释的函数代码片段标记为1,否则标记为0;从函数代码片段中提取所需特征;所需特征包括语法特征、文本特征、结构特征和关系特征;

语法特征提取流程包括:准备提取语法特征;将函数代码片段转换成抽象语法树;从抽象语法树中获取函数代码片段的语句类型信息;统计不同语句类型的频率分布情况;统计不同语句类型的数量;统计语句的总数量;将语句类型转换为特征并按出现频率加权求和;拼接得到语法特征。

文本特征提取流程包括:准备提取文本特征;提取函数代码片段中的单词;根据驼峰规则或下划线规则对变量词进行划分;对单词统一处理成小写形式;删除停用词;词干提取;统计单词的总数量;统计使用单词的种类数量;计算不同单词出现频次的方差;统计非英语单词的比例;将单词转换为特征并按出现频率加权求和;拼接得到文本特征。

结构特征提取流程包括:准备提取结构特征;统计函数代码片段的代码行数;统计函数代码片段嵌套语句的数量;统计函数代码片段嵌套语句的最大层数;统计函数代码片段中的形式参数的数量;统计函数代码片段中最长语句的单词数量;统计函数代码片段中的API调用数量;统计函数代码片段中的变量数量;统计函数代码片段中的标识符数量以及统计函数代码片段中的内部注释个数;拼接得到结构特征。

关系特征提取流程包括:准备提取关系特征;定义出度值和入度值的概念;统计每个函数的出度值和入度值;拼接得到关系特征。

在并行执行上述四个提取流程后,拼接得到每个函数代码片段的最终特征;结合标签训练分类模型;得到目标分类模型,其中每次训练都会输出函数代码片段是否重要的结果;

当接收到新的函数代码片段时,提取该函数代码片段的最终特征;将最终特征输入到目标分类模型,输出函数代码片段是否重要。

请参阅图5,图5为本发明实施例提供的一种代码片段重要性的判断装置的结构框图。

本发明还提供了一种代码片段重要性的判断装置,包括:

代码片段接收模块501,用于接收待注释代码片段;

第一特征向量提取模块502,用于提取所述待注释代码片段的第一特征向量;

重要性输出模块503,用于将所述第一特征向量输入到所述目标分类模型,输出对所述待注释代码片段的重要性判断结果;

其中,所述目标分类模型通过预置的分类模型训练过程所生成。

可选地,所述分类模型训练模块包括:

已注释代码文件接收子模块,用于从预置的软件仓库中获取已注释代码文件;

文件划分子模块,用于以函数为单位对所述已注释代码文件进行划分,生成多个训练代码片段;

第一标签设置子模块,用于为具有预设类型注释的所述训练代码片段设置第一预设标签;

第二标签设置子模块,用于为不具有预设类型注释的所述训练代码片段设置第二预设标签;

第二特征向量提取子模块,用于分别提取每个所述训练代码片段的第二特征向量;

分类模型训练子模块,用于采用多个所述第二特征向量训练预置的初始分类模型,得到目标分类模型。

可选地,所述第一特征向量包括语法特征向量、文本特征向量、结构特征向量和关系特征向量,所述第一特征向量提取模块502包括:

转换子模块,用于将所述待注释代码片段转换为抽象语法树;

语句类型信息提取子模块,用于从所述抽象语法树中提取所述待注释代码片段的语句类型信息;

语法特征向量确定子模块,用于根据对所述语句类型信息的统计结果,确定所述待注释代码片段对应的语法特征向量;

目标单词提取子模块,用于按照预设变量词划分规则从所述待注释代码片段中提取目标单词;

文本特征向量确定子模块,用于根据对所述目标单词的统计结果,确定所述待注释代码片段对应的文本特征向量;

结构特征向量确定子模块,用于根据所述待注释代码片段的复杂程度,确定所述待注释代码片段对应的结构特征向量;

关系特征向量确定子模块,用于基于所述待注释代码片段的函数调用数量,确定所述待注释代码片段对应的关系特征向量。

可选地,所述语句类型信息包括多种语句类型的出现频率、数量和频率分布情况,所述语法特征向量确定子模块包括:

语句频率分布特征确定单元,用于统计所述多种语句类型的频率分布情况,确定语句频率分布特征;

语句数量特征确定单元,用于统计所述多种语句类型的数量,确定语句数量特征;

总语句数量特征确定单元,用于统计所述多种语句类型所对应的语句总数量,确定总语句数量特征;

语句类型特征转换单元,用于采用第一预置词特征转换模型将所述多种语句类型分别转换为语句类型特征;

总语句类型特征确定单元,用于以所述出现频率作为权重,对多个所述语句类型特征进行加权求和,确定总语句类型特征;

语法特征向量生成单元,用于拼接所述语句频率分布特征、所述语句数量特征、所述总语句数量特征和所述总语句类型特征,生成所述待注释代码片段对应的语法特征向量。

可选地,所述预设变量词划分规则包括驼峰规则或下划线规则,所述目标单词提取子模块包括:

单词提取单元,用于从所述待注释代码片段中提取单词;

待处理单词确定单元,用于采用所述驼峰规则或所述下划线规则从所述单词中确定待处理单词;

待提取单词确定单元,用于从所述待处理单词中删除预设停用词,得到待提取单词;

目标单词确定单元,用于提取所述待提取单词中的词干,生成目标单词。

可选地,所述目标单词包括多个待统计单词,所述文本特征向量确定子模块包括:

总单词数量特征确定单元,用于统计所述多个待统计单词的总数量,确定总单词数量特征;

单词种类数量特征确定单元,用于统计所述多个待统计单词的种类数量,确定单词种类数量特征;

单词方差特征确定单元,用于分别计算所述多个待统计单词中的每种待统计单词的出现频次的方差,确定单词方差特征;

非单词比例特征确定单元,用于统计所述多个待统计单词中非英语单词的比例,确定非单词比例特征;

单词特征转换单元,用于采用第二预置词特征转换模型将所述多个待统计单词分别转换为单词特征;

总单词特征生成单元,用于以每个所述待统计单词的出现频率作为权重,对所有所述单词特征进行加权求和,生成总单词特征;

文本特征向量确定单元,用于拼接所述总单词数量特征、所述单词种类数量特征、所述单词方差特征、所述非单词比例特征和所述总单词特征,生成所述待注释代码片段对应的文本特征向量。

可选地,所述结构特征向量确定子模块包括:

行数特征确定单元,用于统计所述待注释代码片段中的代码行数,确定行数特征;

嵌套语句数量特征确定单元,用于统计所述待注释代码片段中的嵌套语句数量,确定嵌套语句数量特征;

最大嵌套层数特征确定单元,用于统计所述待注释代码片段中的最大嵌套层数,确定嵌套最大层数特征;

形参数量特征确定单元,用于统计所述待注释代码片段中的形式参数数量,确定形参数量特征;

综合特征确定单元,用于分别统计所述待注释代码片段中最长语句的单词数量特征、所述待注释代码片段的API调用数量特征、所述待注释代码片段的变量数量特征、所述待注释代码片段的标识符数量特征以及所述待注释代码片段的内部注释数量特征,依次拼接生成综合特征;

结构特征向量生成单元,用于拼接所述行数特征、所述嵌套语句数量特征、所述嵌套最大层数特征、所述形参数量特征和所述综合特征,生成所述待注释代码片段对应的结构特征向量。

可选地,所述函数调用数量包括调用额外函数数量和被调用次数,所述系特征向量确定子模块包括:

函数调用数量确定单元,用于遍历所述待注释代码片段所属的待注释代码文件,确定所述待注释代码片段的所述调用额外函数数量和所述被调用次数;

关系特征向量生成单元,用于拼接所述调用额外函数数量和所述被调用次数,生成所述待注释代码片段对应的关系特征向量。

可选地,所述重要性输出模块503包括:

特征向量输入子模块,用于将所述第一特征向量输入到所述目标分类模型;

重要性确定子模块,用于当所述目标分类模型的输出为所述第一预设标签时,确定所述待注释代码片段的重要性判断结果为重要;

重要性否定子模块,用于当所述目标分类模型的输出为所述第二预设标签时,确定所述待注释代码片段的重要性判断结果为不重要。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

22页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:中文专利摘要改写方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!