Page 248 - 《软件学报》2026年第5期
P. 248

张添翼 等: LLM-Extractor: 基于大语言模型的软件配置间约束提取方法                                       2127


                 码  (HDFS release-2.9.2), 本文并未在源代码中找到     dfs.client.read.shortcircuit 直接控制  dfs.block.local-path-
                 access.user 的程序链路; 2) 配置间约束能够在特定程序位置找到线索, 但是未能被                  cDep  预先定义的程序模式匹
                 配, 例如配置   dfs.namenode.servicerpc-address 在未设置时系统会默认使用另一个配置       dfs.namenode.rpc-address, 我
                 们通过阅读代码研究了该条配置间约束在代码中的存在形式, 发现了如图                        11  的代码形式, 从图   11  中可以看出, 两
                 个配置经过了两次别名变换, 最后通过            getAddressesForNsIds 函数中的复杂循环逻辑完成默认值处理, 这种依赖形
                 式未能被    cDep  的预定义模式覆盖, 因此未能被        cDep  提取; 3) 配置间约束提到的配置未出现在源代码中, 例如配
                 置  dfs.http.client.failover.max.attempts 依赖于功能“WebHDFS client”, 而配置  dfs.webhdfs.enabled  控制功能
                 “WebHDFS client”的开闭, 但是我们在源代码文件中仅在           hdfs-default.xml 和  WebHDFS.md  文件中找到相关关键
                 字, 并未在  Java 源文件中找到相关变量引用. 通过对比我们发现, LLM-Extractor 可以综合分析多段文档, 从而找
                 出部分难以从源代码中获取线索的配置约束关系.










                                              图 11 HDFS  配置约束代码形式示例

                    从方法泛化能力和适配性来看, 两种方法均有一定的泛化能力. cDep                    提出的程序模式挖掘方法理论上适配大
                 部分编程语言, 所定义的控制约束、行为约束等约束模式在不同软件中也可以找到对应模式实例, 经过对目标软
                 件源码的阅读分析再通过开发对应软件的程序分析工具, 可以完成迁移应用. 但是此过程面临多种挑战, 首先                                Java、
                 C++等不同语言的语言特性差别巨大, 需要大量前期调研, 并使用                   Soot、LLVM  等不同的工具链开发程序分析工
                 具, 除此之外, 即使是相同语言编写的软件, 编译器版本差异、代码风格不同也会给程序分析工具开发带来困难,
                 例如适配不同的      LLVM  版本, 又例如需要处理代码中的特殊情况以保证程序分析工具的正常运行. 因此                         cDep  在
                 不同软件之间迁移应用需要消耗较多人力和时间, 且无法分析缺乏源代码的商业软件. 而                             LLM-Extractor 作为一
                 种轻量化的工具, 可以适用于不同的软件, 尤其对于无法获得源代码的商业软件, 可以通过分析配置文档迅速提取
                 配置约束. 因此本文认为       LLM-Extractor 具有更好的泛化能力.
                    通过多个方面的对比, 本文认为          LLM-Extractor 与  cDep  各有优劣, 有不同的适用场景和优势. cDep      侧重于尽
                 可能全面地挖掘配置之间可能存在的依赖关系, 并通过人工确认和测试的方法来获得违反依赖导致的系统行为,
                 有利于更全面地分析配置约束, 但是需要能够获得和编译源代码, 且部分配置约束在源代码中难以挖掘或者没有
                 显式的表现形式, 难以通过程序分析方法获取. LLM-Extractor 则侧重轻量化地分析各种软件, 只需获得软件的配
                 置文档, 泛化能力较强. 虽然受制于配置文档的编写质量, LLM-Extractor 在分析全面性上有一定劣势, 但是可以快
                 速获得包含确定性条件和条件影响的配置约束, 适用场景更加灵活.
                  4.5   有效性分析
                    本节主要分析      LLM-Extractor 以及评估实验可能存在的一些不足.
                  4.5.1    数据集有效性
                    由于目前并没有从软件文档中提取配置间约束的公开大规模数据集, 本文所使用的数据集均由参与本文的研
                 究人员自行构建. 由于研究人员人力有限, 本文重点研究了配置约束集中出现的配置文档, 暂未考虑可能涉及配置
                 的其他功能文档. 同时, 从文档中提取配置间约束构建标准答案集合需要耗费大量人力, 并且依赖不同软件领域的
                 专家知识, 因此人工构建数据集的过程中难免会引入主观性, 可能引入部分错误, 对实验评估产生消极影响.
                    此外, 本文选择     PracExtractor 作为对比方法, 按照  PracExtractor 论文描述复现了该方法并进行测试评估, 由于
                 涉及关键词认定和约束模板设计, 该复现方法可能与原方法有所差别, 这可能会影响实验评估.
   243   244   245   246   247   248   249   250   251   252   253