基于错误传播建模和缺陷特征增强的软件错误定位方法技术

技术编号:36377319 阅读:10 留言:0更新日期:2023-01-18 09:37
本发明专利技术涉及一种基于错误传播建模和缺陷特征增强的软件错误定位方法。本发明专利技术首先排除偶然性正确测试用例对软件错误定位的干扰用以缺陷特征增强,得到优化的程序频谱。然后根据程序频谱和程序执行上下文构造基于语句和测试用例的复杂网络模型,通过排名算法计算节点重要性,再由节点重要性给测试用例分配不同权重,最后综合测试用例权重和基于覆盖率的错误定位计算公式计算语句可疑度。本发明专利技术通过减小偶然性正确测试用例对真正错误语句的覆盖率提高软件错误定位效率,并利用复杂网络排名算法计算测试用例对错误定位的贡献,降低多条语句错误怀疑度值相同对错误定位效率的影响,节约软件开发成本。节约软件开发成本。节约软件开发成本。

【技术实现步骤摘要】
基于错误传播建模和缺陷特征增强的软件错误定位方法


[0001]本专利技术属于软件测试
,涉及到软件错误定位,具体涉及一种基于错误传播建模和缺陷特征增强的软件错误定位方法。

技术介绍

[0002]早期的软件错误定位大多采用设置断点等人工分析的方法,人工定位错误不仅难度大,而且极其耗时。自动化软件错误定位可以帮助开发人员节约错误定位成本,根据是否需要执行测试用例可以分为基于静态分析的错误定位和基于动态分析的错误定位。基于静态分析的方法不运行待测程序,仅静态的对被测程序的内在程序结构、界面或者文档进行分析,以确定错误语句在被测程序中的可能出现的位置。而基于动态分析的软件错误定位通过执行测试用例分析程序运行过程中产生的运行时状态,根据程序运行中的观测结果的变化确定缺陷位置,生成缺陷报告,为开发人员快速有效地定位软件错误提供参考。
[0003]在动态错误定位方法中,基于程序频谱的错误定位被证明是低成本且有效的方法之一。因为它独立于程序模型且易于实现。程序频谱表示程序运行时的覆盖信息,反应程序运行某一代码剖面的特征信息。程序频谱与程序行为之间存在着一定的关系,通过对比失败测试用例和成功测试用例之间代码覆盖的差异为软件错误定位提供帮助。对于任意一个程序实体s
i
在测试用例下的覆盖特征可以用一个四元组表示即N(s
i
)=(N
cf
,N
uf
,N
cp
,N
up
),其中这四个元素分别代表执行失败且覆盖s
i
的测试用例个数、执行失败且未覆盖s
i
的测试用例个数、执行成功且覆盖s
i
的测试用例个数和执行成功且未覆盖s
i
的测试用例个数。对于程序的单条语句,被失败测试用例执行的次数越多,通过测试用例执行的越少,语句含有错误的可能性就越大,利用这种特征对程序语句进行统计分析,找出含有错误的程序语句。本专利技术充分考虑每个测试用例的不同重要性,排除传统算法对每个测试用例都同样重要的假设,根据测试用例的重要性动态调整算法。该算法在不同测试集上得到的定位效果稳定,准确。
[0004]与开发软件一样,测试用例的设计也是人类一种脑力劳动,人们在设计测试用例可能会出现疏忽或者考虑不周等情况,不可避免的出现测试用例质量不佳的情况。测试用例的偶然正确性现象也是影响基于代码覆盖的错误定位技术有效性的主要因素之一,偶然正确性现象是指程序中包含错误的代码行被执行,但没有产生错误结果的现象。现有方法对偶然性正确测试用例的处理在提高真正错误语句可疑度的同时会提高正确语句的可疑度,从而导致提升错误定位的效果不太理想。

技术实现思路

[0005]本专利技术针对上述基于频谱的错误定位技术的不足提出一种基于错误传播建模和缺陷特征增强的软件错误定位方法。应用复杂网络构建错误传播模型,计算测试用例权重。测试用例加权方法不局限于测试用例覆盖向量本身,通过分析程序频谱和程序语句之间的错误传播计算测试用例对错误定位的贡献大小。针对偶然性正确测试用例对错误定位的负
面影响,提出两种偶然性正确测试用例处理方法进行缺陷特征增强,得到优化的程序频谱,从而提高软件错误定位效率。
[0006]本专利技术方法具体包括以下步骤:
[0007]步骤1:对源程序进行插桩,执行测试用例,收集测试用例的程序频谱,包括执行结果和执行覆盖信息;
[0008]步骤2:降低偶然性正确测试用例对错误定位的负面影响;
[0009]步骤3:分别使用成功和失败测试用例的执行覆盖信息建立两个有向无权复杂网络模型G
P
和G
F

