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

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



                 2.  paths, level_depth←Get path information and compute level depth of test_data;
                    // 获取路径信息并利用公式          (14) 计算路径层级深度
                 3.  Select the pre-trained model according to the input data type; // 根据数据类型选择预训练模型
                 4.  count = 0; // 统计需训练的子模型数
                 5.  num_model = []; // 保存子模型序列
                 6.  precison_lst = []; // 保存子模型精度
                 7.  sample←test_data; // 初始训练样本
                 8.  WHILE (count < NN): // 插桩路径的所有子模型构建
                 9.     submodel←modelTrain(sample); // 根据公式  (1)–公式  (4) 或公式  (5)–公式  (8) 训练不同子模型
                 10.   precision←preciCompute(submodel); // 根据公式  (9) 计算模型精度
                 11.   precison_lst.append(precision); // 保存子模型精度
                 12.   sample←Update sample by next node; // 将下一个节点加入并更新样本
                                      C-SVMXGBoost 模型. 其中, 第
                 13.   count += 1;
                 14.   IF precision >= SMT:
                 15.     Save submodel;
                 16.     num_model.append(count);
                 17.   END IF
                 18.  END WHILE
                 19.  WHILE len(num_model) < NN: // 某个路径节点还未具有较优子模型
                 20.   IF num_model[i] < > num_model[i+1]–1:
                 21.     count = num_model[i] + 1; // 第  count 个路径节点缺失较优子模型
                 22.     sample←Update sample by test_data and path nodes; // 更新样本
                 23.     Select another pre-trained model to retrain the submodel that does not reach the threshold;
                       // 选择其他预训练模型来训练未达到阈值的模型
                 24.     Select optimal submodel of the current node by Formula(10); // 通过公式  (10) 选择该路径节点的最优子模型
                 25.     Save submodel;
                 26.     num_model.append(count);
                 27.   END IF
                 28.  END WHILE
                 29.  C-SVMXGBoost←Chain the submodels according to the order of path nodes;
                    // 根据公式    (11) 按路径节点顺序依次链接子模型
                 30.  Output C-SVMXGBoost;
                 END
                    在算法   1  中, 第  1  行和第  2  行为模型训练样本准备阶段, 随机生成测试数据后将其输入插桩程序获取路径, 并
                 计算其路径层级深度. 在随机生成数据的基础上进一步筛选, 确保样本均衡. 第                       3–7  行, 选择预训练模型, 初始化参
                 数及样本. 第   8–29  行, 构建                         8–18  行训练每个路径节点的子模型, 计算模型精度并
                 更新样本, 统计子模型个数. 若其达到最优子模型阈值, 则将其保存; 若未达到, 将其丢弃. 第                       19–28  行主要实现部
                 分路径节点最优子模型的筛选. 其中, 第             20  行和第  21  行寻找需进行二次训练模型的路径节点; 第             22  行和第
                 23  行, 设置样本, 选择与训练该路径节点子模型; 第           24–26  行筛选、保存当前路径节点的最优子模型. 第             29  行将
                 已完成的最优子模型依据路径节点顺序链接, 构建链式模型, 并在第                    30  行输出.
   222   223   224   225   226   227   228   229   230   231   232