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)注重于测试过程中测试代码对被测试软件/源代码的覆盖程度.
   184   185   186   187   188   189   190   191   192   193   194