Page 49 - 《软件学报》2025年第7期
P. 49
2970 软件学报 2025 年第 36 卷第 7 期
测试
测试器 1 核心组件
接口 1
启动待测
分布式系统 测试 测试用例
测试器 2 生成器
接口 2 分布式测试器
协作策略
…
漏洞检测器
测试
测试器 n
接口 n
图 3 分布式系统动态测试一般架构
1.3.2 分布式系统测试挑战
结合测试需求和此动态测试框架, 对分布式系统进行动态测试的挑战主要包含如下几个方面.
(1) 待测系统启动设置. 在分布式系统动态测试中, 如何快速且准确地自动化启动待测系统是一大挑战. 与传
统程序相比, 分布式系统环境更复杂, 配置更繁琐. 测试大规模分布式应用 (如 GFS、AWS) 时, 节点数量可达 100–
10 000 个, 直接在应用环境中测试可能带来不可逆损害, 而模拟相同规模的环境消耗大量资源. 因此, 如何在有限
资源下进行全面测试, 降低成本并保障测试广度和深度, 是关键难题. 此外, 测试环境选择对流程影响重大. 一些工
具使用物理机器搭建分布式环境, 接近真实场景但成本高且维护困难. 另一些工具利用 Docker 容器等虚拟化技
术, 灵活配置和扩展测试场景, 降低资源消耗, 但可能引入虚拟化偏差. 还有工具将分布式系统转为单机应用进行
测试, 适合精确调度控制, 但无法全面反映分布式特性. 因此, 平衡资源消耗与测试准确性、优化测试环境成为动
态测试的关键挑战.
(2) 分布式测试器协作. 对分布式系统进行动态测试时, 有时需要部署多个测试器在分布式环境下对不同节点
进行探测. 在此场景下, 设计和实现分布式测试器之间的高效协作策略是主要挑战之一. 根据分布式测试器的协作
架构, 通常可以分为两种: 第 1 种是中心化的分布式协作策略, 即存在一个统筹测试器作为中心化协调者, 负责汇
总分析测试结果, 并对其他测试器进行任务分配、运行调度和沟通协调. 第 2 种是去中心化的点对点分布式协作
策略, 即不存在统筹测试器, 每个测试器之间直接进行消息通信、任务协调和信息共享. 中心化协作策略效率高,
任务和数据统一处理分配, 但其可扩展性较弱, 需要新增缺陷检测时改动较大. 点对点协作策略效率相对较低, 但
可扩展性高, 任意新增测试器可以方便快捷地插入和拔出. 因此, 在分布式系统动态测试中, 选择适合的协作策略
至关重要, 以平衡测试效率和系统扩展性.
(3) 高效的测试输入生成. 分布式系统测试面临多维度输入带来的语法语义多样性和组合空间庞大的挑战. 与
传统程序测试仅涉及单一输入不同, 分布式系统的缺陷威胁来自 4 个维度: 系统配置、用户请求、节点消息和环
境交互. 每个维度包含不同的语法和语义, 如系统配置涵盖操作系统、网络和节点规模; 用户请求涉及增删改查操
作; 节点消息包含握手、心跳、共识协议等; 环境交互涉及网络延迟、硬盘和内存故障等. 此外, 输入参数的取值
范围及排列组合可能影响不同执行路径. 由于分布式系统处理大规模数据和高并发操作, 测试需验证系统的性能
和稳定性. 输入空间巨大, 全面覆盖所有测试组合极为困难. 现有工具通常固定 3 个维度的输入, 重点在一个维度
上进行优化探索. 如何协调多维度输入并高效探索测试空间, 已成为分布式系统动态测试的主要挑战之一.
(4) 精准的缺陷检测. 在分布式系统测试中, 不同的测试需求带来不同的挑战. 分布式系统的缺陷通常分为
6 类: 功能缺陷、安全漏洞、一致性缺陷、性能问题、鲁棒性缺陷和扩展性缺陷. 多样的缺陷类型使得设计精准
的动态测试检测器变得复杂. 目前的工具通常只针对一至两类缺陷设计检测器. 例如, 针对逻辑缺陷需人工编写检
测逻辑, 判断异常行为; 针对内存安全漏洞, 使用 AddressSanitizer 等工具检测内存使用; 一致性缺陷通过一致性模
型评估分布式行为一致性; 性能问题则通过监控性能指标, 结合大数据和 AI 分析异常; 鲁棒性缺陷利用差分测试
对比故障恢复前后的状态; 扩展性缺陷则通过性能测试评估不同配置下的表现. 因此, 如何根据具体测试需求和系
统特征设计出精准的缺陷检测器至关重要.
此外在动态测试工具的实际应用上, 我们还需要面临工具可扩展性的挑战.
(5) 工具扩展性. 当测试工具适配于不同待测分布式系统时, 需要应对可扩展性的挑战. 不同分布式系统使用

