Page 285 - 《软件学报》2026年第7期
P. 285

2970                                                       软件学报  2026  年第  37  卷第  7  期


                 BanAccount 和  DailyLimit. 第  11  条语句为缺陷语句  (应为  amount 而非~amount). 这是一个可变缺陷, 因为它不会
                 导致所有的产品无法通过测试. 为简化问题, 假设已确定缺陷语句为                     transfer 中的语句. 图  1  给出了每条语句在实
                 际测试环境中未通过测试样例中被执行的次数                 f s 、通过测试样例中覆盖语句的次数         p s 以及所有通过的测试样例
                     Σ. 若使用先进的    SBFL  指标  (OP2) 计算每条语句的可疑程度       (如列  OP2 SBF 所示), 可以得到第   12  和  13  条语
                                                                              L
                 总数
                 句的可疑程度最高, 其次为第         11  条语句, 这意味着开发人员需要第         3  次检查才能找到错误的语句. VarCop (如列
                 OP2 VarCo 所示) 除了从单元测试结果这一粒度计算语句的频谱效应, 还考虑了产品测试结果这一粒度, 从而提升
                        p
                 频谱效应的准确性. 然而, 即使采用          VarCop  计算语句的可疑值, 第     11  条语句的可疑值仍排至第       3. 产生这一现象
                 的原因是   SBFL  和  VarCop  主要依赖统计数据, 不考虑语句之间的依赖关系和执行顺序. 这意味着, 对于一条语句,
                 它在未通过测试样例/产品中被覆盖次数越多, 而在通过测试样例/产品中被覆盖次数越少, 其可疑程度越高. 因此,
                 由于语句   11、12  和  13  在未通过测试样例中被执行次数一致, 但语句           11  在通过测试样例中被执行次数更多, 从而
                 导致其频谱效应更低. 事实上, 该案例缺陷语句的执行直接影响到后续语句的执行                          (语句  12  和语句  13), 并且缺陷
                 传播到后续语句, 导致程序失败. 以上结果表明, 频谱效应在一些情形下尽管能反映部分代码语句块的可疑程度,
                 但无法更为精确地用于定位缺陷语句, 尤其在缺陷通过依赖关系传播的情况下可能会误判可疑语句. 此外, 在大规
                 模的  SPL  系统中, VarCop  识别缺陷特征交互时忽略了特征交互的重复生成和检查问题                   (详细解释见第     3.3  节), 导
                 致其特征级定位效率仍然低下.

                                        #ifdef Transaction        f s            p s         Σ   OP2 SBFL   OP2 VarCop     C
                                        public boolean transfer(Account source,
                                         Account destination, int amount) {
                                         #ifdef Lock
                                       1  if (!lock(source, destination)) {  11  106  663 10.840  0.873  0.364
                                       2   return false;          0  30  663 −0.045  0.000  0.000
                                       3  }
                                       4  try {                  11  61  663 10.908  0.000  0.000
                                       5   if (amount <= 0) {    11  61  663 10.908  0.935 0.402
                                       6    return false;         0  30  663 −0.042  0.000  0.000
                                       7   }
                                           #ifdef BankAccount/Dailylimit
                                       8   if (!source.update(amount*-1)) {  11  31  663 10.953  0.977 1.260
                                       9    return false;         2  15  663  1.977  0.118  0.500
                                      10   }
                                           #ifdef BankAccount/Dailylimit
                                      11   if (!destination.update(~amount)) {  11  16  663 10.976  0.998 5.000
                                      12    source.undoUpdate(amount*-1);  11  12  663 10.982  1.000 2.500
                                      13    return false;        11  12  663 10.982  1.000 2.500
                                      14   }
                                      15   return true;           0  4  663 −0.006  0.000  0.000
                                      16  } finally{
                                           #ifdef Lock
                                      17   source.unLock();      11  61  663 10.908  0.935 1.700
                                      18   destination.unLock();  11  61  663 10.908  0.935  1.700
                                      19  }
                                      20 }
                                  图 1 针对   BankAccountTP  系统, 不同定位方法所计算的语句可疑值

                    为弥补以上不足, 本文针对         SPL  提出了一种融合因果和频谱效应的高效缺陷定位方法                  FCS-FL, 旨在提升特
                 征级缺陷定位的效率以及语句级缺陷定位的精准性. FCS-FL                 首先识别缺陷的特征交互, 进而检测出缺陷语句. 在
                 特征级定位上, FCS-FL    利用通过产品与未通过产品间的特征选择差异                 (具体定义见第     3.3  节) 来识别出可疑特征
                 交互. 与现有方法不同的是, FCS-FL       采用了一种可疑特征交互去重策略, 该策略利用缓存技术以大幅提升识别效
                 率. 接着, 对可疑特征交互进行程序切片以隔离出可疑语句集合. 在语句级定位中, 基于程序依赖关系构建一种引
                 入中介变量的约简因果图模型, 从而识别和估计可疑语句对测试结果的因果效应, 并将其与频谱效应融合以实现
                 更准确的语句级缺陷定位. 如图          1  所示, 列  C  为使用本文提出的约简因果图模型所计算出可疑语句导致缺陷的因
   280   281   282   283   284   285   286   287   288   289   290