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 ) 时, 我们做较大幅度正向调整

