Page 286 - 《软件学报》2026年第7期
P. 286
王海宁 等: 融合因果效应的高效软件产品线缺陷定位方法 2971
果效应, 结果显示第 11 条语句的可疑程度最高. 本文提出的模型既考虑了影响语句 11 的语句, 也考虑了语句 11
所影响的语句. 因此, 在这一案例中可以更精确地定位到缺陷语句, 即根因缺陷定位. 在实验上, 选择了 4 个先进基
准算法, 在 6 个真实 SPL 系统上完成多组对比实验, 以验证本文提出方法在 SPL 系统上语句级缺陷定位问题上的
精确性. 本文的主要贡献包括以下 3 方面.
1) 在特征级定位过程中, 基于特征选择差异设计一种可疑特征交互去重策略. 该策略通过可疑特征选择集合
之间存在包含关系和相同子集两点特性, 利用缓存技术避免重复生成和检查大量的特征交互, 有效地提升特征级
定位的效率.
2) 提出一种引入中介变量的约简因果图模型评估语句对测试结果的因果效应. 该模型既约简语句间的因果关
系以提升评估效率, 又通过考虑中介变量使因果效应评估更加准确. 值得说明的是, 由于代码结构的可变性, 因果
技术尚未被应用于 SPL 的缺陷定位中.
3) 融合语句的频谱效应和因果效应以实现更稳定的缺陷定位: 当因果模型因样本稀疏或模型简化出现偏差
时, 频谱度量可提供冗余支持; 而当统计相关误导频谱度量时, 因果分析可加以修正. 实验结果表明, 这两种效应的
融合可以提升方法定位根因缺陷语句的能力.
本文第 1 节介绍缺陷定位的相关方法和研究现状. 第 2 节介绍本文所需的基础知识, 包括 SPL、特征交互缺
陷和潜在结果模型. 第 3 节详细描述本文提出的方法. 第 4 节通过多组对比实验说明提出方法的有效性. 第 5 节总
结全文.
1 缺陷定位相关工作
本节分别从单系统软件和 SPL 系统两方面介绍和总结缺陷定位问题的相关工作.
1.1 单系统软件的缺陷定位技术
单系统软件中的缺陷定位技术较为成熟, 常见的技术包括基于程序频谱的方法、基于突变的缺陷定位方法和
基于因果推断的方法等 [20–27] . 基于频谱的方法一直是研究者关注的重点之一. 为处理不同场景中的局限性, 研究者
提出了许多频谱技术来实现缺陷定位. 例如, Jones 等人 [21] 提出了 Tarantula 指标来区分和平衡通过与失败测试的
影响, 进而更直观和有效地定位软件缺陷. Abreu 等人 [22] 为了处理通过测试对可疑值计算的负面影响, 提出了
OP2 指标. 该指标可以平滑怀疑度计算结果, 避免极端值对定位结果的干扰, 从而提高缺陷定位的准确性和可靠
性. 然而, 研究表明, 基于频谱的方法对相同覆盖路径的程序语句无法实现精确的缺陷定位 [12,16,17] . 为了克服频谱
方法在某些情况下的不足, 研究人员提出了基于突变的缺陷定位方法. 这类方法主要通过分析突变程序与原始程
序在执行测试用例时的差异来定位缺陷. 例如, Papadakis 等人 [23] 提出了 Metallaxis 方法, 通过产生多个程序突变
体并执行失败测试用例来识别表现出类似失败行为的变体, 从而精确推断出缺陷所在位置. Li 等人 [24] 进一步结合
频谱分析与变异分析, 通过计算变异体与失败测试之间的相关性, 有效缩小了可疑代码范围, 提升了定位精确性.
然而, 基于突变的方法通常需要生成大量的突变体并逐一执行测试, 导致方法在实际应用中计算开销较大, 耗时较
长, 限制了其在大规模软件系统中的应用. 基于因果推断的方法旨在挖掘程序语句间的因果关系来定位软件缺陷.
Cleve 等人 [13] 最早提出了使用因果推理技术进行细粒度缺陷定位的方法, 该方法通过比较和分析程序的成功与失
败执行数据, 并系统地操纵程序状态, 从而识别出特定语句级别的错误. 为进一步提升因果效应评估的准确性,
Baah 等人 [16] 利用程序依赖关系构建因果图, 并通过回归技术计算因果效应. 此外, 他们进一步基于程序依赖约简
方法缓和混杂因子产生的影响, 使算法能更准确地得到程序语句对测试结果的因果效应. 在最近的研究中, Zeng
等人 [12] 利用因子图计算语句的因果效应, 并通过程序插桩技术增强观察数据的准确性.
综上所述, 基于频谱的缺陷定位技术和因果技术在单系统软件缺陷定位中已被广泛应用, 并均在不同情形下
表现出了显著的性能优势. 不同于现有研究的是, 本研究同时考虑了这两种技术, 以增强方法在不同情形下的定位
能力. 此外, 因果技术尚未在 SPL 系统缺陷定位中得到应用, 本文的研究对此进行了补充和拓展.
1.2 SPL 系统的缺陷定位技术
相比之下, SPL 系统的缺陷定位研究非常稀缺. 尽管可以直接用单系统软件的缺陷定位技术对单个产品逐一

