Page 284 - 《软件学报》2026年第5期
P. 284
刘书宁 等: 基于代码变更语义分析的缺陷隔离方法 2163
使得缺陷隔离的准确性降低. 禁用上下文收集器时, 决策模型无法获取完整的代码上下文信息, 导致模型对代码变
更的理解缺乏背景支持, 由于上下文信息不足, 某些变更可能被错误合并或拆分, 影响隔离效果. 禁用评估消息生
成器时, 缺乏对拆分结果的动态评估和优化过程. 由于提交日志未经过语义分析, 包含多个开发活动的子提交集合
无法被进一步拆分或优化, 这导致了生成的子集更为冗余和粗糙, 对缺陷隔离的精确度和子集的粒度都造成不利
影响.
表 5 在 Defects4J 数据集上增量调试方法与 DISAC 方法的实验结果 (共 809 条数据)
低位区间 (1–4) 次低区间 (5–8) 次高区间 (9–12) 高位区间 (13–16) 离群值区间 (17+) 全部数据
共419条 共161条 共85条 共63条 共81条
方法
#成功 约减率 #成功 约减率 #成功 约减率 #成功 约减率 #成功 约减率 #成功 约减率
(%) (%) (%) (%) (%) (%)
359 24.19 106 39.52 44 43.22 34 45.16 32 52.87 575 29.88
DISAC ¬preprocess
387 24.89 137 47.61 59 49.14 45 55.62 47 64.01 675 35.24
DISAC ¬context
367 24.72 119 41.95 45 46.24 37 47.43 31 50.60 599 31.70
DISAC ¬evaluate
389 20.03 117 30.93 40 31.77 29 28.51 30 35.63 605 25.28
DISAC SC
DISAC LLM 301 21.15 81 33.84 36 39.62 23 41.20 18 47.06 459 26.55
表 6 在回归缺陷数据集上增量调试方法与 DISAC 方法的实验结果 (共 1 025 条数据)
低位区间 (1–46) 次低区间 (47–92) 次高区间 (93–138) 高位区间 (139–176) 离群值区间 (177+) 全部数据
共643条 共142条 共67条 共51条 共123条
方法
#成功 约减率 #成功 约减率 #成功 约减率 #成功 约减率 (%) #成功 约减率 #成功 约减率
(%) (%) (%) (%) (%)
DISAC ¬preprocess 451 37.35 63 38.44 30 27.71 17 22.30 25 14.26 586 33.81
485 39.38 76 41.10 43 31.62 24 24.46 38 18.02 666 36.53
DISAC ¬context
DISAC ¬evaluate 446 37.15 69 39.14 27 27.20 15 20.11 21 11.41 578 32.65
435 23.25 51 10.13 6 5.12 13 17.01 4 2.57 564 19.02
DISAC SC
384 30.25 48 34.92 19 25.16 7 16.55 6 10.03 464 27.48
DISAC LLM
当变更拆解部分整体用 SmartCommit 算法替换时, 成功隔离数量在部分区间上差别不大, 但在约减率上有较
大下降, 进一步分析发现, SmartCommit 拆解时仅考虑依赖关系, 未能充分考虑变更之间的语义关系, 导致拆解粒
度较大, 其生成的子集通常包含更多代码块, 从而更容易通过编译, 但缺陷隔离的精度和拆分子集的粒度会下降,
导致约减率有较大下降, 降低缺陷隔离结果的准确性. 当变更拆解部分只使用大语言模型时, 成功率和约减率上均
有所下降, 其中约减率下降幅度相对较小. 这是因为随着变更规模的变大, 大语言模型难以准确建模跨结构或跨模
块的依赖关系, 导致相关变更之间的关系被忽略, 影响隔离准确性并降低整体成功率. 但因缺乏依赖关系, 大语言
模型拆解的粒度较细, 整体约减率下降幅度较小.
以上消融实验表明, 依赖关系分析与大语言模型在代码拆解中具有互补优势, 其协同使用对提升缺陷隔离的
效果具有显著作用.
4.4 RQ4 实验结果与分析
● RQ4: DISAC 方法与增量调试方法在辅助缺陷根因确定任务中的作用和价值如何?
本文设置的用户实验, 旨在验证 DISAC 方法在辅助缺陷根因确定任务上的作用和价值. 实验共招募了 10 名
具有 4 年以上 Java 软件开发经验的研究生, 他们被随机分为 A 组和 B 组. 实验数据为 10 个真实缺陷引入提交
(标记为 T1–T10), 覆盖了不同的变更代码块数量区间, 每位参与者需要在已知缺陷隔离结果的基础上, 进一步确定
引发缺陷的根本原因并完整描述, 每个任务的完成时间限制为 20 min 内. 为了确保实验公平性, 实验对缺陷引入
提交的隔离算法进行了交叉验证, 具体来说, A 组在任务 T1–T5 中使用 C2D2 算法进行缺陷隔离, 而在任务
T6–T10 中使用 DISAC 方法隔离缺陷; B 组则反向安排, 在任务 T1–T5 中使用 DISAC 方法, 在任务 T6–T10 中使

