Page 230 - 《软件学报》2024年第6期
P. 230
2806 软件学报 2024 年第 35 卷第 6 期
BEGIN
1. prepath←Input New_testdata into C-SVMXGBoost; // 由算法 2 中新测试数据获取预测路径
2. sim_path←Search target path in TarPath similar to prepath; // 寻找预测路径的相似目标路径
∅ :
3. IF sim_path < >
4. precise_path ← getFromInstru(New_testdata); // 在插桩程序中获取精确路径
5. lev_depth ← calculateLevDepth(precise_path); // 根据公式 (14) 计算精确路径的层级深度
6. new_sample ← Update(New_testdata, precise_path, lev_depth);
7. END IF
8. Updated_C-SVMXGBoost←Repeat the steps in Algorithm 1;
9. Output Updated_C-SVMXGBoost;
END
在算法 3 中, 第 1 行和第 2 行, 将算法 2 中获得的新测试数据输入 C-SVMXGBoost 链式模型中, 获取预测路
径及其相似的目标路径; 第 3–7 行, 若存在相似路径, 将测试数据输入到插桩程序中获得精确路径, 计算该路径的
层级深度, 且将测试数据、精确路径以及路径层级深度保存并更新样本; 第 8 行和第 9 行, 根据算法 1 来更新模型
并输出.
5 实验设计与分析
为检验 C-SVMXGBoost 链式模型预测路径的准确性, 以及测试用例生成效率, 本节选取经典的基础程序和工
业程序进行实验以展开对比分析.
5.1 评价指标
为评价提出的基于链式模型的多路径测试用例生成方法的效率, 同时降低算法随机性带来的影响, 本文定义
如下几个评价指标.
1) 链式模型分类精度. 链式模型中所有子模型分类精度的均值.
2) 平均训练时间. 独立地训练每个被测程序的初始模型 C-SVMXGBoost 若干次, 计算每次训练所需时间总和
的平均值.
3) 执行时间. 测试程序所使用的时间. 其中, 传统遗传法的执行时间为程序通过遗传算法完成用例生成的时间;
本文方法的执行时间为构建链式模型与生成测试数据时间之和.
4) 覆盖率. 将程序独立地运行若干次, 若每次执行程序时, 用例可在最大进化代数内覆盖全部目标路径, 则将
覆盖次数加 1. 覆盖率为若干次程序运行后最终覆盖次数与总运行次数的比值.
5) 进化代数总量. 一定次数的用例生成中, 所有单条目标路径被覆盖所需进化代数的数值总和.
6) 平均进化代数. 待生成用例的程序独立地执行一定次数, 每次执行时, 若在最大进化代数内, 用例能覆盖所
有目标路径, 则保存最后覆盖路径的进化代数; 若在最大进化代数内, 用例未能全覆盖, 则将最大值 (即, 进化代数
阈值) 作为本次测试程序时所需的进化代数. 平均进化代数表达了这些次实验所记录代数总和的均值.
此外, 为更直观、便捷地展示本文方法与各对比方法在不同指标下的实验效果, 在执行时间、覆盖率和平均
进化代数上扩展几个指标, 并在相应部分进行文字阐述, 详细说明见第 5.3.3 节、第 5.3.4 节和第 5.4 节.
5.2 实验设置
实验环境为 Win 10 操作系统、Python 编程语言、jdk 1.8 版本、PyCharm 编程工具. 为使 C-SVMXGBoost 链
式模型更好地适用于遗传进化测试策略, 让模型选出的优秀个体可充分地参与进化生成, 同时确保引入的个体基
因丰富多样, 避免个体在进化过程中陷入局部最优, 以生成更优的测试用例, 这里将遗传参数设置为多点交叉概率
为 0.9, 单点变异概率为 0.1, 初始种群规模为 40 等. 通过从链式模型预测结果的准确性以及测试用例生成效率等