Page 229 - 《软件学报》2024年第6期
P. 229

钱忠胜 等: 结合   SVM  与  XGBoost 的链式多路径覆盖测试用例生成                                      2805



                 1.  init_pop←Initialize(Pop_Size, CL);
                 2.  test_data←toDecimal(init_pop); // 将初始种群信息转换为十进制
                 3.  iteration←0;
                 4.  FOR iteration IN ET:
                 5.    new_pop_indiv ← init_pop;
                 6.    prepath←Input test_data into C-SVMXGBoost; // 获取预测路径
                 7.    sim_path←comparePath (prepath, Tarpath); // 获取与预测路径相似的目标路径
                 8.    IF sim_path < >   ∅ : // 存在相似路径
                 9.       precise_path←getFromInstru(test_data); // 在插桩程序中获取精确路径
                 10.     fit← calculateFitness(test_data); // 根据公式  (13)–公式  (15) 计算适应度值
                 11.     IF fit == 1:
                 12.       UncoveredTarPath←Delete current path from Tarpath; // 删除当前目标路径
                 13.       New_testdata←test_data; // 保存当前测试数据, 用于后续模型更新
                 被覆盖则完成测试; 否则在进化代数达到阈值时才终止. 第
                 14.     END IF
                 15.    END IF
                 16.    Roulette(Pop_Size, new_pop_indiv, fit); // 轮盘赌法选择个体
                 17.    Pop_list←Crossover (Pop_Size, CL, CP, EI); // 引入新个体进行交叉操作
                 18.    new_pop_indiv←Mutate (Pop_list, CL, MP); // 实施变异操作
                 19.    test_data←toDecimal(new_pop_indiv);
                 20.    iteration += 1; // 统计迭代次数
                 21.    IF UncoveredTarPath== ∅:
                 22.      BREAK;
                 23.    END IF
                 24.  END FOR
                 25.  Output New_testdata, UncoveredTarPath;
                 END
                    在算法   2  中, 第  1  行和第  2  行初始化种群并将其转换为十进制数. 第        3–24  行, 借助  C-SVMXGBoost 模型完成
                 遗传操作, 生成覆盖目标路径的测试数据. 其中第                 5  行和第  6  行, 将数据输入链式模型中, 获得预测路径. 第
                 7–10  行, 根据预测路径寻找目标路径中的相似路径, 将当前测试数据输入到插桩程序, 获取精确路径, 并计算适应
                 度值. 第  11–14  行, 若适应度值为   1, 表明目标路径被覆盖, 将其删除, 并保存当前测试数据; 第              16–20  行, 当目标路
                 径未被全覆盖或不存在预测路径与目标路径的相似路径时, 则进行轮盘赌选择、交叉、变异等过程, 在交叉过程
                 中引入优秀个体基因, 通过变异生成新的种群, 并统计迭代次数. 第                   21–23  行, 判断全部目标路径是否被覆盖, 若全
                                                               25  行输出新测试数据      (用于更新样本) 以及目标路径
                 的覆盖情况.
                  4.3   C-SVMXGBoost 链式模型更新

                    C-SVMXGBoost 链式模型精度是提高测试效率的关键, 为使每个路径节点的预测结果均较准确, 该模型需进
                 一步更新, 以提高模型精度. 链式模型更新过程见算法                3.

                 算法  3. C-SVMXGBoost 链式模型更新.
                 输入: 链式模型 C-SVMXGBoost, 新测试数据       New_testdata, 目标路径集  TarPath;
                 输出: Updated_C-SVMXGBoost 模型.
   224   225   226   227   228   229   230   231   232   233   234