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  不需要训
   130   131   132   133   134   135   136   137   138   139   140