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

2802                                                       软件学报  2024  年第  35  卷第  6  期


                 进化生成优秀个体.
                    基于此, 将适应度函数       (记为  Fitness) 表示为路径相似度与路径层级深度的组合, 如公式             (15) 所示:

                                                Fitness = α×Sim+(1−α)Depth level                     (15)
                  4   基于  C-SCMXGBoost 链式模型的测试生成

                    本文将   SVM  和  XGBoost 等机器学习方法与遗传算法相结合, 利用构建的链式模型获取测试数据的覆盖路
                 径, 减少程序插桩次数, 并寻找与预测路径相似的目标路径集, 尽可能覆盖更多的目标路径, 从而减少适应度计算
                 与重复测试消耗的时间, 提高测试效率.
                  4.1   C-SVMXGBoost 链式模型构建
                    模型构建模块主要训练用于模拟测试数据覆盖路径的                    C-SVMXGBoost 链式模型, 其训练样本来源于预先生
                 成的测试数据. 模型构建过程如图          2  所示.

                      C-SVMXGBoost 链式模型构建模块


                                    模型更新
                                           达到模型       是     编号并保存训
                           开始              准确度阈值?           练好的子模型                        模型库

                          随机生成
                          训练数据              测试        否       依次加入
                                           子模型              路径节点信息
                           运行        模型准备过程
                          插桩程序              训练            否   是否已训练    是
                                           子模型               全部子模型?
                           获取
                          插桩路径                                         查看
                                            输入      执行              子模型个数
                                          测试数据     下一次                                  保存准确度
                                                                                        较高的子模型
                          计算路径                      操作
                                                                是
                                                                               否
                          层级深度                                        等于节点
                                                                      个数?
                                            选择
                                          预训练模型          依据路径节点              选择其他
                                                        顺序链接子模型              预训练模型
                                   提取测试
                                    数据    读取数据          C-SVMXGBoost
                                    和路径                链式模型构建完成              寻找未构建子      执行模型
                       测试数据、路径、                更新                           模型的路径节点      准备过程
                          层接近度                 模型          结束
                         (原始样本)
                                                 新样本
                                           图 2 链式模型     C-SVMXGBoost 的构建过程

                    一条完整的路径由多个路径节点连接而成, 每个路径节点并不孤立存在, 前一个节点的状态对后一个节点具
                 有一定的影响, 因此, 在训练链式模型的子模型时需考虑前一个路径节点的信息. 具体构建过程见算法                              1.

                 算法  1. 链式模型  C-SVMXGBoost 构建.
                 输入: 子模型精度阈值      SubModel_Threshold (SMT), 路径节点个数  Number_Node (NN);
                 输出: C-SVMXGBoost 模型.
                 BEGIN
                 1.  test_data←Generate a set of test data randomly;
   221   222   223   224   225   226   227   228   229   230   231