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

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


                 进行缺陷定位, 但这极为低效. 因此, 在使用单系统软件的缺陷定位技术前, 常利用程序切片技术                            [28,29] 来缩小搜索
                 空间, 从而提升定位的效率. 例如, Chaleshtari 等人      [30] 考虑到基于突变的缺陷定位极为耗时, 通过程序切片技术获
                 得可疑语句, 并只检查被隔离的语句. 然而, 这些方法无法获得更高的性能, 因为它们无法处理特征交互对程序的
                 影响. 与之不同, Arrieta 等人  [5] 首先根据特征选择引发缺陷的概率对特征进行排序; 接着提出了一种缺陷隔离方
                 法, 通过自动分析特征模型, 生成包含最可疑特征的最小规模的产品, 以方便缺陷原因的隔离. 受他们工作的启发,
                 Nguyen  等人  [11] 观察到可变缺陷的特性, 并基于这些特性实现特征级的定位. 接着, 他们基于切片技术缩小搜索空
                 间, 并利用  SBFL  技术实现   SPL  系统的语句级缺陷定位.
                    尽管现有研究在       SPL  系统缺陷定位方面取得了一定进展, 但在特征级和语句级缺陷定位上仍有进一步研究
                 的空间. 本文研究旨在提高特征级缺陷定位的效率和语句级缺陷定位的精准性.
                  2   基础知识


                    本节简要介绍相关背景知识, 包括           SPL、特征交互缺陷和潜在结果模型.
                  2.1   SPL
                    SPL  是一种软件工程方法论, 利用软件复用的理念, 通过系统化地共享关键代码库来创建一系列相关软件产
                 品  [31,32] . 形式上, SPL  可由一个三元组   Γ = ⟨S,F,φ⟩ 表示, 其中  S 是用于实现系统  Γ 的程序语句集合,   F 表示系统的
                 特征集合,   φ 为特征实现函数. 对于一个特征          f,  φ( f) ⊂ S 表示特征  f 在系统   Γ 中的语句实现, 并且  φ( f) 包含在选择
                 特征  f 的所有产品中. 对于一个特征集合          F = {f 1 , f 2 ,..., f |F| }, 每个特征   f i ∈ F (i = 1,2,...,|F|) 均有两种状态, 选择  (打
                 开) 或不选择   (关闭). SPL  系统中特征的存在可视为        if-then  语句, 例如预编译指令#ifdef 根据特征的选择控制相应
                 代码的编译和运行. 配置       (或产品) 是在所有特征上的不同选择, 形式上可表示为                {±f 1 ,±f 2 ,...,±f |F| }, 其中每个特征
                 根据选择状态只能表示为         + f  或  − f . 特征交互在逻辑上即为部分配置. 例如, 一个特征数为           5  的  SPL  系统的特征
                 集合为   {f 1 , f 2 , f 3 , f 4 , f 5 }, 其中一个产品的配置可表示为  c = {+ f 1 ,− f 2 ,−f 3 ,+ f 4 ,+ f 5 }, 其中  (−f 3 ,+ f 4 ) 为  c 的一个特征交
                 互. 满足特征模型的配置为有效配置, 本文只针对有效配置执行缺陷定位任务.
                  2.2   特征交互缺陷
                    特征之间的交互作用可能导致系统发生无法预料的缺陷                    [33] . 特征交互缺陷可根据系统是否发生功能缺陷, 分
                 为非功能型特征交互缺陷和功能型特征交互缺陷                 [34] . 非功能型特征交互缺陷是指由于特征之间的交互作用, 影响
                 到软件系统的非功能性属性, 如性能、可用性、可靠性、安全性等. 这种缺陷不一定会导致功能失效, 但会使系统
                 在某些方面表现不佳       [35] . 相反, 功能型特征交互缺陷会直接影响到软件系统的功能性表现, 导致系统功能失效或
                 不符合预期的行为. 需要注意的是, 在无特别说明的情况下, 本文提到的特征交互缺陷为功能型特征交互缺陷.
                    对于一个    SPL  系统  Γ, 缺陷的特征交互    B  应属于所有未通过产品的配置. 检查未通过产品配置的所有特征交
                                                                                         C F  分别表示测试通
                 互是低效且非必须的. 例如, 对于采样产品的配置集合                C = C P ∪C F = {c 1 ,c 2 ,...,c n }, 其中  C P  和
                 过和未通过的配置集合. 任意一个配置            ∃c ∈ C P  的特征交互都不会是导致可变缺陷的根本原因. 换言之, B              应同时
                 满足缺陷相关性和最小性         [11,14] .
                    1) 缺陷相关性是指任何包含         B  的配置都对应于一个未通过的产品.
                    2) 最小性是指    B  中任一子集都无法满足缺陷相关性.
                    直观地, 缺陷特征交互       B  必然属于  C F  而不属于  C P . 事实上, 可能存在多个特征交互同时满足缺陷相关性和最
                 小性, 本文将这些特征交互作为可疑特征交互.
                  2.3   潜在结果模型与因果效应估计
                    潜在结果模型是一种用于估计因果效应的理论框架                   [36] . 该模型通过比较在不同处理条件下的潜在结果来确
                 定处理对个体或群体的影响. 具体而言, 每个受试单位                (如个体、群体或实验对象) 在接受或未接受处理时都有一
                 个潜在结果    [37] . 通过比较这些潜在结果, 研究人员可以估计处理的因果效应. 假设处理变量                   T  是一个二元变量, 取
   282   283   284   285   286   287   288   289   290   291   292