Page 130 - 《软件学报》2025年第5期
P. 130
2030 软件学报 2025 年第 36 卷第 5 期
模型, 该模型用于代替 MPI 程序的实际执行, 从而降低了进化个体的实际评价成本 [4] . 此外, 我们聚类一个样本集
为若干簇, 并基于每一簇内样本训练一个代理模型, 以用于估计靠近簇中心进化个体的适应值, 实现减少 MPI 程
序的实际执行次数 [27] .
本文在基于进化算法并行求解每一优化任务中优化模型的过程中, 使用代理模型代替 MPI 程序的实际执行,
从而进一步降低测试成本. 鉴于此, 上述研究工作能为本文代理辅助的训练和应用提供重要的理论和方法指导.
2 所提方法
2.1 总体框架
为提升测试用例生成效率, 本文提出一种代理辅助多任务进化优化引导的 MPI 程序路径覆盖测试用例生成
方法. 所提方法中, 首先, 面向目标路径内每条目标子路径, 训练一个代理模型, 用于代替被测 MPI 程序的实际执
行; 然后, 基于每条目标子路径对应的代理模型, 估计相应测试用例生成优化任务中进化个体的适应值, 以此选择
最优进化个体和形成候选测试用例集; 最后, 基于候选测试用例集及其面向每条目标子路径的真实适应值, 更新对
应每条目标子路径的代理模型, 并进化种群, 直至生成覆盖目标路径的测试用例. 所提方法的总体框架如算法 1.
算法 1. 所提方法总体框架.
∗
输入: {P |np = 1,2,...,NP} ;
np
输出: TCSet .
∗
∗
1. FOR P = P → P ∗ NP DO
1
np
SurrModelSet ← Surr_Model_Set_Train(P )
∗
2. np
P ∗ CovFlag = 0
3. 设置 np 的覆盖标志
4. FOR task j = task 1 → task N & & CovFlag == 0 DO
5. 初始化种群 EvoPop j
iter = 1 → MaxGen & & CovFlag == 0 DO
6. FOR
7. EstFit j ← SurrModelSet(EvoPop j )
8. BestInd j ← Best_Ind_Select(EstFit j )
9. {CovFlag,TC,CTSet,RealFit j } ← CovFlag_CTSet_Etc(BestInd j )
10. SurrMod j ← Mod_Upd(iter,CTSet,RealFit j )
11. 进化种群 EvoPop j
12. END FOR
13. END FOR
14. 添加 TC 至 TCSet
15. END FOR
16. RETURN TCSet
该算法的输入为 MPI 程序的基本目标路径集, 即 {P |np = 1,2,...,NP} , 输出为覆盖该基本目标路径集的测试
∗
np
∗
用例集合, 即 TCSet . 算法 1 首先以 P ∗ 为输入, 运行函数 Surr_Model_Set_Train(P ) , 训练对应 P ∗ 内目标子路径
np np np
的代理模型集合 SurrModelSet (行 1 和行 2); 然后, 针对第 j 个优化任务 task j , 基于 SurrModelSet(EvoPop j ) 估计种
群 EvoPop j 内进化个体的适应值 EstFit j , 并运用函数 Best_Ind_Select(EstFit j ) 选择最优进化个体 BestInd j , 以及
基 于 函 数 CovFlag_CTSet_Etc(BestInd j ) 得 到 候 选 测 试 用 例 集 CTSet 及 其 面 向 目 标 子 路 径 p ∗ j 的 真 实 适 应 值
RealFit j 等 (行 3–9); 最后, 基于 iter 、 CTSet 和 RealFit j , 运行函数 Mod_Upd(iter,CTSet,RealFit j ) , 以便更新对应
∗ SurrModel j , 并进化种群, 直至生成覆盖每一目标路径的测试用例 (行 10–16). 关于
目标子路径 p 的代理模型
j