Page 59 - 《软件学报》2025年第7期
P. 59

2980                                                       软件学报  2025  年第  36  卷第  7  期


                 法结构、语义依赖和取值范围等信息. 此外, 为了提高测试的全面性和系统覆盖率, 还会对生成的配置文件进行探
                 索, 通过变更配置项的组合生成新的配置版本, 从而更全面地探索系统的不同执行路径和潜在缺陷, 增强测试的深
                 度和广度.
                    针对分布式系统的通用配置输入, 典型测试工具如                 TEA-Cloud [87] 和  ChaT [66] 等, 专注于变更待测系统的计算资
                 源使用情况, 包括物理机数量、CPU          使用数量、网络带宽和磁盘存储量等. TEA-Cloud            通过定义一套形式化的生
                 成规则, 创建涵盖不同计算资源配置的配置文件. 工具会系统地生成大量配置文件, 并在不同资源配置下反复启动
                 和测试分布式系统, 评估其性能变化. 具体来说, TEA-Cloud            通过变更计算资源和网络资源的组合, 生成不同版本
                 的配置文件, 从而模拟各种资源配置场景, 检测系统在这些场景下的表现. ChaT                      通过变异测试技术生成系统配置
                 作为测试输入. ChaT    首先建立一个基本的配置文件, 然后通过系统地变异关键配置项                      (如  CPU  分配、内存使用、
                 网络带宽等), 生成一系列变异配置文件. 工具通过这些配置文件加载系统, 评估在不同资源配置下的系统性能表
                 现. ChaT  的重点在于通过比较系统在不同配置下的性能, 检测关键配置项的变更是否会导致系统性能的显著下降
                 或异常行为.
                    针对分布式系统中特定业务逻辑相关的配置测试输入生成问题, 典型工具包括                             ConfTest  [60] 和  ECFuzz [80] .
                 ConfTest 通过分析系统的配置选项        (如权限、负载、数据配置等)、语法结构和语义约束, 建立详细的配置模型,
                 并基于此生成涵盖各种配置情况的配置文件, 包括正确配置和故意引入错误的配置文件. ConfTest 通过变更配置
                 项, 生成多种配置组合, 并利用系统自带的单元测试加载这些配置文件, 检测配置相关的逻辑错误. 对于大型分布
                 式系统, 由于配置参数众多, 配置输入组合空间非常庞大, 导致测试效率低下. 为解决此问题, ECFuzz 采取了多维
                 配置生成策略. 该策略首先基于不同参数间的依赖关系制定多样化的变异策略, 然后在每轮测试输入生成过程中,
                 从备选的配置参数集合中挑选多个参数进行组合, 以此有效降低状态空间的探索范围, 并生成有意义的配置测试
                 输入. 鉴于许多生成的配置测试输入在语义上相似且不太可能引入新的错误, ECFuzz 为了提升测试效率, 会先运
                 行分布式系统已有的单元测试输入. 此步骤旨在过滤掉那些不太可能引发错误的配置参数, 从而高效验证新生成
                 的配置参数的有效性, 优化了测试过程.

                 3.1.1.2    系统配置  on-the-fly  更新
                    考虑到提高系统的灵活性和可用性, 大多数分布式系统设计了在运行时动态修改配置选项的能力. 这样的系
                 统配置动态更新机制允许测试工具在分布式系统运行测试时, 根据实时的系统状态和性能反馈, 灵活地在线变更
                 配置, 从而更高效地探索测试的状态空间, 揭露系统中更深层次的代码缺陷, 提升测试的有效性和系统的整体安
                 全性.
                    典型配置更新测试工具         Ctests [22] 通过变异分布式系统自带的测试流程, 在线检测分布式系统的配置更新逻辑.
                 具体来说, 工具首先采集当前系统的配置文件, 包括所有配置项的当前设置值, 并记录系统的初始状态和性能指标
                 作为基准, 用于后续的配置变更效果对比. 随后, Ctests 工具通过变异技术生成多个不同的配置组合测试输入, 待
                 测系统   on-the-fly  实时更新这些系统配置. Ctests 持续监控系统的关键性能指标, 对比初始状态, 识别异常行为、
                 性能瓶颈和系统状态信息, 形成实时反馈数据. 基于反馈数据, 工具动态优化选择需要调整的配置项, 生成新的配
                 置更新输入. 针对分布式数据库系统的配置动态更新逻辑, 典型工具有                      PARACHUTE [29] . 它的关键洞察在于, 对于
                 任意一个配置选项, 无论其值是在系统启动时被加载还是在系统运行中被更新, 其对目标系统的影响应保持一致.
                 基于这一理念, PARACHUTE      通过持续变更已有的系统配置选项, 动态生成新的配置更新测试输入, 并通过比较
                 系统启动加载与运行时更新配置后的执行结果来检测结果的一致性. 若发现结果不一致, 则可能指向系统配置的
                 潜在缺陷.

                 3.1.2    用户请求负载合成
                    在分布式系统测试中, 用户请求负载合成通过公共服务接口模拟用户行为, 生成测试输入. 一方面, 这些输入
                 用于模拟不同规模的并发请求, 评估系统在高负载下的性能和稳定性, 识别性能瓶颈并为优化提供依据. 另一方
                 面, 输入需具备“攻击性”, 模拟潜在攻击场景, 测试系统的安全防护能力, 揭示如输入验证不足、权限配置错误等
                 安全缺陷, 帮助提升系统安全性. 面对分布式系统功能多样的挑战, 生成全面覆盖所有功能的测试输入是主要难
   54   55   56   57   58   59   60   61   62   63   64