Page 135 - 《软件学报》2025年第5期
P. 135
孙百才 等: 代理辅助多任务进化优化引导的 MPI 程序路径覆盖测试用例生成 2035
算法 6. Mod_Upd(CTSet,RealFit j ) .
,
输入: CTSet RealFit j ;
输出: SurrModel j .
CTS et 内具有最高真实适应值的候选测试用例
1. 选择
2. 将选择的候选测试用例及其真实适应值补充至 SampleSet j
SampleSet j 所有训练样本输入的平均值
3. 计算
4. 选择距离该平均值最远的候选测试用例
5. 将选择的候选测试用例及其真实适应值补充至 SampleSet j
6. IF iter%UpdGen == 0 THEN
7. 基于补充的 SampleSet j , 更新代理模型 SurrModel j
8. END IF
9. RETURN SurrModel j
3 实 验
本节将所提方法应用于若干基准 MPI 程序路径覆盖测试中, 并通过与其他多种方法进行比较, 证明所提方法
能否提高测试用例生成的有效性与效率. 首先, 提出研究问题; 然后, 介绍被测程序和实验设置; 最后, 给出并分析
实验结果.
3.1 研究问题
本文一方面单独建立 MPI 程序目标路径内每条目标子路径的测试用例生成优化模型, 并基于多任务进化优
化来求解每一优化模型, 以期生成覆盖 MPI 程序目标路径的测试用例, 也就是说, 将每条目标子路径的测试用例
生成优化模型置于一个优化任务中, 并基于进化算法并行求解每一优化任务中优化模型的最优解, 用于覆盖 MPI
程序目标路径. 因此, 有必要验证基于多任务进化优化能否高效生成 MPI 程序目标路径的测试用例. 另一方面, 针
对目标路径内每条目标子路径, 这里训练一个代理模型, 用于估计相应测试用例生成优化任务中进化个体的适应
值, 进而代替 MPI 程序的实际执行. 鉴于此, 有必要验证基于代理模型能否降低 MPI 程序路径覆盖测试成本. 此
外, 还需将所提方法与其他现有方法对比, 以进一步验证所提方法能否提高测试用例生成的有效性与效率.
RQ1. 基于多任务进化优化能否高效生成 MPI 程序目标路径的测试用例?
为了验证 RQ1, 我们对比所提方法和一个被称为 Approach-SingTask 的方法. 这里, Approach-SingTask 不在使
用多任务进化优化框架, 即不在单独建立 MPI 程序目标路径内每条目标子路径的测试用例生成优化模型, 以及没
有基于进化算法并行求解每一优化任务中优化模型的环节, 而是建立 MPI 程序目标路径的测试用例生成优化模
型, 如公式 (5) 所示, 并基于进化算法求解公式 (5). 此外, Approach-SingTask 中仅需训练一个面向 MPI 程序目标
Func(X) . 除了上述提到的不同之处外, Approach-
路径的代理模型, 该模型训练样本的输入与输出分别为测试输入和
SingTask 中其他细节与本文提出方法完全相同. 此后, 分别使用所提方法和 Approach-SingTask 生成期望的测试用
例, 如果使用所提方法生成测试用例的效率和有效性更高, 那么, 表示基于多任务进化优化能够高效生成 MPI 程
序目标路径的测试用例.
1 ∑ N
OptMod = max Func(X) = F j (X) (5)
X∈D N j=1
∗
其中, X 为一个测试输入, 也称为一个进化个体; Func(X) 表示 X 覆盖 MPI 程序目标路径 P 的覆盖程度. 可以看
∗
出, 当 Func(X) = 1 时, X 即为覆盖 P 的测试用例.
RQ2. 基于代理模型能否降低 MPI 程序路径覆盖测试成本?
为了验证 RQ2, 我们对比所提方法和一个被称为 Approach-NoMod 的方法. 这里, Approach-NoMod 不需要训