[0010]3‑
1.根据程序频谱建立测试用例和语句节点之间的连接,如果测试用例t
i
覆盖语句s
j
则节点t
i
与s
j
之间存在双向边;
[0011]3‑
2.根据测试用例执行上下文建立语句和语句节点之间的连接,单向逆序连接测试用例执行轨迹中的语句节点;
[0012]步骤4:通过TrustRank排名算法分别计算复杂网络模型G
P
和G
F
中每个节点的重要性,并通过节点重要性给成功和失败测试用例分配权重,计算加权后的语句执行四元组信息;
[0013]4‑
1.构造转移矩阵表示网络模型中节点之间的随机游走跳转概率,对G
P
和G
F
构造转移矩阵方法相同;
[0014]对于G
F
,构造一个大小为N
s
×
N
t
的矩阵S2T,其中N
s
表示失败测试用例执行向量并集的语句数量,N
t
表示失败测试用例的数量;如果语句s
i
覆盖t
j
,t
j
执行条语句,表示t
j
执行的语句数量,分配因为t
j
执行条语句时每条语句对t
j
的TR贡献值为构造一个大小为N
t
×
N
s
的矩阵T2S,如果t
j
执行s
i
,s
i
覆盖个失败测试用例,分配因为s
i
执行个失败测试用例时,每个测试用例对s
i
的TR贡献值为构造一个表示语句之间错误传播的N
s
×
N
s
的转移矩阵S2S,当语句s
i
与s
j
之间有边时,s
ij
=1/N
s
,并将S2S按列归一化;
[0015]4‑
2.构造信任传播向量,选择测试用例节点作为种子节点,添加测试用例提供的额外信息来控制节点在网络模型中的游走行为;让复杂网络在随机游走过程中对该种子节点集合具有更高的偏向性;
[0016]信任传播向量的形式设置为v
s
表示语句的信任传播向量,v
t
表示测试用例的信任传播向量;因为只选择测试用例节点作为种子节点,所以在G
F
中,失败测试用例执行的语句数量越少,则权重应该越大,所以其中:c
i
表示t
i
执行的语句数量,由于成功测试用例不满足上述分析,在G
P
中给成功测试用例分配相同的权重值即其中N
P
是成功测试用例总数;
[0017]4‑
3.计算语句执行四元组信息,每一轮迭代过程中,语句节点吸收相连的测试用例节点和指向其的语句节点的重要性,测试用例节点根据连接的语句节点重要性修改自身的重要性,语句和测试用例节点重要性相互作用,直至整个网络节点重要性稳定;如第k次
迭代时,相应节点重要性的计算:
[0018]本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于错误传播建模和缺陷特征增强的软件错误定位方法,其特征包括如下步骤:步骤1:对源程序进行插桩,执行测试用例,收集测试用例的程序频谱,包括执行结果和执行覆盖信息;步骤2:降低偶然性正确测试用例对错误定位的负面影响;步骤3:分别使用成功和失败测试用例的执行覆盖信息建立两个有向无权复杂网络模型G
P
和G
F
;3

1.根据程序频谱建立测试用例和语句节点之间的连接,如果测试用例t
i
覆盖语句s
j
则节点t
i
与s
j
之间存在双向边;3

2.根据测试用例执行上下文建立语句和语句节点之间的连接,单向逆序连接测试用例执行轨迹中的语句节点;步骤4:通过TrustRank排名算法分别计算复杂网络模型G
P
和G
F
中每个节点的重要性,并通过节点重要性给成功和失败测试用例分配权重,计算加权后的语句执行四元组信息;4

1.构造转移矩阵表示网络模型中节点之间的随机游走跳转概率,对G
P
和G
F
构造转移矩阵方法相同;对于G
F
,构造一个大小为N
s
×
N
t
的矩阵S2T,其中N
s
表示失败测试用例执行语句向量的并集,N
t
表示失败测试用例的数量;如果语句s
i
覆盖t
j
,t
j
执行条语句,表示t
j
执行的语句数量,分配因为t
j
执行条语句时每条语句对t
j
的TR贡献值为构造一个大小为N
t
×
N
s
的矩阵T2S,如果t
j
执行s
i
,s
i
覆盖个失败测试用例,分配因为s
i
执行个失败测试用例时,每个测试用例对s
i
的TR贡献值为构造一个表示语句之间错误传播的N
s
×
N
s
的转移矩阵S2S,当语句s
i
与s
j
之间有边时,s
ij
=1/N
s
,并将S2S按列归一化;4

2.构造信任传播向量,选择测试用例节点作为种子节点,添加测试用例提供的额外信息来控制节点在网络模型中的游走行为;让复杂网络在随机游走过程中对该种子节点集合具有更高的偏向性;信任传播向量的形式设置为v
s
表示语句的信任传播向量,v
t
表示测试用例的信任传播向量;因为只选择测试用例节点作为种子节点,...

【专利技术属性】
技术研发人员:陈滨曾鸿艳邵艳利魏丹王兴起
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:

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

1