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

2828                                                       软件学报  2024  年第  35  卷第  6  期


                 向量的种子生成策略与        ProbSAT  相结合, 当然也可以与其他任何        SLS  求解器相结合. 另外, 第    5.5.1  节的实验结果
                 表明, 在多数情况下, 仅引入基于概率向量的种子生成策略即可显著提升测试效果. 因此, 在算法设计时, 本文以简
                 洁性和灵活性为重要原则, 仅关注基于概率向量种子生成策略, 而保持                     ProbSAT  的内部随机搜索机理机制不变.
                  4.3   测试集的归档策略
                    算法   2  产生的多样化的测试用例将被加入测试集              TS. 为维护测试集的多样性, 本文采用了两种归档策略
                 GlobalArch (见算法  4) 和  LocalArch (见算法  5), 它们均是根据  NS  算法的思想设计的, 分别考虑了测试集的全局和
                 局部多样性. 我们从详细介绍全局归档策略开始. 如算法                 4  的第  1  行所示, 合并新产生的测试用例{       tc }与测试集
                 TS  得到扩展测试集, 记作     TS  . 接着计算个体   c ∈ TS  的新颖得分  (novelty score) [38] , 其定义如下:
                                                         ′
                                       ′
                                                            1  k ∑
                                                         ′
                                                    ρ(c,TS ) =  d(c,tc )                              (4)
                                                                    ′
                                                                    i
                                                            k
                                                              i=1
                                  ′
                       ′        TS  中与   第             c 的第                 k  明确了参与新颖得分计算的邻居个
                 其中,    tc  表示集合       c  i 近的个体, 称为         i 个“邻居”. 超参数
                       i
                                      ′
                        ′           tc  之间的距离. 本文采用公式       (5) 定义的  anti-Dice 距离. 研究表明  [33] , 对于软件产品线测
                 数.   d(c,tc ) 表示个体  c 与   i
                        i
                 试问题, anti-Dice 是一种有效的距离测度. 注意公式         (5) 的测试用例采用集合形式的表示方法            (参考定义   2).
                                                               |c∩tc | ′
                                                     ′             i
                                                 d(c,tc ) = 1−                                        (5)
                                                     i          ′      ′
                                                           2|c∪tc |−|c∩tc |
                                                                i      i
                    新颖得分是     NS  算法中的核心概念, 它度量了个体所在区域的拥挤程度. 新颖得分越高, 说明个体所在区域越
                 稀疏, 反之则越密集. 通过不断搜索更新颖的个体               (即新颖得分更高的个体), 可逐步提高档案的整体多样性, 这正
                 好契合了基于相似性的软件产品线测试所追求的目标.
                 算法  4.   TS ← GlobalArch(TS,tc) .
                     ′
                 1.   TS ← TS ∪{tc}
                         c ∈ TS  do
                              ′
                 2. for each
                 3.  根据公式   (4) 计算测试用例    c 的新颖得分   tc closest
                                                    ρ(tc,TS )
                                                          ′
                 4. end for
                 5. 找出测试集   TS  中新颖得分最小    (最差) 的个体, 记为    tc worst
                          ′
                                      ′
                 6. if   ρ(tc,TS ) > ρ(tc worst ,TS )
                      tc 替换  TS
                 7.  用         中的  tc worst
                 8.  更新概率向量:     p i ← p i +(tc i −tc worst,i )/N  , 其中  i = 1,2,...,n
                 9. end if
                 10. return  TS
                 算法  5.   TS ← LocalArch(TS,tc) .
                 1. 找到  TS  中与  tc 距离最近的测试用例, 记为
                 2. 根据公式  (4) 计算测试用例    tc 的新颖得分   ρ(tc,TS \{tc closest })
                 3. 根据公式  (4) 计算测试用例    tc closest  的新颖得分  ρ(tc closest ,TS )
                 4. if   ρ(tc,TS \{tc closest }) > ρ(tc closest ,TS )
                      tc 替换  TS
                 5.  用         中的  tc closest
                 6.  更新概率向量:     p i ← p i +(tc i −tc closest,i )/N  , 其中  i = 1,2,...,n
                 7. end if
                 8. return   TS
   247   248   249   250   251   252   253   254   255   256   257