Page 169 - 《软件学报》2026年第5期
P. 169

2048                                                       软件学报  2026  年第  37  卷第  5  期



                 算法  1. 基于邻接表的粗粒度用例分组过程.
                 输入: 无序用例集     T, 用例覆盖语句集     S;
                 输出: 关键用例集     K, 普通用例集   N, 关键用例覆盖语句集       S k , 普通用例覆盖语句集    S n .

                 Begin
                 1. 关键用例集   K ←  ∅;
                 2. 普通用例集   N ←  ∅;
                 3. for t i  in T // 遍历无序用例集  T
                 4.  if t i  in K then // 当前用例为关键用例
                 5.   continue; // 接下来无需寻找与   t i 覆盖语句具有包含关系的用例
                 6.  end if
                 7.  for t j  in T
                 8.   if t j  in K then
                 9.    continue;
                 10.    end if
                 11.    if S[i]  ⊆ S[j] then // 用例  t j 的覆盖语句可包含  t i 的覆盖语句
                 12.     Add t j  into K; // 将可包含  t i 覆盖语句的用例  t j 加入关键用例集
                 13.     break; // 搜寻下一个能包含当前用例覆盖语句的用例
                 14.    end if
                 15.    if S[j]  ⊆ S[i] then // 用例  t i 的覆盖语句可包含  t j 的覆盖语句
                 16.     Add t i  into K; // 将可包含  t j 覆盖语句的用例  t i 加入关键用例集
                 17.    end if
                 18.    if S[i]  ⊈ S[j] and S[i]  ⊉ S[j] then // t i 与  t j 的覆盖语句不存在包含关系
                 19.     Add t i  and t j  into K; // 将  t j 与 t i 加入关键用例集
                 20.    end if
                 21.    j = j + 1;
                 22. end for
                 23. i = i + 1;
                 24. end for
                 25. N ← T – K; // 将未分组用例视为普通用例
                 26. Output K, N, S k , S n ;
                 End
                    在算法   1  中, 第  1, 2  行初始化关键用例集  K  和普通用例集    N. 第  3–26  行通过集合判断操作检测各用例间的语
                 句包含关系. 先判断当前检测用例是否已在关键用例集                  K  和普通用例集    N  中, 若在, 则跳过检测该用例与其他用
                 例间的包含关系以加快检测效率. 再判断是否存在包含关系, 将可包含其他用例覆盖信息的用例与覆盖信息互不
                 存在包含关系的用例加入关键用例集              K. 第  25  行, 将无序用例集  T  中不属于关键用例集      K  的用例加入普通用例
                 集  N. 第  26  行输出关键用例集  K  和普通用例集    N  以及对应的覆盖语句集       S k 和  S n .
                  2.2   细粒度测试用例分组排序
                    为同时提高排序的有效性和效率, 我们对测试用例进行细粒度分组排序. 一方面, 在                          Zhang  等人  [11] 分区排序
                 算法基础上, 提出以用例潜力度为二次选择指标的                 TP-Additional 策略对部分关键用例进行排序, 实现         TPG-TCP
                 方法; 另一方面, 受    Li 等人  [8] 利用多列表储存排序数据的启发, 我们增加了语句-用例数表                SC, 以加快计算待排用
   164   165   166   167   168   169   170   171   172   173   174