1.基于错误传播建模和缺陷特征增强的软件错误定位方法,其特征包括如下步骤:步骤1:对源程序进行插桩,执行测试用例,收集测试用例的程序频谱,包括执行结果和执行覆盖信息;
步骤2:降低偶然性正确测试用例对错误定位的负面影响;
步骤3:分别使用成功和失败测试用例的执行覆盖信息建立两个有向无权复杂网络模型GP和GF;
3‑1.根据程序频谱建立测试用例和语句节点之间的连接,如果测试用例ti覆盖语句sj则ti与sj之间存在双向边;
3‑2.根据测试用例执行上下文建立语句和语句节点之间的连接,单向逆序连接测试用例执行轨迹中的语句节点;
步骤4:通过TrustRank排名算法分别计算复杂网络模型GP和GF中每个节点的重要性,并通过节点重要性给成功和失败测试用例分配权重,计算加权后的语句执行四元组信息;
4‑1.构造转移矩阵表示网络模型中节点之间的随机游走跳转概率,对GP和GF构造转移矩阵方法相同;
对于GF,构造一个大小为Ns×Nt的矩阵S2T,其中Ns表示失败测试用例执行语句向量的并集,Nt表示失败测试用例的数量;如果语句si覆盖tj,tj执行 条语句, 表示tj执行的语句数量,分配 因为tj执行 条语句时每条语句对tj的TR贡献值为 ;构造一个大小为Nt×Ns的矩阵T2S,如果tj执行si,si覆盖 个失败测试用例,分配因为si执行 个失败测试用例时,每个测试用例对si的TR贡献值为 构造一个表示语句之间错误传播的Ns×Ns的转移矩阵S2S,当语句si与sj之间有边时,sij=1/Ns,并将S2S按列归一化;
4‑2.构造信任传播向量,选择测试用例节点作为种子节点,添加测试用例提供的额外信息来控制节点在网络模型中的游走行为;让复杂网络在随机游走过程中对该种子节点集合具有更高的偏向性;
信任传播向量的形式设置为 vs表示语句的信任传播向量,vt表示测试用例的信任传播向量;因为只选择测试用例节点作为种子节点,所以 在GF中,失败测试用例执行的语句数量越少,则权重应该越大,所以 其中:ci表示ti执行的语句数量,在GP中给成功测试用例分配相同的权重值即其中NP是成功测试用例总数;
4‑3.计算语句执行四元组信息,每一轮迭代过程中,语句节点吸收相连的测试用例节点和指向其的语句节点的重要性,测试用例节点根据连接的语句节点重要性修改自身的重要性,语句和测试用例节点重要性相互作用,直至整个网络节点重要性稳定;第k次迭代时,相应节点重要性的计算:其中ws和wt分别代表语句和测试用例的节点重要性向量,α是阻尼系数,作用是使得计算迭代中节点值传递能够稳定延续,不至于中断或者无限放大;运行两次上述算法,得到GF和GP中节点重要性向量,迭代完成后对向量标准化:
4‑4.通过修改后的测试用例权重信息计算语句的四元组信息向量:
其中 和 分别表示程序中每条语句执行失败和成功测试用例数量的向量,Nf和Np分别表示失败和成功测试用例总数;
步骤5:通过SBFL计算公式根据语句的四元组信息计算可疑度,将错误定位信息按可疑度降序排列,可疑度高的语句被认定为更有可能出错。
2.根据权利要求1所述的基于错误传播建模和缺陷特征增强的软件错误定位方法,其特征在于:步骤1所述的收集测试用例的程序频谱具体为:在Ubuntu系统中使用GCC对源程序进行编译处理,动态执行测试用例并使用GCOV工具收集测试用例的执行结果和执行覆盖信息,得到程序频谱。
3.根据权利要求1所述的基于错误传播建模和缺陷特征增强的软件错误定位方法,其特征在于:步骤2所述的降低偶然性正确测试用例对错误定位的负面影响具体为:对所有失败测试用例的语句覆盖向量做交运算,得到的程序语句集合定义为故障基;
定义偶然性正确测试用例为执行故障基中所有语句的成功测试用例;使用方法1或者方法
2;其中方法1为:将故障基中语句覆盖偶然性正确测试用例的位置修改为未覆盖;方法2为:将故障基之外的覆盖偶然性正确测试用例的位置修改为未覆盖并重新标记偶然性正确测试用例为失败测试用例,得到新的程序覆盖信息。
4.根据权利要求1所述的基于错误传播建模和缺陷特征增强的软件错误定位方法,其特征在于:所述的步骤5所述的通过SBFL计算公式根据语句的四元组信息计算可疑度,具体如下: