1.一种基于上下文感知代码翻译和特征融合的软件缺陷定位方法,包括以下步骤:步骤1、获取缺陷报告和源文件;
步骤2、构建传统信息检索与缺陷报告匹配模块:
步骤2.1、根据软件工程领域的专业知识,提取步骤1中缺陷报告和源文件的传统信息检索特征,所述特征包括rVSM得分、协同过滤评分、堆栈跟踪评分、圈复杂度、缺陷修复近因、缺陷修复频率;
步骤2.2、将步骤2.1得到的传统信息检索特征输入全连接网络DenseNet,得到源文件与缺陷报告在传统信息检索层面的匹配得分wide_score;
其特征在于,所述方法还包括以下步骤:
步骤3、构建源文件的浅层语义信息和缺陷报告匹配模块:步骤3.1、从步骤1缺陷报告中获取总结信息和描述信息,从步骤1源文件中获取程序信息和片段信息;
步骤3.2、将缺陷报告的总结信息、描述信息与源文件的程序信息、片段信息进行两两匹配,计算得到总结‑程序信息、总结‑片段信息、描述‑程序信息、描述‑片段信息四个匹配分数,作为浅层语义得分shallow_semantic;
步骤4、构建源文件的深层语义信息和缺陷报告匹配模块:步骤4.1、利用编译器和反编译器将步骤1源文件中的文本转化成代码的指令序列;
步骤4.2、利用上下文感知的代码翻译技术将指令序列翻译成自然语言描述,所述自然语言描述即为源文件的深层语义信息;
步骤4.3、将步骤3.1中缺陷报告的总结信息、描述信息与源文件的自然语言描述进行匹配,计算得到总结‑指令信息和描述‑指令信息两个匹配分数,作为深层语义得分deep_semantic;
步骤5、融合匹配模块结果:
步骤5.1、拼接shallow_semantic和deep_semantic,并将拼接结果放入全连接层中,得到总语义得分semantic_score;
步骤5.2、将步骤5.1得到的总语义得分semantic_score与步骤2.2得到的匹配得分wide_score进行融合,得到缺陷报告和源文件之间的最终相似度分数;
步骤6、根据最终相似度分数对源文件进行降序排序,然后将排序好的源文件列表推荐给开发人员,以辅助进行缺陷定位。
2.根据权利要求1所述一种基于上下文感知代码翻译和特征融合的软件缺陷定位方法,其特征在于,所述全连接网络DenseNet包括输入层、N个稠密块体、N个过渡块体和输出层,N为正整数,稠密块体和过渡块体间隔设置。
3.根据权利要求2所述一种基于上下文感知代码翻译和特征融合的软件缺陷定位方法,其特征在于,所述输入层将步骤2.1得到的传统信息检索特征拼接得到输入向量,然后输入至第一个稠密块体中:其中r为缺陷报告,s为源文件,rVSMScore(r,s)、cfScore(r,s)、stScore(r,s)、ccScore(r,s)、bfrScore(r,s)、bffScore(r,s)分别表示缺陷报告和源文件的VSM相似度、协同过滤评分、堆栈跟踪评分、圈复杂度、缺陷修复近因、缺陷修复频率;
每个所述稠密块体的输出经过一个过渡块体处理后作为下一稠密块体的输入;
所述输出层输出最后一个稠密块体经过一个过渡块体处理后的数据,作为源文件与缺陷报告在传统信息检索层面的匹配得分wide_score;
wide_score=DenseNet(IR_features(r,s)) (2)。
4.根据权利要求3所述一种基于上下文感知代码翻译和特征融合的软件缺陷定位方法,其特征在于,每个所述稠密块体包含多个层,其中第i层的输入如下所示:xi=f(xi‑1)+xi‑1 (3)
其中xi为第i层的输入,xi‑1为第i‑1层的输入,f(xi‑1)为第i‑1层的输出;
每层实现一个线性变换和激活函数:
fi(xi)=ReLu(FC(xi)) (4)
过渡块体由全连接层和ReLu层构成,其公式如下:
TransitionBlock(x)=ReLu(FC(x)) (5)其中x为过渡块体的输入。
5.根据权利要求1所述一种基于上下文感知代码翻译和特征融合的软件缺陷定位方法,其特征在于,步骤4.2包括以下步骤:步骤4.2.1、构造翻译规则,然后根据指令序列与局部变量数组或操作数堆栈的交互情况将指令序列分为四类:只与操作数堆栈交互的指令、只与局部变量数组交互的指令、与操作数栈和局部变量数组都交互的指令、与操作数栈和局部变量数组都不交互的指令;
步骤4.2.2、自顶向下静态遍历指令序列:
从代码的入口点开始,逐步向下静态遍历每一条指令,模拟指令的执行过程;在遍历过程中,根据构造的翻译规则将每条指令转换为对应的翻译结果;
步骤4.2.3、在遍历过程中,根据每条指令所属的类别收集不同的上下文信息;所述上下文信息包括常量、局部变量以及与其他指令的数据和控制依赖关系;利用收集到的上下文信息更新当前或其他相关指令的翻译规则;
步骤4.2.4、在遍历完所有的指令后,得到指令序列生成的转换结果,所述转换结果即为源文件的深层语义信息。
6.根据权利要求1所述一种基于上下文感知代码翻译和特征融合的软件缺陷定位方法,其特征在于,步骤4.3具体是:采用summary_trans表示总结‑指令信息,采用desc_trans表示描述‑指令信息;
对于summary_trans,选择TextCNN作为文本特征的提取; 为步骤
4.2得到的源文件n个自然语言描述片段的向量表示, 为缺陷报告的摘要的向量表示;
被输入到TextCNN中,并设置k个卷积核来捕捉文本中不同n‑gram特征,经过卷积和池化后输出每个卷积核相应的特征向量;最后,将每个卷积核相应的特征向量 拼接起来,拼接后的向量 代表片段的向量经过TextCNN后输出的向量,计算向量 与向量 的余弦相似度得到摘要与片段信息之间的匹配分数:desc_trans的计算方式与summary_trans的计算方式相同;
最终得到源文件的深层语义信息和缺陷报告匹配模块中两种组合的得分,该组合deep_semantic代表源文件的深层语义;
deep_semantic=[summary_trans;desc_trans] (9)。
7.根据权利要求1所述一种基于上下文感知代码翻译和特征融合的软件缺陷定位方法,其特征在于,步骤5.1中采用以下公式进行拼接:semantic_score=FC([shallow_semantic;deep_semantic]) (10)其中semantic_score为总语义得分,FC为全连接层。
8.根据权利要求1所述一种基于上下文感知代码翻译和特征融合的软件缺陷定位方法,其特征在于,步骤5.2采用以下公式:fusion_score(r,s)=FC([wide_score;semantic_score]) (11)其中fusion_score(r,s)为最终相似度分数,r为缺陷报告,s为源文件,FC为全连接层。
9.根据权利要求1所述一种基于上下文感知代码翻译和特征融合的软件缺陷定位方法,其特征在于,步骤6中使用铰链损失函数来训练模型,铰链损失函数的公式如下:+ ‑ + ‑
(r,s ,s ,θ)=max(0,1‑fusion_score(r,s)+fusion_score(r,s)) (12)+
其中θ为模型中的所有参数,r为缺陷报告,s为源文件,s 代表与缺陷报告相关的源文‑件,s代表与缺陷报告不相关的源文件。
10.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1‑9中任一项所述的方法。