Page 227 - 《软件学报》2026年第5期
P. 227
2106 软件学报 2026 年第 37 卷第 5 期
件配置约束, 包括基于源代码静态程序分析的方法、基于配置文件样本学习的方法和基于自然语言文本分析的方
法, 本节将从这 3 个方面分别进行介绍.
1.1.1 基于静态程序分析的方法
静态程序分析方法是分析软件源代码的有效方法, 可以在不动态运行软件的情况下分析软件中与配置项变量
相关的控制流和数据流, 而后研究人员通过分析控制流和数据流, 挖掘其中存在的特定模式, 进而提取软件配置约
束. Xu 等人 [11] 最早将静态程序分析方法应用到软件配置约束提取任务中, 他们分析了多个开源软件的源代码, 总
结源代码中软件配置的存在和使用形式, 并归纳出软件配置约束种类, 例如配置类型约束、单配置合法取值约束、
多配置取值关联约束等, 在此基础上开发了静态程序分析工具 SPEX 提取上述的多种类型的配置约束. Chen 等人 [13]
使用类似的思路分析了 OpenStack 和 Hadoop 两种软件生态栈中的 16 种软件, 基于 Soot 开发了适用于 Java 和
Scala 软件配置约束提取的自动化工具 cDep. 与 SPEX 不同的是, cDep 着重分析了多个配置项之间存在的依赖关
系. Zhang 等人 [14] 聚焦软件配置影响的代码片段, 通过分析不同配置对相同代码片段的影响, 提取配置间约束关
系, 进而检测软件配置中可能存在的“沉默错误”. 文献 [15,16] 重点分析单配置合法性约束, 通过识别和定位源代
码中配置读入和加载的模块, 提取单个配置项对应的类型和合法取值. Zhou 等人 [17] 研究了 C/C++软件源代码中配
置项从配置文件加载到程序变量的过程, 开发了自动化配置变量映射工具 ConfMapper, ConfMapper 可以高效地
从 C/C++软件源代码中提取配置变量的映射信息.
基于静态程序分析的方法具有可解释性强的优势, 同时也具有较大的局限性. 首先很多商用软件的源代码没
有开源, 无法获取. 除此之外, 现代的大规模软件系统往往使用多种编程语言组合开发, 在这种情况下, 程序分析方
法面临分析规模受限、语言特性差异较大的问题.
1.1.2 基于配置文件样本学习的方法
生产环境中的配置文件样本是进行软件配置分析的重要数据来源, 有部分研究工作专注于从海量的配置文件
样本中挖掘潜在的配置约束. Zhang 等人 [18] 通过经验研究分析了配置文件样本中的配置约束类型和特征, 总结了
一套从样本中提取配置约束的启发式模板, 使用这套模板从配置文件样本中提取软件配置之间、软件配置与系统
环境变量之间的约束关系. Chen 等人 [19] 的方法与 Zhang 等人类似, 使用启发式模板提取配置约束规则, 不过他们
更加聚焦 Web 应用程序不同软件组件的配置之间的约束关系. ConfigC [20] 和 ConfigV [21] 引入了概率统计的方法,
通过分析配置文件样本数据, 挖掘不同配置项的数值特征, 并通过数值特征推断配置类型等属性信息, 最后基于预
定义模板提取配置约束. 还有一些研究工作 [22,23] 从配置文件版本演化数据、版本维护历史数据等版本数据中挖掘
配置频繁模式, 进而提取配置约束. ConfEx [24] 则应用了文本相似度匹配算法, 依据配置相关的关键字字典, 识别海
量配置文件中的配置约束规则.
基于配置文件样本挖掘的方法, 其优势在于不受特定编程语言的限制, 但具有较强的局限性, 一方面这类方法
需要大量的历史配置文件样本, 方法效果依赖样本数据质量. 另一方面, 这类方法依赖预定义模板, 需要大量专家
知识的预先输入, 效果受预定义模板的质量影响较大.
1.1.3 基于自然语言文本分析的方法
有少数研究工作基于软件配置相关的自然语言文本提取配置约束. ConfTypeInferer 是 Xu 等人 [25] 开发的根据
配置项名称推断配置项类型的工具, 推断依据是事先归纳的配置类型分类树. PracExtractor 是 Xiang 等人 [26] 开发
的配置约束提取工具, Xiang 等人首先挖掘配置推荐类型语句的词频特征和语法结构特征, 通过配置推荐语句筛
[27]
选和模式匹配两个步骤提取配置推荐规则. ConfInLog 基于静态分析方法分析日志打印点, 筛选配置项相关的日
志模板, 随后从软件日志包含的文本语料中提取配置约束关系. Mandal 等人 [28] 的方法思路和 Xiang 等人类似, 但
是 Mandal 等人在语句筛选阶段应用了预训练模型 BERT, 使用大量标注数据来训练分类器筛选配置规则相关的
语句, 后续依然使用模式匹配方法提取配置约束规则.
由于自然语言信息结构化较差, 分析难度大, 目前的研究相对较少, 且已有方法高度依赖人工预先定义约束模
板, 这对研究人员在相关软件领域的知识水平提出了较高要求. 同时, 已有工作只能分析单个配置相关的配置条
件, 且对于语句逻辑的分析能力较差, 无法适应多种多样的自然语言表达形式.

