Page 247 - 《软件学报》2026年第5期
P. 247
2126 软件学报 2026 年第 37 卷第 5 期
的配置条件和条件影响. 鉴于两者在方法适用场景和输出内容上的差异, 接下来本文将进一步从多个方面对两者
进行对比分析.
表 13 HDFS 基本情况 表 14 HDFS 实验情况比较
内容 信息 方法 工具输出结果 数量
软件名称 HDFS 提取配置间约束数量 37
版本 2.9.2 生效约束 33
软件配置个数 425 LLM-Extractor (GPT-4o) 行为约束 2
配置文本语句总数 1 075 建议约束 2
代码行数 644k 提取配置依赖数量 93
控制依赖 51
行为依赖 20
cDep
取值依赖 11
重写依赖 2
默认值依赖 9
4.4.3 LLM-Extractor 与 cDep 的对比分析
从方法适用的场景来看, 本文发现 cDep 与 LLM-Extractor 有明显区别. cDep 适用于能够获取完整源代码的开
源软件, 而 LLM-Extractor 适用于各种开源软件或闭源商业软件. 而从工具输出的提取结果的形式来看, 二者也有
显著的不同, cDep 根据配置的代码逻辑进行依赖分类, 该分类以特定的程序模板作为依据, 体现了配置变量影响
程序控制流、数据流的情况. 从 cDep 论文和实验结果中可以看出, cDep 所提取的配置约束主要反映程序逻辑, 若
要进一步探索违反约束关系可能导致的后果, 需要进一步测试, 这部分在 cDep 原文献中也有提及. 且 cDep 自动化
工具只能输出约束出现的函数、类以及涉及的配置, 例如提取结果“Control Dependency, dfs.balancer.keytab.enabled,
dfs.balancer.keytab.file, org.apache.hadoop.hdfs…Balancer, *”中指明了 dfs.balancer.keytab.enabled 和 dfs.balancer.
keytab.file 之间存在控制依赖, 但是进一步判断依赖条件以及违反依赖的后果, 需要进一步人工分析和测试验证.
因此本文认为 cDep 所提取的约束属于运维流程中的中间数据, 无法直接自动化获得约束条件以及违反后果. LLM-
Extractor 所提取的约束是整合多段配置文档综合分析的产物, 因此 LLM-Extractor 可以直接提取配置约束的明确
条件并输出违反该条件的后果, 例如“dfs.datanode.peer.stats.enabled==false LeadTo NotEffect(dfs.datanode.outliers.
report.interval)”中包含明确的配置条件和后果, 因此 LLM-Extractor 所提取的约束是宏观的、可静态验证的.
通过上述的输出内容分析, 本文认为两者所提取的配置约束维度不同, 无法在数量上直接对比分析. 因为 cDep
聚焦于提取代码中的约束模式, 即微观层面约束, 例如, if(editsDirs.isEmpty()){… return getStorageDirs(conf,
“dfs.namenode.name.dir”)} //(editsDirs store the value of dfs.namenode.edits.dir), cDep 则认为 dfs.namenode.
edits.dir 和 dfs.namenode.name.dir 之间存在一条控制依赖, 但是由于配置在源代码中会多次出现, 该代码片段无法
说明这 dfs.namenode.edits.dir 和 dfs.namenode.name.dir 在源代码的所有位置都满足控制关系, 因此无法断言在整
个软件运行的层面上, dfs.namenode.name.dir 被 dfs.namenode.edits.dir 控制. 而 LLM-Extractor 所提取的配置约束
其来源是开发人员撰写的软件文档, 其中记录的配置影响具有宏观意义. 因此本文认为两者提取配置约束的维度
不同. cDep 侧重在尽可能全面地挖掘源码中配置项之间的依赖关联, 而 LLM-Extractor 侧重在尽快提供运维人员
可直接检查的约束规则以及违反后果.
为了能在同一维度对比两种方法, 本文采用宏观到微观映射的方式, 逐条分析 LLM-Extractor 所提取的配置
间约束, 并在 cDep 的提取结果中搜索是否存在对应的程序模式, 若不存在, 则分析不存在的原因. 通过对比分析,
本文发现在 LLM-Extractor 所提取的 37 条配置间约束中, 有 11 条 (29.7%) 可以在 cDep 的实验结果中找到相关配
置依赖, 分析发现, 这类约束在源代码中具有清晰的代码模式. 而有 26 条 (70.3%) 配置间约束未能在 cDep 的实验
结果中找到对应配置依赖, 通过分析本文发现主要有 3 种情况: 1) 配置间约束通过功能依赖传递, 而这种复杂的依
赖关系难以通过控制流和数据流分析技术挖掘, 例如 dfs.block.local-path-access.user 配置依赖于功能“short-circuit
local read”, 而功能“short-circuit local read”的开闭由配置项 dfs.client.read.shortcircuit 控制, 而通过人工细致阅读代

