技术领域
本发明涉及软件质量保证领域,特别涉及一种基于质量保证框架的代码摘要集成方法。
背景技术
现有代码摘要是代码片段的自然语言描述,可以帮助开发人员在不阅读整个源代码的情况下理解代码的含义。考虑到开发人员经常花费大量时间在源代码理解上,高质量的代码摘要对于软件开发和维护是必不可少的,然而手动编写代码摘要是一项繁琐且耗时的工作,这就增加了对自动代码摘要方法的需求。
为了解决这个问题,许多代码摘要方法已经被提出。同时,随着深度学习技术的发展和大量不断增加的源代码数据,利用深度学习模型从大量代码摘要对中自动学习生成代码摘要已成为一个非常热门的研究课题。虽然现有的神经代码摘要方法具有良好的性能,可以生成许多高质量的代码摘要,但根据以往的研究,现有代码摘要方法生成的一些代码摘要的BLEU-4分数往往小于40,这被认为是低质量的代码摘要,而这些低质量的摘要不仅可能会误导开发人员,同时也会使开发人员花费大量额外的时间去进行筛选。
事实上,几乎所有利用神经网络的文档生成方法都存在上述问题。为了解决这一问题,研究人员提出了几种用于文档生成任务的质量保证方法。然而,以前的工作没有调查过文档生成任务的质量保证方法是否可以应用于改进代码摘要。
发明内容
针对现有技术存在的上述问题,本发明要解决的技术问题是:保证代码摘要的质量,提升代码摘要的有效性。
为解决上述技术问题,本发明采用如下技术方案:一种基于质量保证框架的代码摘要集成方法,包括如下步骤:
S100:对于一个待测代码段code
S200:基于协同过滤的组件,针对每一个候选代码摘要
基于检索的组件,针对每一个候选代码摘要
S300:利用每个候选代码摘要的质量分数Precision
S400:从I个候选代码摘要中选择质量最好的一个作为最终的输出结果sum
将I个候选代码摘要的F1score
如果所对比的候选代码摘要的F1score
如果所对比候选代码摘要的F1score
作为优选,所述S200中基于协同过滤的组件,针对每一个候选代码摘要
S210:获取历史代码数据,所述历史代码数据由代码段code
S211:通过单词w
其中,
通过单词w
其中,
S212:计算单词w
S213:构建单词w
S214:分别计算每一个候选代码摘要
其中,|·|表示一个集合的长度。
这里使用协同过滤组件,是针对摘要生成中存在着的欠翻译和过翻译两种情况。欠翻译就是生成的摘要和reference相比,部分词语缺失。过翻译就是生成了原本reference里面没有的词,或者冗余的词等等。这里的两个计算方法是根据欠翻译和过翻译这两种情况作了修改,precision针对过翻译情况进行计算,recall针对欠翻译情况计算。
作为优选,所述S200中基于检索的组件,针对每一个候选代码摘要
S220:使用词频-逆文档频率,将历史数据中的代码段
其中,#w表示单词的总数量,
将待测数据中的代码段code
其中,#code
S221:计算待测代码段code
S222:将S221得到的J个相似程度值进行降序排列,选择前n个相似程度值对应的历史代码并记为
S223:计算待测代码段code
这里使用检索组件是因为新生成的摘要很可能与历史摘要相似,所以针对这种情况计算一个针对检索的质量分数REScore,它就是计算当前这个代码与历史相似代码之间的BLEU分数,从而获得最终的质量分数。BLEU分数是一个常用在摘要生成领域的评价指标分数。
相对于现有技术,本发明至少具有如下优点:
1.本发明所用的集成方法能够有效集成不同模型的优点,从而提升代码摘要的有效性。
2.本发明的效果优于现有的最先进的代码摘要集成方法。
附图说明
图1为本发明的整体框架图。
具体实施方式
下面对本发明作进一步详细说明。
本发明描述了一种基于质量保证框架的代码摘要集成方法。该发明的核心思想是通过给定的一个代码片段和多个代码摘要方法,自动预测最先进的代码摘要方法生成的摘要的质量,并选择预测出的效果最好的一个作为最终生成的摘要。该发明由计算代码摘要的质量分数和代码摘要方法集成两个阶段构成。首先由基于协同过滤的组件和基于检索的组件构成,用于计算摘要的质量分数;其次由备选的代码摘要方法构成,用于方法集成。
具体来说,首先,给定一个code
参见图1,一种基于质量保证框架的代码摘要集成方法,其特征在于:包括如下步骤:
S100:对于一个待测代码段code
S200:基于协同过滤的组件,针对每一个候选代码摘要
具体实施时,所述基于协同过滤的组件,针对每一个候选代码摘要
S210:获取历史代码数据,所述历史代码数据由代码段code
S211:通过单词w
其中,
通过单词w
其中,
S212:计算单词w
S213:构建单词w
在实际计算时,为了减小M的大小,加快计算速度,本发明设k的默认值为10。
S214:分别计算每一个候选代码摘要
其中,|·|表示一个集合的长度。
基于检索的组件,针对每一个候选代码摘要
具体实施时,所述S200中基于检索的组件,针对每一个候选代码摘要
S220:使用词频-逆文档频率,此为现有技术,将历史数据中的代码段
其中,#w表示单词的总数量,
将待测数据中的代码段code
其中,#code
S221:计算待测代码段code
S222:将S221得到的J个相似程度值进行降序排列,选择前n个相似程度值对应的历史代码并记为
S223:计算待测代码段code
此处默认设置n的值为5。
S300:利用每个候选代码摘要的质量分数Precision
S400:从I个候选代码摘要中选择质量最好的一个作为最终的输出结果sum
将I个候选代码摘要的F1score
如果所对比的候选代码摘要的F1score
如果所对比候选代码摘要的F1score
实验数据:
在实际的实验中,本发明优先选择了三种最先进的代码摘要生成方法,来验证本发明在提升代码摘要方面的性能,所选代码摘要生成方法分别是Deepcom、Rencos和NMT。Deepcom是使用神经网络模型,结合代码的文本信息与结构信息生成摘要;Rencos是结合神经网络和检索方法来为代码生成摘要;NMT采用神经机器翻译模型,将代码转化为摘要。
本发明所提出的基于质量保证框架的代码摘要集成方法称作Ensum。实验过程中所使用的数据来自网站Github,包含两个公共数据集:同项目数据集和跨项目数据集,这两个数据集都由Deepcom方法的作者提供,该数据集来自9,714个GitHub项目,是由588,108个代码-摘要对组成;其中同项目数据集不区分项目,训练集由445,812个代码-摘要对组成,验证集和测试集分别由20,000个代码-摘要对组成,跨项目数据集中,验证集和测试集不与训练集集重叠,其训练集由455,000个代码-摘要对组成,验证集和测试集各包含15,606个代码-摘要对。
实验验证:
本发明同时采用了人工评估和自动评价的方法来验证其有效性。
人工评估:为了验证本发明所选用的三个最先进的代码摘要方法之间具有互补性,适合通过方法集成来提升代码摘要质量。本发明使用人工评估的结果进行互补性分析,邀请了4位参与者对实验结果进行人工评估,所有参与者都来自软件工程专业并且有4年的Java编程经验,他们被要求通过检查参考摘要和Deepcom,Rencos和NMT生成的候选摘要之间的语义相关性,来评价生成摘要的质量。具体来说,从每个数据集中随机选择100条进行评估,每一条将被3个参与者打分,参与者被要求对每个生成的摘要给出1到5的质量分值,以衡量该摘要和参考摘要之间的语义相关性;其中,1分表示两个摘要之间没有语义关联,5分表示两个摘要语义相同。当得分为4分或5分的时候该摘要被认为是高质量的,其余的摘要得分则会被认为是低质量的。
自动评价:本发明使用自动评价指标来衡量所生成的代码摘要质量,所使用到的自动评价指标为BLEU、METEOR和ROUGE-L:BLEU分数基于公式
本发明所选用的三种最先进的代码摘要方法,相互之间具有很强的互补性,具体互补性分析如表1所示。
表1 Deepcom,Rencos和NMT的互补性分析
Good(only)意味着只有当前方法生成的摘要与其参考摘要相比较是高质量的;Good(all)意味着三种方法生成的摘要相对参考摘要都是高质量的,例如,同项目数据集中Deepcom生成14个独有的高质量摘要,Rencos生成17个独有的高质量摘要,NMT生成8个独有的高质量摘要。以上现象表明,三种代码摘要方法是互补的,因此,本发明提出的Ensum方法是集成了此三种代码摘要方法,来提高了互补性。
自动评估Ensum对代码摘要提升的结果如表2所示。
表2 OAcom在三个数据集上与三种最先进的代码摘要生成方法集成时的自动评价结果
本发明对比了所选的三个最先进的代码摘要方法和一个最先进的基于代码注释分类的集成方法Codesum进行对比。实验结果表明,本发明的集成结果优于其它所有方法的结果,例如,在同项目数据集上,集成结果BLEU-4、METEOR、ROUGE-L分别达到0.406、0.289和0.557,结果达到了高质量摘要的标准;同时,在BLEU-4、METEOR、ROUGE-L指标上,Ensum相比指标得分最高的Deepcom分别提升了25%、16%、9%;此外,在同项目数据集上,Ensum在BLEU-4、METEOR、ROUGE-L指标上分别比Codesum提高了26%、17%和9%;在跨项目数据集上,Ensum在BLEU-4、METEOR和ROUGE-L上分别比Codesum改进了11%、6%和5%;因此,Ensum的思想可以更有效地结合三个代码摘要方法的优势,并产生比Codesum更高质量的代码摘要。
简而言之,实验结果证明,本发明所提出的一种基于质量保证框架的代码摘要集成方法能够有效提升代码摘要质量;同时,本发明可以广泛的运用至实际工作场景,为提高现有代码摘要质量的实用性做出贡献。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。
机译: 基于统一摘要表的重型柴油机自动生成静态故障代码数据的方法和系统
机译: 可用设备,例如打印机,一种计算机的访问提供方法,包括基于设备代码通过网络在计算机和可用设备之间建立连接,以及基于设备代码在计算机上安装设备驱动程序
机译: 一种基于代码图像的语音信息服务提供方法,该代码图像在出版物上加上代码图像和图像信息