Page 189 - 《软件学报》2020年第9期
P. 189
2810 Journal of Software 软件学报 Vol.31, No.9, September 2020
例系数,也被称为测试覆盖成熟率,满足β(t)>0.β(t)与测试人员的技能紧密相关,因而假定测试案例设计人员的
测试技能随着测试覆盖率的增长而增加.这样,β(t)被定义为
⎡ ⎛ ct ⎞ () ⎤
−
β ()t = b sta ⎢ r + (1 r ) ⎜ ⎟ ⎥ (16)
⎣ ⎝ α ⎠ ⎦
其中,r=b ini /b sta ,b ini 和 b sta 分别是初始和稳态时测试案例设计人员的测试技能因子.公式(16)式的初始条件为
c(t)=0,这样可求得:
α (1 e− − bt )
sta
() =
ct (17)
1 β+ e − bt
sta
其中,β=(1−r)/r.这样,当 r=1 时,c(t)呈现指数增长趋势;当 r=0 时,c(t)呈现 S 型增长趋势;其他情况下,c(t)受制于多
种因素,变化趋势较为复杂.可以看出,这种建模方法和获得测试覆盖函数的思路与对 SRGM 和 TEF 的建模是完
[6]
全一致的.在我们前期的研究 [1,7] 中已分别对 SRGM 和 TEF 的建模进行了综合研究,这里不再赘述.相应地,另
一种融入测试覆盖的 NHPP 可靠性增长模型被建立如下:
d( ) 1
mt
⋅ = ( ba m t− ( )) (18)
dt c′ ( ) t
其中,b 是每个故障与每个可获得测试覆盖下的故障检测率,在 m(0)=0 的初始条件下,可求得:
m(t)=a(1−e −bc(t) ) (19)
易见:当 c(t)=1 时,模型演变为经典的 G-O 模型.这也意味着,G-O 模型假定测试覆盖满足 100%.
4.1.3 基于测试覆盖函数的 SRGM 建模
c(t)表示截止至 t 时刻,已被测试的代码或案例所占的百分比(原表述不清晰);1−c(t)表示到 t 时刻,尚未被测
试的代码所占的比例.显然,c(t)的导数 c′(t)表示 t 时刻时的测试覆盖率.易知,FDR 与 c′(t)成正比例,且与 1−c(t)
成反比例.这样,文献[11,40]认为 c′(t)/(1−c(t))可被用来度量 t 时刻的故障检测率 b(t):
ct ′ ()
() =
bt (20)
−
1 ct
( )
因为基于 c(t)的 SRGM 研究通常以下面的公共假设 [19,53,54] 为基础,从而依据这些假设可建立公式(21)所示
的微分方程,其可用以描述测试过程中故障检测与测试覆盖的基本关系:
d( )mt ⎛ c′ ( )t ⎞
= ⎟ [( )at − ⎜ m ( )]t (21)
dt ⎝ 1 c− ( )t ⎠
相比于基于故障检测率进行 SRGM 研究的事实,易知很多研究中对 b(t)的函数形式进行直接设定会引发更
多的随机性.上式 b(t)从测试覆盖函数 TCF:c(t)进行定义,由于测试覆盖可借助测试用例执行经过的结构或数据
流单元 [55] 来度量,这使得 FDR 的函数形式依赖于从测试覆盖角度进行确定的结果,如公式(22)所示:
⎡ t ( )τ ⎛ c′ ()τ ⎞ ⎤
() =
mt e − Bt () ⎢ m + 0 0 t ∫ a τ B ⎜ ⎟ dτ ⎥ (22)
( )e
⎣ ⎝ 1 c τ ⎠ − ( ) ⎦
其中,
t ⎛ c′ ()τ ⎞ t
() =
Bt t ∫ 0 1 c τ ⎠ ⎜ ⎝ − ( ) ⎟ dτ = 0 t ∫ b τ ( )dτ (23)
4.1.4 测试覆盖函数与故障检测率函数和可靠性的关联
在提出 Logistic TEF [56,57] 用以描述 TE 消耗的基础上,有先增后减变化趋势的 S 型函数又被用以刻画测试
覆盖率函数 [58−60] ,并与 SRGM 结合来度量可靠性.由于 TC 表征了被测试代码的比例,易知该比例的升高会使得
更多的故障被检测出来,进而随着故障的修复,可靠性将得到提高.可见,c(t)与 t 时刻的可靠性 R(t)具有一定的定
量关系,而探讨二者之间的关联在可靠性研究中 [53−55,61−63] 已持续十余年.可以看出:故障检测率 b(t)直接描述了
测试环境下故障被检测出的一种概率,其是测试人员在测试策略的指导下,采用合适的测试案例或测试方法对
故障进行检测的能力描述;测试覆盖 c(t)注重于测试过程中测试代码对被测试软件/源代码的覆盖程度.