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 为使用本文提出的约简因果图模型所计算出可疑语句导致缺陷的因

