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

一种代码方法级别的软件缺陷定位方法技术

技术编号:24573560 阅读:27 留言:0更新日期:2020-06-21 00:03
本发明专利技术公开了一种代码方法级别的软件缺陷定位方法,属于软件维护领域,该方法包括:构建并训练seq2seq模型;基于seq2seq模型构建缺陷定位模型;构建缺陷定位模型的训练样本;利用训练样本训练缺陷定位模型;利用训练后的缺陷定位模型预测缺陷报告中的缺陷方法。本发明专利技术提出的方法采用历史数据和深度学习技术相结合训练一个缺陷定位模型,并利用seq2seq模型确定该缺陷定位模型中代码编码器的参数,将代码方法注释作为监督信息,信息量丰富,很好地达到了在方法级别上定位软件缺陷的目的,能极大提升软件缺陷修复的效率。

A software defect location method based on code method level

【技术实现步骤摘要】
一种代码方法级别的软件缺陷定位方法
本专利技术属于软件维护领域,特别涉及一种代码方法级别的软件缺陷定位方法。
技术介绍
开发过程中,缺陷的产生是无法避免的。在传统的开发过程中,当软件测试人员或软件使用者发现缺陷后,会在缺陷跟踪管理系统中编写缺陷报告告知软件开发、维护人员。缺陷报告记录了程序缺陷的报告时间、严重程度、异常的程序表现以及如何重现软件缺陷的细节。软件开发人员和维护人员需要根据提交的缺陷报告人工确定缺陷位置,以修复该缺陷。在实际缺陷修复过程中,修复者往往会在缺陷定位这一环节中花费大量时间。随着软件行业的发展,软件功能越来越复杂,软件代码行数迅速增加,一方面缺陷的数量也随代码行数的增长而增长,另一方面代码行数的增加也导致人工定位缺陷更加困难。因此如何实现自动定位缺陷位置,以应对不断增长的缺陷数量和代码规模,从而提高软件修复效率与质量,成为研究人员关注的热点之一。目前缺陷定位领域已有不少先进技术。第一类称为基于程序频谱的缺陷定位方法,其是通过搜集测试用例的程序频谱和执行结果,定位缺陷语句在被测程序中的可能位置,这类方法是语句级别的缺陷定位,需要提供若干个通过的测试用例和至少一个未通过的测试用例。第二类缺陷定位技术,是通过使用代码分段技术和StackTrace信息分析来提高缺陷定位性能。第三类缺陷定位技术,是基于缺陷报告,通过信息检索领域的方法和项目中历史缺陷的修复信息,寻找与缺陷报告相似的文件,进而实现文件级别的缺陷定位。但目前这类研究都将缺陷报告和源代码文件看作是“词包”,虽然同一个词在缺陷报告和代码中语义往往是相似的,但只关注两者之间单词的相似程度,会丢失文本的顺序信息,因而导致丢失一部分语义信息,这对缺陷定位的效果产生了负面影响。
技术实现思路
本专利技术的目的在于提供一种实现对缺陷报告进行细粒度的自动定位,以帮助缺陷修复人员快速找到该缺陷产生的位置,提高缺陷修复效率的软件缺陷定位方法。实现本专利技术目的的技术解决方案为:一种代码方法级别的软件缺陷定位方法,所述方法包括以下步骤:步骤1,构建并训练seq2seq模型;步骤2,基于seq2seq模型构建缺陷定位模型;步骤3,构建所述缺陷定位模型的训练样本;步骤4,利用所述训练样本训练所述缺陷定位模型;步骤5,利用训练后的缺陷定位模型预测缺陷报告中的缺陷方法。进一步地,步骤1中所述seq2seq模型包括一个编码器和一个解码器,其中编码器包括依次设置的输入层、嵌入层、门控循环神经网络GRU层,解码器包括一个全连接层实现注意力机制、一个GRU层和一个softmax层;步骤1中所述训练seq2seq模型,具体是利用项目代码库中包含方法注释的缺陷方法对seq2seq模型进行训练。进一步地,步骤2中所述缺陷定位模型包括:一个代码编码器,用于将方法代码转换为向量;一个缺陷报告编码器,用于将缺陷报告转换为向量;一个融合层,用于融合上述两个向量,获得两个向量的关联程度。进一步地,步骤2所述基于seq2seq模型构建缺陷定位模型,具体包括:步骤2-1,提取所述seq2seq模型中的编码器作为代码编码器,且参数固定;步骤2-2,构建一个缺陷报告编码器,其结构与所述代码编码器一致,但参数随机初始化;步骤2-3,构建一个融合层,该融合层包括多层全连接层,其参数随机初始化,且输入为两个向量,分别为代码编码器的输出、缺陷报告编码器的输出,输出为0到1之间的值,表示所述两个向量的关联程度即缺陷报告与方法代码的关联程度。进一步地,步骤3构建所述缺陷定位模型的训练集,具体为:提取已经修复的缺陷报告及其中修改的、未修改的方法代码,生成若干组训练样本;每组训练样本包括3个数据:修改的或未修改的方法代码、缺陷报告、方法代码与缺陷报告的关联程度。进一步地,步骤3构建所述缺陷定位模型的训练集,具体过程包括:步骤3-1,提取一个处于Fixed的缺陷报告,该缺陷报告中提到的缺陷已经被修复;步骤3-2,获取为修复步骤3-1中缺陷报告的缺陷而更改的文件的前后版本;步骤3-3,利用gumtree获取两个文件在AST层面发生的变更,并找出发生更改的结点的祖先结点中类型值为“MethodDeclaration”的结点;步骤3-4,将缺陷修复前的文件中类型值为“MethodDeclaration”的结点转为代码,获得的代码即为修复缺陷所需修改的方法代码;步骤3-5,从缺陷修复前的文件中随机抽取若干个未需修改的方法代码;步骤3-6、将步骤3-4和步骤3-5获得的方法代码均转成标记序列;步骤3-7,将步骤3-1的缺陷报告转为单词序列;步骤3-8,利用步骤3-6的标记序列、步骤3-7的单词序列分别构建代码语料库和文本语料库,语料库中的每个标记或单词都有一个唯一对应的one-hot向量即独热向量表示;步骤3-9,针对每个需修改的方法代码,将需修改的方法代码对应的标记序列、缺陷报告对应的单词序列以及标签1组合为一个正训练样本;针对每个未需修改的方法代码,将未需修改的方法代码对应的标记序列、缺陷报告对应的单词序列以及标签0组合为一个负训练样本。进一步地,步骤3-6还包括:利用词法分析工具进行代码分词,将标记序列中使用驼峰命名法和下划线命名法的标记拆分为单个单词。进一步地,步骤3-7所述将步骤3-1的缺陷报告转为单词序列,具体过程包括:对缺陷报告依次执行分词、去除标点符号、拆分驼峰命名法和下划线命名法的单词、转为小写处理,以此将缺陷报告转为单词序列。进一步地,步骤4利用所述训练样本训练所述缺陷定位模型,具体过程包括:步骤4-1,将训练样本按比例分为训练集、验证集以及测试集;步骤4-2,利用训练集对缺陷定位模型进行训练,具体包括:结合步骤3-8中构建的语料库,将训练集中方法代码对应的标记序列、缺陷报告对应的单词序列均转为one-hot向量序列;将训练集中每一个样本对应的one-hot向量序列依次输入缺陷定位模型;计算缺陷定位模型的输出值与真实值即标签值的损失值loss;根据损失值loss,利用梯度下降算法更新缺陷定位模型中的参数。进一步地,步骤5所述利用训练后的缺陷定位模型预测缺陷报告中的缺陷方法,具体过程包括:步骤5-1,将缺陷报告与项目代码库中所有缺陷方法依次成对输入训练后的缺陷定位模型,输出该缺陷报告与每一个缺陷方法的关联程度值;步骤5-2,对所有关联程度值进行降序排列,将前n个关联程度值对应的缺陷方法作为最终预测的缺陷方法,其中n值自定义设置。本专利技术与现有技术相比,其显著优点为:1)传统技术中基于缺陷报告的缺陷定位往往只定位到文件级别,而本专利技术能够定位到方法级别,大幅降低使用者在修复缺陷时需要浏览的代码行数;2)构建代码语料库时,本专利技术使用词法分析对代码进行分词,相比于传统的自然语言分词,本专利技术具有更高的准确率;3)和传统本文档来自技高网
...

