Page 284 - 《软件学报》2026年第7期
P. 284
王海宁 等: 融合因果效应的高效软件产品线缺陷定位方法 2969
between program statements. To address this, this study proposes an efficient and accurate fault localization method for software product
lines, which performs localization at both the feature level and the statement level. At the feature level, based on observations of inclusion
relationships and identical subsets between suspicious feature selection sets, the method identifies suspicious feature interactions more
efficiently. At the statement level, a reduced causal model with mediator variables is used, combining causal effects and spectrum-based
effects to achieve more precise fault localization. Four advanced fault localization methods for software product lines are selected, and
experiments are conducted on six real-world software product line systems for comparison. The results demonstrate that the proposed
method significantly outperforms other mainstream methods in terms of localization efficiency and accuracy.
Key words: software product line; fault localization; causal inference
在现代软件工程中, 软件的开发效率与质量至关重要, 而软件产品线 (software product line, SPL) 是实现这一
目标的关键开发技术 [1,2] . Linux 操作系统、AUTOSAR 汽车电子系统软件、Firefox 浏览器和 ZipMe 压缩系统等
常见的基础和应用软件均是采用 SPL 技术开发的. 特征是 SPL 中不同功能的抽象 [3] , 特征模型 (feature model,
[4]
FM) 是用来描述和管理所有特征及其相互之间约束关系的有效工具. 软件工程师或终端用户根据特征模型所定
义的约束关系选择相应的特征自动构建满足需求的软件产品 (系统), 有效地提高了软件开发的效率和质量, 但也
增加了软件维护, 特别是缺陷定位的挑战性 [5,6] . 其挑战性的根源在于 SPL 软件系统的缺陷 (bug) 具有可变性 [7] , 即
仅能暴露在 SPL 中某些特定软件产品的缺陷, 而在其他产品中则通过了所有测试.
与传统的单系统软件相比, SPL 系统的缺陷定位有显著区别 [8,9] . 在单系统软件中, 开发人员只需关注一个特
定系统中的缺陷即可, 所有的代码、配置和依赖关系都是固定的, 便于追踪和修复 [10] . 与此不同, SPL 系统的缺陷
可能位于共享代码块或变异点, 导致多个产品存在功能缺陷. 因此, 由于需要考虑多个产品之间的共享代码和特征
组合 (称为特征交互), SPL 系统中缺陷来源的追踪更加复杂 [11] . SPL 的缺陷定位包含两个相互关联的子任务, 即特
征级缺陷定位和语句级缺陷定位 [5] . 前者旨在识别带缺陷的特征交互, 有助于从抽象层面理解和定位缺陷; 后者则
聚焦于定位到缺陷的语句, 是更细粒度的定位. 特征级缺陷定位是语句级缺陷定位的基础, 二者相辅相成, 共同实
现 SPL 系统的缺陷定位 [11] .
近年来, 研究人员提出了一些面向 SPL 系统的缺陷定位方法 [5,6,11] . 但是, 与单系统软件的缺陷定位 [10,12,13] 相
比, 相关研究仍然非常稀缺. Arrieta 等人 [5] 利用基于频谱的缺陷定位 (spectrum-based fault localization, SBFL) 技术
计算所有二阶特征交互 (即所涉及特征的个数为 2) 的可疑性, 实现了特征级缺陷定位. 针对语句级缺陷定位方法,
Nguyen 等人 [11] 提出了 VarCop 方法, 该方法利用可变性缺陷的特性识别出可疑的特征交互, 接着基于程序切片技
术隔离出可疑语句. 最后, VarCop 从产品和单元测试两种粒度基于 SBFL 技术计算语句的频谱效应以实现语句级
缺陷定位, 这一定程度上增强了频谱效应的准确性. 据我们所知, VarCop 是目前唯一针对 SPL 系统可变缺陷的语
句级定位方法.
然而, 现有方法在特征级缺陷定位的效率和语句级缺陷定位的精确性上均面临不足. 例如, Arrieta 等人 [5] 提出
的方法忽略了可变缺陷的特性, 即可变缺陷往往由不超过 6 个特征之间的交互作用导致 [14,15] , 仅关注两个特征之
间的交互无法准确地实现特征级定位. 其次, 计算所有特征交互的可疑性会面临“组合爆炸”带来的挑战, 导致定位
过程极为低效. 因此, 该方法很难在实践中实现有效的缺陷定位. 对于语句级缺陷定位技术, SBFL 技术固有的局
限性为 VarCop 计算语句的可疑值带来了挑战. 例如, 对于相同覆盖路径的语句, 基于频谱效应的方法会计算出相
同的可疑值, 导致无法准确地识别出根因缺陷语句, 这在许多单系统的缺陷定位研究中已被证实 [12,16,17] . 进一步地,
当缺陷的影响通过程序中的控制依赖或数据依赖向其他语句传播时, SBFL 方法往往无法区分传播效应与缺陷本
身的直接影响, 从而导致根因缺陷语句难以被正确识别. 需要说明的是, 根因缺陷是指系统、产品或流程中直接导
致问题或缺陷产生的最本质、最核心的因素. 它通常位于问题因果链的源头, 是根因定位过程中最终锁定的核心
原因 [18] . 在软件系统中, 根因缺陷语句特指那些直接引发故障的源代码语句, 位于问题因果链的起点, 代表导致故
障发生的根本原因 [19] .
本文通过一个真实 SPL 系统 (BankAccountTP) 的可变缺陷进行说明. 图 1 展示了 BankAccountTP 系统的特
征 Transaction 中 transfer 函数实现, #ifdef 宏指令用来控制特征的选择. 该函数涉及的特征有 Transaction、Lock、

