Page 64 - 《软件学报》2025年第7期
P. 64
陈元亮 等: 分布式系统动态测试技术研究综述 2985
的深度, 优先选择深层路径的故障序列作为测试迭代的种子. 在分布式系统的超时鲁棒性缺陷测试中, Chronos 的
表现优于 Fate 和 CrashFuzz.
3.2 系统状态感知技术
系统状态感知技术是确保测试有效性的核心, 起着承上启下的关键作用. 正如图 5 所示, 系统感知器实时监控
分布式系统的实际行为状态数据, 这些数据一方面作为反馈信息, 用于优化测试输入生成, 应对庞大的输入搜索空
间; 另一方面, 为缺陷判断准则提供精准依据. 分布式系统代码逻辑复杂, 涉及业务逻辑、心跳机制、分布式共识
机制、数据容灾等系统稳定性功能. 在面对百万级代码的分布式系统时, 如何高效定位目标行为状态成为测试工
具的挑战. 目前, 主流的分布式系统状态感知技术主要包括 3 类: (1) 基于日志分析的状态感知: 通过分析系统生成
的日志信息来感知系统状态. (2) 基于源码的插桩感知: 在源码中插入桩代码, 系统运行时收集状态信息. (3) 基于
API 的动态获取: 通过系统 API 实时查询获取系统关键状态信息.
测试用例生成器 漏洞监视器
输入执行
待测分布式系统
测试用例 待测分布式系统 漏洞判定器
实时收集
① 引导反馈 ② 实际数据
状态感知器
生成策略 状态感知器 判定准则
图 5 分布式系统动态测试核心流程
3.2.1 日志分析
图 6 展示了分布式系统动态测试中基于节点日志信息的状态感知流程. 首先, 通过多个日志收集器实时收集
各节点的日志信息, 并进行统一格式化, 方便后续分析. 接着, 各日志收集器将日志汇总传入工具 (如 Logstash) 进
行解析, 过滤无关信息并提取关键内容. 日志处理可以通过预定义规则自动化, 也可借助 AI 模型辅助分析. 最后,
动态测试工具基于提取的关键状态信息感知系统的实时状态, 并据此分析系统行为, 判断其是否异常.
分布式节点 1 日志收集器
分布式节点 2 Logstash
日志收集器 状态感知 行为分析
分布式节点 3
Logstash
… 日志收集器
分布式节点日志 格式化日志信息 日志解析、过滤 关键状态获取
图 6 基于日志分析的状态感知基本流程
基于日志分析的系统感知技术实现相对简单, 因其非侵入式设计不需要访问待测系统的源码, 被广泛应用于
各种动态测试工具中. 以典型工具 CrashTuner [20] 为例, 它通过解析运行时产生的日志数据, 识别和收集系统中关键
节点的引用变量及其对应的运行时值. 具体来说, CrashTuner 的开发者首先人工详细审查了被测系统生成的所有
日志条目, 发现大多数分布式系统采用 Log4j、SLF4J 等流行的日志记录库, 这些库定义了 fatal、error、warn、
info、debug 和 trace 等级别的通用日志接口. 因此, CrashTuner 通过简单匹配的方法查找调用名称与这些日志接
口名称, 高效地识别出系统的关键日志记录点. CrashTuner 为每个分布式节点分别部署了一个日志分析器实例, 这
些实例能够并行地监视并收集关键变量信息, 实时从日志数据中挖掘出分布式系统的元信息 (即引用系统高级状
态信息的变量, 例如, 节点或任务的实例) 及其之间的依赖关系, 从而有效推导出系统的高层状态信息. 基于这些实
时信息, CrashTuner 一方面决策引导可能触发错误的故障注入点, 另一方面识别日志中的异常信息来判断是否出
现缺陷.
然而, 基于日志分析的状态感知技术存在信息获取不全的问题, 往往只能捕捉较为宏观的系统状态, 无法覆盖