【技术保护点】
1.一种代码方法级别的软件缺陷定位方法,其特征在于,所述方法包括以下步骤:/n步骤1,构建并训练seq2seq模型;/n步骤2,基于seq2seq模型构建缺陷定位模型;/n步骤3,构建所述缺陷定位模型的训练样本;/n步骤4,利用所述训练样本训练所述缺陷定位模型;/n步骤5,利用训练后的缺陷定位模型预测缺陷报告中的缺陷方法。/n

【技术特征摘要】
1.一种代码方法级别的软件缺陷定位方法,其特征在于,所述方法包括以下步骤:
步骤1,构建并训练seq2seq模型;
步骤2,基于seq2seq模型构建缺陷定位模型;
步骤3,构建所述缺陷定位模型的训练样本;
步骤4,利用所述训练样本训练所述缺陷定位模型;
步骤5,利用训练后的缺陷定位模型预测缺陷报告中的缺陷方法。


2.根据权利要求1所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤1中所述seq2seq模型包括一个编码器和一个解码器,其中编码器包括依次设置的输入层、嵌入层、门控循环神经网络GRU层,解码器包括一个全连接层实现注意力机制、一个GRU层和一个softmax层;
步骤1中所述训练seq2seq模型,具体是利用项目代码库中包含方法注释的缺陷方法对seq2seq模型进行训练。


