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 一方面决策引导可能触发错误的故障注入点, 另一方面识别日志中的异常信息来判断是否出
                 现缺陷.
                    然而, 基于日志分析的状态感知技术存在信息获取不全的问题, 往往只能捕捉较为宏观的系统状态, 无法覆盖
   59   60   61   62   63   64   65   66   67   68   69