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

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


                 的架构   (包括  API 规范、编程语言、网络架构、运行环境等) 不尽相同. 以多样的输入格式为例: 分布式文件系统
                 的输入主要是文件格式; 分布式数据库的输入主要是                 SQL  语句; 消息中间件的输入主要是消息包. 这些多样化的
                 输入特征对分布式系统动态测试工具提出了高可扩展性的要求. 为了有效测试这些不同系统, 动态测试工具需要
                 具备高度的可扩展性, 以适应各种分布式架构和输入格式. 目前, 一些解决方案包括自动化识别主流分布式系统
                 的  API, 并人工创建输入模型和语法解析器, 以适配特定系统需求.
                    基于这些主要挑战, 我们总结了在设计和实现分布式系统动态测试工具时需要考虑的主要因素, 如表                                2  所示.

                                          表 2 分布式系统动态测试工具需要考虑的因素

                    关键功能             内容                                   说明
                                                通常分布式系统应用节点规模很大, 100–10 000节点不等, 如何用较小的资源代价
                                   节点规模
                                                进行较为完善的测试, 需要测试工具考虑
                   待测系统启动
                                                测试工具需要考虑测试环境, 待测分布式系统测试时运行在: (1) 分布式集群、
                                   测试环境
                                                (2) Docker容器、(3) 单个物理机
                                  测试器规模         分布式系统测试工具通常包含一个或多个输入生成器, 以及一个或多个检测器
                 分布式测试器协作                       在存在多个测试器的场景下, 测试工具需要考虑测试器之间的分布式协作策略
                                   协作方法
                                                设计
                                                动态测试工具生成的测试输入应保证语法和语义正确性, 应当具有对自身生成的
                                 语法语义正确性
                                                测试输入的语法和语义进行正确性验证的能力
                                                测试工具应根据测试目标覆盖系统配置、客户请求、节点消息以及环境交互这4
                   测试输入生成        用例输入的维度        个输入维度中的各种操作. 工具应支持生成具有不同操作类型和参数组合的测试
                                                输入
                                                动态测试工具可以根据待测对象运行时信息反馈来提升测试效率, 常见的反馈信
                              支持的运行时反馈信息
                                                息有代码覆盖率、关键状态覆盖率等
                                                测试工具能够支持发现分布式系统中的各种类型的缺陷, 包括但不限于功能、安
                               支持检测的缺陷类型
                                                全、一致性、性能、鲁棒性、扩展性缺陷等
                                                动态测试工具能够支持制定不同的缺陷判定准则来识别缺陷, 如通过代码插桩、
                    缺陷检测         缺陷判断准则
                                                关键系统状态、实时日志信息和信号处理机制等
                                                动态测试工具应具备分析一定的缺陷复现分析能力. 它应能够复现缺陷的发生过
                                   复现分析
                                                程, 提取关键系统状态和日志信息, 以便于进一步地对缺陷进行修复和改进
                                                动态测试工具可以支持不同的分布式架构类型, 可以针对特定分布式系统进行测
                     工具扩      支持的分布式系统类型        试, 并充分利用其特性和功能发现漏洞
                      展性
                                   适配方法         测试工具需要能够对新的分布式系统或新版本进行适配和测试

                 2   分布式系统动态测试分类和典型工具

                    近年来, 许多分布式系统动态测试工具相继问世, 发现了大量缺陷, 显著提升了系统的可用性、安全性和可靠
                 性. 后文表  3  列出了部分典型工具及其在应对主要挑战上的支持能力. 这些工具按缺陷类型分类为功能缺陷、安
                 全缺陷、一致性缺陷、性能缺陷、鲁棒性缺陷和扩展性缺陷的测试工具. 为了捕获各类缺陷, 每个工具都需建立
                 相应的缺陷判断准则. 此外, 测试输入合成是分布式系统动态测试的核心任务之一, 不同工具针对不同输入维度设
                 计了各自的合成技术. 按照生成策略, 主要分为基于规范的生成式策略和基于种子的变异式策略. 许多工具依赖运
                 行时反馈   (如代码覆盖率、日志和关键状态) 进行动态优化. 对于测试环境的设置, 工具探讨了测试时节点规模和
                 运行环境. 在应对多测试器交互的挑战时, 测试工具开发了高效的协同机制. 由于分布式系统架构和特征各异, 大
                 多数动态测试工具在应用时需要一定的适配工作.

                 2.1   针对功能缺陷的测试工具
                    功能逻辑缺陷又称正确性缺陷, 是指待测系统没有正确的实现预定义的功能. 例如执行, 某次数据查询或配置
                 更新时系统返回错误的处理结果. 这类问题不像崩溃问题一样会造成待测系统明显的异常, 因此难以发现. 但错误
                 返回结果会严重影响业务逻辑处理和上层应用的执行正确性, 造成潜在危害.
   45   46   47   48   49   50   51   52   53   54   55