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;