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

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


                  5.3.3    C-SVMXGBoost 模型评估
                    精度常用于衡量分类模型的好坏, 计算每个子模型的精度不仅可更清晰地观测模型预测效果, 还可为后续链
                 式模型更新提供参考依据.
                    这里根据第     3.1  节的公式  (9) 计算子模型精度, 并使用折线图展示部分程序的每个路径节点分别在子模型
                 SVM  和  XGBoost 上的精度, 如图  7  所示. 其中, 横坐标表示子模型依据路径节点顺序的编号, 纵坐标表示子模型
                 对应的精度. 注意: 由于不同程序的路径节点个数不同, 故部分子模型在某些路径下缺少精度. 此外, 由于部分程序
                 具有较多子模型, 这里不便全部展示, 所以仅给出部分子模型精度.

                        100                                      100
                         95                                       95
                         90                                       90
                       子模型分类精度 (%)  80                 PG1      子模型分类精度 (%)  80                PG1
                                                                  85
                         85
                         75
                                                                  75
                                                                                               PG2
                         70
                                                                  70
                                                       PG2
                                                                                               PG3
                                                    以上. 其中, 程序
                         65
                                                       PG6
                                                                                               PG7
                                                                  60
                         60                            PG3        65                           PG6
                                                       PG7                                     PG8
                         55                            PG8        55                           PG10
                         50                                       50
                                         子模型 6
                                   子模型 4
                          子模型 1  子模型 3  子模型 5  子模型 7  子模型 9       子模型 1  子模型 3  子模型 5  子模型 7  子模型 9
                             子模型 2
                                                                                  子模型 6
                                                                                        子模型 8
                                                                                              子模型 10
                                                                            子模型 4
                                               子模型 8
                                                     子模型 10
                                                                     子模型 2
                               (a) 不同程序上的 SVM 子模型分类精度                 (b) 不同程序上的 XGBoost 子模型分类精度
                                       图 7 不同程序上的      SVM  或  XGBoost 子模型分类精度

                    由图  7  可知, 从总体曲线分布情况来看, SVM         模型和   XGBoost 模型对于大部分路径节点状态预测结果较优.
                 其中, SVM  模型对于程序     PG1, PG2, PG7, PG10  的初始路径节点预测效果较好, 均高于         XGBoost; 对于程序   PG3,
                 PG6, PG8, XGBoost 模型结果较优. 随着路径节点信息不断地加入样本, 这两个模型对于其他节点状态预测效果各
                 有优势. 因此, 在保证模型训练时间较少的基础上, 为解决不同类型程序的路径预测, 融合模型                            SVM  与  XGBoost
                 有利于提高路径预测模型的准确性. 从实验中也可发现, 当被测程序测试数据                         (即初始样本) 差异性较小时, 如数
                 据类型单一, 在模型精度达到一定阈值的前提下, 为降低链式模型训练与融合时间, 预训练模型                             (即链式模型的初
                 始模型) 可选择    SVM  模型; 对于测试数据差异较大, 如测试数据为非数值, 且长度较短、测试数据输入项较多等,
                 预训练模型可选择       XGBoost 模型. 还可发现, SVM   和  XGBoost 模型在部分路径节点上存在较大差异, 对它们进行
                 择优与融合可构建更优的链式模型. 此外, 在模型构建时一般无法保证每个路径节点对应的子模型的初始测试样
                 本都相对均衡, 由模型的特点可知, 在测试样本相对不均衡的情况下, XGBoost 模型更有优势.
                    为进一步验证链式模型分类精度与训练效率, 选取                 2  个基础程序   (PG1  和  PG2) 和  4  个工业程序  (PG3, PG6,
                 PG8  和  PG10) 独立执行  5  次, 以所有子模型精度的均值表示链式模型           C-SVMXGBoost 的精度, 结果如表    2  所示.
                    由表  2  可知, 在若干次实验中, 从链式模型精度来看, 对于不同的程序, 本文构建的链式模型精度较高, 均可保
                 持在  85%  以上, 部分程序模型精度可达        95%              PG3  模型精度最低也达      87.73%; 程序  PG6  最高可
                 达  97.85%; 程序  PG10  最高可达  92.60%. 对于较复杂的程序   PG8, 模型精度仍可达     90%  以上.
                    从链式模型的训练时间来看, 模型训练时间与程序的规模以及分支语句的个数具有较大联系. 对于规模较小
                 且分支语句较少的程序        PG1  和  PG3, 它们的模型训练时间较少, 平均训练时间分别为             0.67 s 和  0.66 s; 规模较大且
                 分支语句较多的程序        PG6  和  PG8, 模型所需平均训练时间较多, 分别为         22.39 s 和  45.83 s. 此外, 子模型精度对链
                 式模型的训练时间也有一定影响. 其中, 相比于              PG1  而言, 规模较小的简单程序       PG2, 其训练时间消耗较多. 由于
                 PG2  预训练子模型的精度较低, 故需选择另一个预训练模型来构建当前路径的子模型, 这必将花费一定的时间.
                    综上所述, 对于大部分程序, 链式模型在精度方面具有较好的效果; 在训练时间方面, 部分程序花费时间较多,
                 但其是否会影响整个测试效率需将构建的链式模型融入到测试用例生成中进一步验证.
   230   231   232   233   234   235   236   237   238   239   240