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

陈元亮 等: 分布式系统动态测试技术研究综述                                                          2969


                 1.3   分布式系统动态测试需求与挑战

                 1.3.1    分布式系统测试需求
                    由于分布式系统具有多样的威胁输入维度和种类繁多的缺陷, 对其进行测试时需要考虑的测试需求也更加复
                 杂. 根据测试目的, 通常分布式系统的测试需求主要可以分为以下                    6  个方面.
                    (1) 功能性测试. 旨在验证系统是否按预期工作, 保障各模块和服务的正确执行. 主要包括业务逻辑测试、节
                 点通信测试和配置逻辑测试. 业务逻辑测试检查用户请求的处理是否正确, 如存储、检索和删除操作; 节点通信测
                 试保障各节点之间的通信正常, 包括消息传递、同步和回包的正确性; 配置逻辑测试则验证系统的配置管理和处

                 理逻辑是否正确, 保障配置项能够被正确解析、应用和管理.
                    (2) 安全性测试. 旨在检查分布式系统的安全性并挖掘潜在漏洞. 主要包括崩溃安全测试、数据保护测试和访
                 问控制测试. 崩溃安全测试检测系统是否存在内存安全、断言异常等导致系统崩溃的问题. 数据保护测试验证系
                 统的加密、敏感数据遮蔽和隐私安全存储等功能. 访问控制测试检查系统的访问权限、身份验证和授权等机制.
                 通过这些测试, 保障分布式系统在各种条件下的安全性和数据保护能力.
                    (3) 一致性测试. 目的是保障系统在分布式环境下多节点或多副本之间的数据一致性和事务完整性. 它包括故
                 障一致性测试、并发一致性测试和拜占庭攻击测试. 故障一致性测试验证系统在节点崩溃、网络分区或磁盘故障
                 等情况下, 能否保持数据和事务的一致性. 并发一致性测试检查系统在多节点或多进程并发访问时, 能否正确处理
                 事务, 避免数据竞争和死锁问题. 拜占庭攻击测试验证系统在存在恶意或不可信节点时, 是否能通过拜占庭容错机
                 制维持共识一致性. 通过这些测试, 保障分布式系统在复杂环境中可靠运行.
                    (4) 性能测试. 旨在评估分布式系统在不同负载和压力下的响应时间、吞吐量和资源使用情况. 性能测试可分
                 为读写性能测试、并发访问测试和负载测试. 读写性能测试评估读写操作的响应时间、吞吐量和资源消耗. 并发
                 访问测试检查多个用户同时访问系统时的并发性能和资源管理情况. 负载测试评估系统在处理大量流量时的表
                 现, 确定系统在重载或接近预期负荷极限时的性能瓶颈. 这些测试有助于在系统部署前合理配置资源, 保障系统在
                 各种负载条件下的高效运行.
                    (5) 鲁棒性测试. 旨在验证分布式系统在各种条件下的可用性和容错能力, 包括容错和恢复测试、高可用性测
                 试、数据备份和恢复测试以及错误处理测试等. 容错和恢复测试模拟系统故障和崩溃情况, 验证容错和恢复机制.
                 高可用性测试检查系统的冗余和故障转移机制, 保障高可用性. 数据备份和恢复测试验证系统的备份和恢复功能,
                 保障数据完整性和可恢复性. 错误处理测试评估系统在遇到异常和错误时的处理能力和错误消息提示. 这些测试
                 保障分布式系统在各种复杂环境交互下保持稳定和高效.
                    (6) 扩展性测试. 旨在验证分布式系统在增加资源             (如硬盘、节点等) 时的表现, 保障其能够有效扩展以应对增
                 长的需求. 这类测试评估系统在添加更多节点后、能否处理更多请求或存储更多数据时, 是否能够保持或提高性
                 能和稳定性. 具体测试内容包括评估系统的水平扩展能力、负载分布均衡性、节点动态加入和移除的处理能力以
                 及资源利用率. 通过扩展性测试, 可以识别系统在扩展过程中的潜在瓶颈, 保障系统能够在各种扩展条件下高效运
                 行, 并满足未来的增长需求.
                    除了以上    6  个方面, 分布式系统还有其他的测试需求. 譬如不同版本之间的兼容性测试、应对突发负载的弹
                 性伸缩测试, 以及系统从完全关闭到启动的冷启动测试等需求, 都需要测试工程师针对这些需求制定相应的测试
                 手段和开发测试工具.
                    因此, 针对这些需求, 分布式系统动态测试的总体方向是生成与待测性质相关的测试输入, 并设计相应的测试
                 准则进行检测. 图     3  展示了典型的分布式系统动态测试流程, 通常由一个或多个测试器协作完成. 每个测试器包含
                 两个核心组件: 测试用例生成器和缺陷检测器. 动态测试的总体步骤为: (1) 根据系统配置启动待测分布式系统;
                 (2) 配置测试接口并启动一个或多个分布式测试器; (3) 测试器生成大量测试用例, 通过接口输入系统执行; (4) 缺
                 陷检测器持续监控系统行为, 依据测试准则判断是否异常, 生成漏洞报告.
   43   44   45   46   47   48   49   50   51   52   53