3.根据权利要求1或2所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤2中所述缺陷定位模型包括:
一个代码编码器,用于将方法代码转换为向量;
一个缺陷报告编码器,用于将缺陷报告转换为向量;
一个融合层,用于融合上述两个向量,获得两个向量的关联程度。


4.根据权利要求3所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤2所述基于seq2seq模型构建缺陷定位模型,具体包括:
步骤2-1,提取所述seq2seq模型中的编码器作为代码编码器,且参数固定;
步骤2-2,构建一个缺陷报告编码器,其结构与所述代码编码器一致,但参数随机初始化;
步骤2-3,构建一个融合层,该融合层包括多层全连接层,其参数随机初始化,且输入为两个向量,分别为代码编码器的输出、缺陷报告编码器的输出,输出为0到1之间的值,表示所述两个向量的关联程度即缺陷报告与方法代码的关联程度。


5.根据权利要求1所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤3构建所述缺陷定位模型的训练集,具体为:提取已经修复的缺陷报告及其中修改的、未修改的方法代码,生成若干组训练样本;每组训练样本包括3个数据:修改的或未修改的方法代码、缺陷报告、方法代码与缺陷报告的关联程度。


6.根据权利要求5所述的代码方法级别的软件缺陷定位方法,其特征在于,步骤3构建所述缺陷定位模型的训练样本,具体过程包括:
步骤3-1,提取一个处于Fixed的缺陷报告,该缺陷报告中提到的缺陷已经被修复;
步骤3-2,获取为修复步骤3-1中缺陷报告的缺陷而更改的文件的前后版本;
步骤3-3,利用gumtree获取两个文件在AST层面发生的变更,并找出发生更改的结点的祖先结点中类型值为“Me...

【专利技术属性】
技术研发人员:李斌陈天浩孙小兵倪珍
申请(专利权)人:扬州大学
类型:发明
国别省市:江苏;32

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

1