【技术实现步骤摘要】
一种代码方法级别的软件缺陷定位方法
本专利技术属于软件维护领域,特别涉及一种代码方法级别的软件缺陷定位方法。
技术介绍
开发过程中,缺陷的产生是无法避免的。在传统的开发过程中,当软件测试人员或软件使用者发现缺陷后,会在缺陷跟踪管理系统中编写缺陷报告告知软件开发、维护人员。缺陷报告记录了程序缺陷的报告时间、严重程度、异常的程序表现以及如何重现软件缺陷的细节。软件开发人员和维护人员需要根据提交的缺陷报告人工确定缺陷位置,以修复该缺陷。在实际缺陷修复过程中,修复者往往会在缺陷定位这一环节中花费大量时间。随着软件行业的发展,软件功能越来越复杂,软件代码行数迅速增加,一方面缺陷的数量也随代码行数的增长而增长,另一方面代码行数的增加也导致人工定位缺陷更加困难。因此如何实现自动定位缺陷位置,以应对不断增长的缺陷数量和代码规模,从而提高软件修复效率与质量,成为研究人员关注的热点之一。目前缺陷定位领域已有不少先进技术。第一类称为基于程序频谱的缺陷定位方法,其是通过搜集测试用例的程序频谱和执行结果,定位缺陷语句在被测程序中的可能位置,这类方法是语句级别的缺陷定位,需要提供若干个通过的测试用例和至少一个未通过的测试用例。第二类缺陷定位技术,是通过使用代码分段技术和StackTrace信息分析来提高缺陷定位性能。第三类缺陷定位技术,是基于缺陷报告,通过信息检索领域的方法和项目中历史缺陷的修复信息,寻找与缺陷报告相似的文件,进而实现文件级别的缺陷定位。但目前这类研究都将缺陷报告和源代码文件看作是“词包”,虽然同一个词在缺陷报告 ...
【技术保护点】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。