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 控制, 而通过人工细致阅读代
   242   243   244   245   246   247   248   249   250   251   252