Page 200 - 《软件学报》2025年第7期
P. 200

张逍怡 等: 面向智能体路径规划算法的动态随机测试方法                                                     3121


                                                      ∏           ∏
                                           Q
                                          P : P(Obs) =     q i j         (1−q ij )                   (17)
                                                     {i,j|M ij ∈Obs}  {i,j|∀obs∈Obs, obs∩M ij =∅}
                 这里, 我们称威胁概率矩阵        Q  为测试剖面   P  的特征矩阵.
                                                  Q
                    TAD  剖面将测试用例的输入空间离散化, 保证了离散化条件下测试用例个数是有限的. 另一方面, 从图                              5  可
                 以看出当离散化的精度足够高后, 威胁分布的多样性是能够得到保证的. 图                        5  中场景横竖被分成了      20  份, 共得到
                                                                               400
                 400  个子区域, 那么该分割下可能产生的威胁分布情况               (即测试用例总数量) 为      2 . 特别地, 当所有的     q i j = 0.5(即
                                                          400
                 Q = 0.5 D 1 ×D 2 ) 时, 每个测试用例被选中的概率均为  1/2 , 这样我们就实现了纯随机的测试策略            RT. 此外, 对相似的
                 测试剖面来说, 生成同一个测试用例的概率也会相似. 假设测试用例                     t 在子区域   M i j  中包含威胁, 假设特征  Q  中的
                      ′                            Q    Q ′   生成测试用例             δ 倍. 因此, 我们可以通过公式
                 q i j  与   Q  中的  q i j  相差  δ, 则相应的测试剖面  P   和   P  t 的概率也相差
                 (18) 来度量两个测试剖面之间的距离.

                                                        Q  Q ′      ′                                (18)
                                                    Dis(P ,P ) = ∥Q− Q ∥ 1

                 2.4   测试剖面更新策略
                    DRT-PP  通过多次执行同一个测试用例得到的路径集合的方差                  S (t) 来对测试用例的执行结果进行评价. 由第
                 2.2  节可知, 我们希望测试剖面的更新策略         φ 具有以下特征.
                                                       S (t) 的测试用例能够以更大的概率被测试剖面生成.
                    (1) 那些更接近测试目标, 即得到较大失效度
                    (2) 那些远离测试目标, 即得到较小失效度           S (t) 的测试用例能够以较小的概率被测试剖面生成.
                    由图  3  可知, 我们通过比较当前测试用例          t N T  的失效度   S (t N T )、上次执行测试用例   t N T −1  的失效度  S (t N T −1 )、目

                                ∗          ∗                       t N T +1  的测试剖面是趋近还是远离当前测试用例
                 前最优的测试用例       t  的失效度  S (t ) 来决定生成下一个测试用例
                                                                t N T  与第  2.3  节中设计的测试剖面建立联系: 即给定测
                 t N T . 然而, 无论是趋近或是远离, 我们都需要将当前测试用例
                                                      Q t
                 试用例   t, 我们需要得到一个“临时的”测试剖面          P , 使得通过   P Q t   生成测试用例  t 的概率较高.
                    假设测试用例      t 由某个经过离散化     TAD  剖面生成, 则                         A = (a ) D×D  来表示, 其中,
                                                                                     t
                                                                                         t
                                                              t 的威胁分布   t.Obs 可用矩阵       ij
                                                 {
                                                   1,  M ij ∈ t.Obs
                                              t
                                             a =   0,  ∀obs ∈ t.Obs, obs∩ M ij = ∅                   (19)
                                              ij
                 也就是说, 当第    2.3  节中的子区域   M ij  被某个威胁   obs ∈ t.Obs 填满时  a = 1, 反之  a = 0. 如果我们将  A  作为特征
                                                                                                t
                                                                       t
                                                                                 t
                                                                       i j       i j
                                 A t
                 矩阵构造测试剖面       P , 则该剖面生成测试用例        t 的概率就为   100%. 为了更好地体现测试用例         t 的特征, 我们引入
                 扩散机制, 将距离     t 中威胁较近的子区域的威胁生成概率也一并进行放大. 具体来说, 我们根据如下规则构建矩阵
                      t
                  t
                 Q = (q ) D×D .
                      i j
                          t       t
                    (1) 若  a = 1, 则  q = 1.
                                  ij
                          i j
                          t
                    (2) 若   a = 0, 即子区域   M ij  不包含威胁, 则在那些包含威胁的子区域中, 找到距离        M i j  最近的子区域, 记为  M i ′ j ′,
                          i j
                 并令:

                                                         √
                                                                     ′ 2
                                                   t
                                                              ′ 2
                                                   q = 0.5 (i−i ) +( j− j )                          (20)
                                                   ij
                                                                                        Q  称为测试用例     t 的
                                                                                         t
                 也就是说, 子区域与威胁的距离增加一个单位, 其包含威胁的概率就减少一半. 最后, 我们将
                 剖面特征矩阵, 并借助该矩阵对当前测试剖面进行调整.
                    假设当前测试用例为        t N T , 其失效度为   S (t N T ); 上次执行的测试用例为   t N T −1 , 其失效度为  S (t N T −1 ); 当前最优的测
                         ∗            ∗                     Q N T                            t N T  的剖面特征
                 试用例为   t , 其失效度为   S (t ). 假设当前的测试剖面为     P  , 测试剖面特征为     Q N T . 现求出测试用例
                        t
                 矩阵为   Q N T  , 则可以通过公式  (21) 求取更新后测试剖面     P Q N T +1 :

                                                                  t
                                              Q N T +1 = (1−δ)Q N T + s·ε(Q N T  −0.25·1)            (21)
                 其中, 1  为全  1  矩阵;  ε 是融合系数, 也称为测试剖面调整幅度; s 表示测试剖面的调整方向. 公式                 (21) 将当前的测
                                                     t
                 试剖面特征    Q N T  与当前测试用例的剖面特征      Q N T   进行融合, 得到新的测试剖面特征      Q N T +1 . 具体如下.
                                                                                ∗
                    (1) 若当前测试用例的失效度大于目前最优测试用例的失效度, 即                   S (t N T ) > S (t ) 时, 我们做较大幅度正向调整
   195   196   197   198   199   200   201   202   203   204   205