Page 174 - 《软件学报》2026年第7期
P. 174
宋壹 等: 基于异常检查点植入的软件缺陷定位方法 2859
方法需要解决的一项新的挑战.
为此, 提出如下方案, 解决检查点自动植入情境下的程序语句风险值计算问题. 对于待测错误程序中的一条程
序语句 s, 其风险值 Suspiciousness s 由公式 (1) 计算:
n ∑
i
Suspiciousness = Sus +Assist_Sus (1)
s s s
i=1
i
其中, Sus 是基于第 i 条失败测试用例计算得到的语句 s 的风险值, 其通过对比第 i 条失败测试用例的失败执行 e i
s
n ∑
i
上的 ets_fail i 和在相应伪正确版本上通过执行 pe i 的 ets_pass i , 并分析由此确定的分歧点 bp i 计算得到; Sus 是
s
i=1
在 n 个失败测试用例上计算的语句 s 的风险值之和, 其将作为 INSPECT 为程序语句 s 所计算风险值的主要部
分 (将在第 2.4.1 节中具体介绍). Assist_Sus s 是通过在待测错误程序上应用行级缺陷定位方法得到的语句 s 的风险
值, 作为 INSPECT 为程序语句 s 所计算风险值的辅助部分, 以缓解多条语句可能具有相同风险值造成的 Tie 问题
(将在第 2.4.2 节中具体介绍).
2.4.1 基于分歧点分析的语句风险值计算
运行第 i 条失败测试用例时, 程序语句 s 在一对失败执行 e i 和通过执行 Sus 由公式 (2) 计算:
i
s
pe i 上的风险值
1, s ∈ Suspicious_Group
i i
Sus = (2)
s
0, s < Suspicious_Group i
其中, Suspicious_Group 由在 e i 和 pe i 上被判定为可能含有缺陷的语句组成, Suspicious_Group 中的语句以表 1
i i
中以“Statements_Begin”“Statements_End”开头的行和 Statements_Ending 为单位, 代表 ets_fail i 在异常触发流中
i
i
以独立受检的进入和退出为分界的一组被执行程序语句 (记为 Statements ). 判断 Statements 是否被包含在
x
x
Suspicious_Group 中的规则如公式 (3) 所示:
i
i
End_Diff > 0 or
x
i
i
Statements ∈ Suspicious_Group i , if End_Diff = 0 and (Sit i = 2.2 or 2.3 or 2.4) or (3)
x
x
i i
End_Diff = 0 and Begin_Diff = 0 and Sit i = 2.5
x
x
i
具体而言, 根据 ets_fail i , 设 e i 在 Statements 前进入了 Begin_Count 个独立受检, 退出了 End_Count 个独立受
i
i
x
x
x
i
检 (以表 1 中异常触发流为例, 假设其展示了 ets_fail i 的完整结构, 则对于 Statements_End_2, 其 Begin_Count 值
x
为 2、 End_Count 值为 1). 同时, 设 e i 在执行到 bp i 为止进入了 Begin_Count_bp i 个独立受检, 退出了
i
x End_Count_bp i
个独立受检 (考虑到 bp i 自身是一处退出独立受检的位置, 计算 End_Count_bp i 时也包含 bp i 所在的独立受检退
出). 若对比 ets_fail i 和 ets_pass i 时未能确定 bp i , 则 Begin_Count_bp i 和 End_Count_bp i 的值为 0. 公式 (3) 中的
i i i
Begin_Diff 和 End_Diff 分别代表 e i 在 bp i 、 Statements 前进入和退出的独立受检数量的差值, 以公式 (4)、(5) 进
x
x
x
行计算:
i
Begin_Diff = Begin_Count_bp i − Begin_Count i (4)
x x
i
End_Diff = End_Count_bp i −End_Count i x (5)
x
下面对公式 (3)–(5) 的设计进行详细解释. 公式 (3) 表明, 如果满足 3 类条件中的任意一个, 则 Statements 被判
i
x
Suspicious_Group . 其中, 第 1 i Statements 在 i bp i 前被执行, 这部分语句的执行可
定属于 i 类条件 End_Diff > 0 代表 x
x
能导致 e i 的执行状态受到感染, 并在 i Suspicious_Group 中,
bp i 被观察到. 因此, 满足该条件的
Statements 被包含在
x i
成为可疑语句. 第 2 类条件中, Sit i 代表分歧点确定阶段 (第 2.3.2 节) 中捕获 bp i 对应的子情况, 例如, 若 bp i 在子情
况 2.2 下被捕获, 则 Sit i 的值为 2.2, 依此类推. 当 bp i 在子情况 2.2、子情况 2.3 或子情况 2.4 下被捕获时, 即使
End_Diff 为 i x 0, Statements 仍被认为包含于 Suspicious_Group 中, 成为可疑语句. 具体而言, End_Diff 为 i x 0 可能意
i
i
x
Statements 位于 bp i 与 bp i 之后的第 1 次独立受检退出之间, 也可能意味着 ets_fail i 中不存在任何独立受检.
i
味着 x
考虑到情况 2 下捕获的 bp i 是基于对独立受检数量而非异常触发信息的分析得到, 在上述两种可能中, 缺陷语句
i i
同样可能存在于满足 End_Diff = 0 的 Statements 中. 第 3 类条件针对的是子情况 2.5, 在该类情况中, 由于仅在
x
x

