Page 292 - 《软件学报》2026年第7期
P. 292
王海宁 等: 融合因果效应的高效软件产品线缺陷定位方法 2977
P(s) 不包含交汇节点的后代且图经传递约简后无额外祖先-后代混杂, 路径仍
其后代被条件化才能打开路径; 由于
被阻断. 因此, P(s) 阻断 s 的所有后门路径成立. 接着, 设不再对 P(s) 中的一个节点 v 进行条件化, 这将导致暴露一
条长度为 2 的后门路径 s ← V → Y, 因此 P(s) 中缺少任一节点都不再阻断全部后门路径, 证明最小性. 综上, P(s)
是满足后门准则的最小调整集.
命题 2. 顺序可忽略性. 约简因果图 G 在固定输入与无并发环境下, 满足处理独立性和中介独立性.
′
解释: 显然, P(s) 包含了全部可影响 s 与 Y 的上游状态变量. 不同于其他问题, 软件程序是确定性转移系统, 这
P(s) 后 s 的取值由控制-数据依赖唯一确定, 即处理独立性成立. 同理, 给定 M(s)
意味着固定 s 和 P(s), 子节点集合
的执行状态完全由控制-数据依赖决定, 且程序输出 Y 仅再受下游状态影响, 因此中介独立性亦成立.
命题 3. 无交互性. 对于处理变量 T、中介变量 R = (R 1 ,R 2 ,...,R k ) 与结果变量 Y, 在给定协变量 X 的条件下,
2
∂ Y
= 0, j = 1,2,...,k, 即 T 对 Y 的边际效应不随任何单个中介变量 R j 的取值而变化, 处理效应与中介效应可加
∂T∂R j
而无交互项.
′ m ∈ M(s) 的唯一交汇节点是测试结果节点 Y. 这意味着不存在既受 m 共
解释: 在 G 中, s 与每个子节点 s 又受
同影响的第 3 节点; 也不存在 s ← m → s 型的交汇节点. 意味着 s 与 m 之间无公共子后代. 此外, 所有 s → Y 的直
s → m → Y 的间接路径仅在 Y 会合, 无其余交汇节点. 从图论意义上, 这说明两条路径可加而非相乘或相
接路径与
2
∂ Y
′
互调节, 意味着 = 0. 为此, 无交互性假设在 G 中成立, 可使用线性可加模型估计直接效应与间接效应, 故
∂T s ∂R m
公式 (4) 可修改为:
Y = α+τT +βX +υR+ε (5)
其中, R 为中介变量向量, υ 表示中介通路系数.
命题 4. 可观测性. 约简因果图 G 中的所有节点均对应可测随机变量.
′
解释: 语句节点可通过频谱信息记录其执行标志{0, 1}, 其父节点与子节点皆来源于 PDG, 可在一次执行中被
唯一确定. 此外, 结果节点由测试通过/失败输出直接给出. 因此, 提出的约简因果图中不存在任何未测量的潜在变
量或缺失依赖, 满足因果推断所需的可观测性前提.
综上, 由于命题 1–4 同时成立, 则处理语句对测试结果的因果效应可由公式 (5) 得到. 并且基于公式 (5) 得到
的因果模型相比于基于公式 (4) 的因果模型, 其误差项 ε 中的方差更小. 因为公式 (5) 考虑了缺陷在程序间的传递
影响, 更适合软件的缺陷定位任务.
为更清晰地说明提出因果图模型的构造细节, 用程序 transfer (见第 3 节) 进行说明, 其完整的 PDG 如图 3(a)
所示, 每个节点的值对应程序中语句的行数, 两个节点间的有向边表示语句间的依赖关系. 以语句 11 作为处理节
点为例, 提出的约简因果模型如图 3(b) 所示, 保留语句 11 及其父节点和子节点的依赖关系, 并新建测试结果变量
节点 Y, 构建所有到 Y 的有向边. 要计算变量节点 11 对节点 Y 的因果效应, 首先利用后门准则确定混杂因子. 显
然, 节点 8 阻断了节点 11 到 Y 的全部路径, 因此可得到后门路径 11←8→Y. 接着, 将节点 12、13 和 15 作为中介
变量纳入节点 11 对节点 Y 的因果效应评估中.
与现有技术不同的是, Baah 等人 [26] 提出的因果模型如图 4 所示, 该模型仅保留节点 11 的父节点来约简因果
关系. 尽管这种方式得到的因果图模型可以消除环, 并减轻混杂因子对因果效应评估带来的影响. 然而, 与其他领
域不同的是, 缺陷定位任务中的观察数据由程序的执行过程得到. 因此, 由处理节点到测试结果节点的因果效应可
能通过中间节点的传导. 换言之, 处理节点除了自身对结果节点的直接效应, 还可能通过子节点传递间接影响. 例
如, 在 transfer 程序中, 语句 11 导致测试无法通过是因为它的执行进一步触发了语句 12 和 13 的执行. 因此, 本文
提出的约简因果图模型将处理节点的子节点作为中介变量, 将其纳入因果效应计算中以减少误差项 ε 中的方差,
进而提升了评估的准确性.
综上所述, 对于每个未通过的产品系统, 每一条可疑语句均可以基于提出的因果图模型计算出对测试结果的
因果效应. 然而, 由于不同产品系统具有不同的程序语句及依赖关系, 导致可疑语句在不同产品中会得到不同的因

