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、
   279   280   281   282   283   284   285   286   287   288   289