Page 132 - 《软件学报》2025年第5期
P. 132
2032 软件学报 2025 年第 36 卷第 5 期
矩阵 (行 1 和行 2); 然后, 形成面向每条目标子路径的样本集, 并用于训练相应的代理模型 (行 3–6); 最后, 合并和
返回所有的代理模型 (行 7 和行 8).
算法 2. Surr_Model_Set_Train(P ) .
∗
np
输入: P ∗ ;
np
输出: SurrModelSet .
1. 采样具有代表性的测试输入集合 InputSet
2. 基于 InputSet 计算覆盖程度矩阵 CovMat
p = p → p DO
∗
∗
∗
3. FOR j 1 N
∗
4. 形成对应 p 的训练样本集 SampleSet j
j
∗
5. 基于 SampleSet j , 训练对应 p 的代理模型 SurrModel j
j
6. END FOR
7. 合并 SurrModel j 至 SurrModelSet
8. RETURN SurrModelSet
2.3 候选测试用例形成
∗ ∗ 内每条目标子路径
已知的是, 本文的目标是生成覆盖目标路径 P (np = 1,2,...,N) 的测试用例, 而面向 P np
np
∗
∗
∗
p ( j = 1,2,...,N) 的优化任务 task j 是为了生成覆盖 p 的测试用例. 显然, 覆盖 p 的测试用例并无法保证能够覆盖
j j j
P ∗ . 鉴于此, 本节需要从面向 P ∗ 内 p 的测试用例生成优化任务中选择最优进化个体, 并形成候选测试用例集, 用
∗
np np j
于覆盖目标路径 P ∗ .
np
task j 中选择最优进化个体之前, 需要基于第
在测试用例生成优化任务 2.2 节中训练好的代理模型来估计 task j
SurrModelSet(EvoPop j ) , 其函数实施细节如算法 3 所示: 一方面, 在
内种群中每一进化个体的适应值, 即运行函数
j
task j 中调用代理模型集合 SurrModelSet 内第 个代理模型 SurrModel j (行 1); 另一方面, 以 task j 内种群 EvoPop j
中每一进化个体为输入, 运行代理模型 SurrModel j , 估计出所有进化个体的适应值集合, 记为 EstFit j (行 2–6). 注
l l EvoPop j 中第 个进化个体, PopSize 表示种群内进
意, 这里定义 EvoPop j = {X |l = 1,2,...,PopSize} , 其中, X 表示 l
j j
l ¯ F j (X )
l
化个体数. 相应地, 所有进化个体的适应值集合 EstFit j 也表示为 EstFit j = { ¯ F j (X )|l = 1,2,...,PopSize} , 其中, j
j
l
表示 X 的估计适应值.
j
算法 3. SurrModelSet(EvoPop j ) .
l
输入: SurrModelSet EvoPop j = {X |l = 1,2,...,PopSize} ;
,
j
输出: EstFit j .
j
1. 调用 SurrModelSet 内第 个代理模型 SurrModel j
1
l
2. FOR X = X → X PopSize DO
j j j
l
l ¯ F j (X )
3. 基于 SurrModel j 估计进化个体 X 的适应值 j
j
l l
4. 将 X 的估计适应值 ¯ F j (X ) 保存至 EstFit j
j
j
5. END FOR
6. RETURN EstFit j
Best_Ind_Select(EstFit j ) , 其函数实施步骤如算法 4:
得到 EstFit j 后, 这里给出最优进化个体选择策略, 对应函数
一方面, 基于种群 EvoPop j 中每一进化个体对应的估计适应值, 提取最大估计适应值对应的索引号 (行 1–6); 另一
j
BestInd j = {x |i = 1,2,..., M} (行 7 和行 8).
方面, 基于提取的索引号, 选择相应的进化个体, 以作为最优进化个体, 记为 i