Page 136 - 《软件学报》2025年第5期
P. 136

2036                                                       软件学报  2025  年第  36  卷第  5  期


                 练和更新代理模型, 而是通过被测           MPI 程序的实际执行来计算每一测试用例生成任务                task j  中种群内进化个体的
                 适应值. 除了上面提到的无需训练和更新代理模型, 以及基于实际执行                     MPI 程序计算进化个体适应值外, Approach-
                 NoMod  的其他细节与本文提出方法完全相同. 此后, 分别使用所提方法和                   Approach-NoMod  生成期望的测试用例,
                 如果使用所提方法生成测试用例的效率和有效性更高, 那么, 表示基于代理模型能够降低                            MPI 程序路径覆盖测试
                 成本.
                    RQ3. 所提方法能否提高测试用例生成的有效性与效率?
                    为了验证    RQ3, 我们对比所提方法和文献         [30] 中已有方法, 记为    Approach-EvoGen. 需注意的是, Approach-
                 EvoGen  同样研究了   MPI 程序路径覆盖测试用例生成问题, 且为研究该问题的最新成果. 为更好地理解                        Approach-
                 EvoGen, 其工作原理给定如下: 首先设计了通信序列影响候选测试用例覆盖性能的评价指标, 并用于划分所有目
                 标路径为若干组; 然后, 构建了每组目标路径对应的测试用例集生成优化模型; 最后, 基于多任务进化优化算法并
                 行求解每一模型, 用于生成覆盖每组目标路径的测试用例集. 可以看出, Approach-EvoGen                   仅从全局方面分析某一
                 候选测试用例是否覆盖了目标路径, 而所提方法在每一优化任务中从局部方面寻找覆盖目标路径内每条目标子路
                 径的最优进化个体, 并基于最优进化个体, 形成候选测试用例集, 进而从全局方面验证某一候选测试用例是否覆盖
                 了目标路径, 最终形成覆盖所有目标路径的测试用例集. 显然, 所提方法恰好符合局部寻优加速全局最优的原理.
                 鉴于此, 这里分别使用所提方法和           Approach-EvoGen  生成期望的测试用例, 如果使用所提方法生成测试用例的效
                 率和有效性更高, 那么, 证明所提方法能够提高测试用例生成的有效性与效率.

                 3.2   被测  MPI 程序
                    本节选择    7  个基准  MPI 程序作为被测程序, 这些程序的基本信息如表              1  所示. 表  1  中, IMB-MPI1  是  IMB  公
                 司开发的用于进行       MPI 基准测试的组件, 用于检查        MPI-1  版本原语的性能    [31] ; HPL  是用于测试并行集群  Linpack
                 性能的基准     MPI 程序  [32] ; SUSY-HMC  是一个用于研究四维超对称杨-米尔斯理论的物理模拟                 MPI 程序  [33] ;
                 DepSolver、Kfray  和  ClustalW  均引用于文献  [34] 中的  MPI 程序, 其中, DepSolver 是一个并行多媒体  3D  静电解
                 算器, Kfray  是一个用于创建逼真图像的光线追踪程序, ClustalW           是多基因序列比对的常用工具; mpiBLAST           为基
                 因匹配   MPI 程序, 用于并行匹配所查询序列         (DNA  或氨基酸) 和数据库内序列之间相似的基因组序列片段                 [35] .


                                                 表 1 被测   MPI 程序基本信息

                       被测程序              进程数            通信原语数             代码行数             目标路径数
                      IMB-MPI1             4               42               7 092            1 115
                       DepSolver           6               63               8 988             398
                        Kfray              8               116             12 728             665
                         HPL               3               70              15 699            3 469
                      SUSY-HMC            16               132             19 201            2 031
                       ClustalW           24               178             23 265            2 537
                      mpiBLAST            17               397             582 179           12 792

                    基于表   1  中被测  MPI 程序基本信息, 可以发现所选定的程序在进程数量、通信原语数、代码行数等方面分
                 布较为广泛. 因此, 所选定的被测程序具有很好的代表性. 针对这些代表性程序, 获取的基本目标路径集也具有一
                 定的典型性. 鉴于此, 如果所提方法能够高效求解这些代表性程序的覆盖测试问题, 那么相应的实验结果将更容易
                 推广到其他    MPI 程序, 即具有良好的可扩展性.

                 3.3   实验设置
                    实验中使用的集群系统含有           24  个  H3C NaviData 5200  计算节点, 整个系统的计算资源超过     500  物理核, 可提
                 供超过   16 Tflops 的单精度浮点计算整体理论峰值, 内存容量超过             4.5 TB, 物理可用空间超过     300 TB. 此外, 实验
                 使用  MPI+C/C++编程语言和    Shark  机器学习库  [36] .
                    注意, 本文将采用文献       [4] 中提出的路径选择方法来得到表           1  中每一被测   MPI 程序的基本目标路径集, 记基
   131   132   133   134   135   136   137   138   139   140   141