Page 181 - 《软件学报》2026年第7期
P. 181
2866 软件学报 2026 年第 37 卷第 7 期
Algo 100 的 EXAM_Best 和 EXAM_Average 指标值与其他 4 种变体基本相当, EXAM_Worst 的指标值虽然稍差, 但
%
先前的研究已经指出现实调试中, 在 Worst 情况下才能定位到缺陷的情况比较少见, EXAM_Worst 指标只是为了
对方法进行更全面度量的一种参考 [7] i End_Diff i 的具体值对程
End_Diff > 0 的情况下根据
, 所以, 综合来看, 不在
x x
Suspicious_Group 的包含情况做进一步区分, 即 INSPECT 原始风险值计算方法 Algo 100% , 是更为合适的
序语句受
i
设计.
表 10 INSPECT 不同风险值评估算法变体的缺陷定位有效性 (真实缺陷)
算法变体 EXAM_Best EXAM_Average EXAM_Worst
0.73 4.26 7.78
Algo 20%
0.80 4.60 8.40
Algo 40%
0.83 5.08 9.33
Algo 60%
0.83 5.27 9.70
Algo 80%
Algo 100% (INSPECT C ) 0.85 5.46 11.07
5 相关工作
基于程序频谱的缺陷定位是最具代表性的软件缺陷定位技术之一, 此类方法收集失败测试用例和通过测试用
例执行时的覆盖信息, 构建以 a ef (程序语句被失败测试用例覆盖的次数)、a np (程序语句未被通过测试用例覆盖的
次数) 等元素为代表的程序频谱, 并设计风险值评估公式分析程序频谱与软件缺陷间的潜在关联, 最终得到语句
的具体风险值. 围绕对此类公式的设计及评估, 前期已有许多研究者陆续发表了相关工作, 如由 Jones 等人 [58] 提出
的最经典的风险值评估公式之一 Tarantula, Wong 等人 [43,45] 提出的实践最优的公式 DStar 和 Crosstab, 以及被证明
高有效性的 Ochiai [44] 和 Naish2 [46] 等. 此外, Yoo 等人 [59] 还提出了基于遗传算法生成风险值评估公式的方法, Xie 等
人 [32] 和 Rui 等人 [46] 对风险值公式从理论层面分析了优劣关系.
基于突变的缺陷定位与频谱缺陷定位同为最具代表性的缺陷定位技术之一, 此类方法在为特定程序语句评估
风险值时, 首先对目标语句实行突变策略, 生成多个程序突变版本, 并在每个突变版本上运行测试用例, 收集测试
用例在突变版本上的执行结果; 随后, 分析对程序语句突变后测试用例执行结果受到的影响, 通过设计数学化公式
将此影响量化计算为语句的具体风险值. 在现有的突变缺陷定位研究领域, Papadakis 等人 [35] 提出的 Metallaxis 和
Moon 等人 [34] 提出的 Muse 是具有代表性的技术.
动态切片是一种通过删除不相关部分缩减程序规模的技术, 已有一些软件缺陷定位方法利用动态切片对待测
程序进行简化, 以更有效地分析缺陷语句与失败测试用例之间的关联. 例如, Wen 等人 [60] 采用动态切片和统计学
方法提取程序元素之间的依赖关系并细化执行历史, Mao 等人 [61] 利用动态切片捕捉程序实体执行对输出的影响,
以优化缺陷定位效果. 此外, 亦有研究尝试将动态切片与基于频谱和基于突变的缺陷定位相结合, 利用动态切片缩减
频谱或突变信息规模, 以降低分析难度. 例如, Cao 等人 [62] 利用动态切片生成混合切片谱以优化频谱缺陷定位过程,
Chaleshtari 等人 [63] 利用动态切片减少需要变异的语句数量, 降低突变缺陷定位技术的执行开销.
近年, Zeng 等人 [17] 提出一项基于语义信息的缺陷定位技术 SmartFL, 该方法对程序语义信息、静态分析信息
和动态执行跟踪信息进行建模, 并利用基于概率的方法为程序语句评估风险值以实现缺陷定位. SmartFL 已被证
实在有 效性方面超过现有频谱及突变缺陷定位技术, 因而被选择与本研究所提出的 INSPECT 方法进行比较.
尽管以上所述程序覆盖信息、突变信息和语义信息等信息源均在缺陷定位任务中具有各自的优势, 但如
第 1.1 节中所指出的, 它们亦具有各自不容忽视的短板, 如覆盖信息往往体量庞大、冗余、难以精准分析, 且其仅
从较为浅表的视角观测程序运行, 因此许多语句可能具有完全相同的覆盖信息; 突变信息的获得需要对突变后的
源代码重新编译执行, 时间和空间成本十分可观; 语义信息的规模与程序执行跟踪信息的规模高度相关, 当大量程
序语句均被覆盖时其大小可能和传统覆盖信息接近. 因此, 找到一种更加轻量、更有针对性的缺陷定位信息源, 并
将其使用场景泛化到真实世界的软件调试场景, 对于当前软件质量保障领域的研究十分重要. 本文所提 INSPECT

