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

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


                 are  evaluated.  The  findings  show  that  multidimensional  input  generation  significantly  enhances  testing  efficiency.  Finally,  the  study
                 discusses  emerging  trends  and  future  directions  in  dynamic  testing  of  distributed  systems,  aiming  to  address  their  inherent  challenges  and
                 improve testing outcomes.
                 Key words:  distributed system; dynamic testing; bug detection; fuzzing; fault injection
                    随着数据和计算向云端迁移, 大规模分布式系统已成为现代计算的核心, 被广泛应用于分布式存储、计算框
                 架和云原生微服务架构等领域           [1,2] . 典型代表包括云计算平台      (如  AWS、Google Cloud)、大数据处理系统       (如
                 Hadoop、Spark)、分布式存储    (如  GFS、HDFS)、云原生系统      (如  Kubernetes、Istio) 及区块链系统  (如  Ethereum、
                 Bitcoin). 相比传统单机系统, 分布式系统具备显著的可扩展性和容错能力, 以更低成本提供强大计算能力, 已经成
                 为支撑大规模网络应用的基石          [3] .
                    然而, 开发者在分布式系统实现过程中难免会引入代码缺陷                  (bug), 这些缺陷不仅影响系统的正常运行, 还对性能、
                 可靠性和安全性构成威胁. 例如, Facebook       平台因一个缺乏正确超时检查的缺陷导致大规模服务节点宕机, 影响了自
                 身和第三方应用, 造成巨大经济损失          [4] . 类似地, ZooKeeper-3189 缺陷导致 ZooKeeper 节点长时间无法响应客户端请
                 求, 导致服务中断数小时      [5] . 此类缺陷还可能被攻击者利用, 发动分布式拒绝服务             (DDoS) 攻击, 进一步加剧经济损失.
                 因此, 分布式系统的高效测试至关重要, 不仅有助于保障系统的可用性和稳定性, 还能增强整个生态系统的安全性.
                    目前已有大量的工作来提升软件系统的缺陷检测与测试效率, 包括模型检测                          [6] 、静态分析  [7] 、动态测试  [8] 等
                 技术. 模型检测技术通过探索属性状态空间, 判断系统模型是否满足给定的规范, 从而进行测试分析并挖掘其中的
                                            [9]
                 缺陷. 常用模型检测工具如        NuSMV 、PRISM   [10] 、SPIN [11] 等, 在传统软件测试中已经发现了许多缺陷. 然而, 面对
                 分布式系统的大规模代码, 模型检测常遇到状态空间爆炸等问题, 难以取得理想效果. 静态分析技术通过对代码结
                 构的分析来挖掘潜在缺陷, 而无需执行程序. 典型静态分析工具如                    CORBA  [12] 、SonarQube [13] 、Coverity [14] 等在分
                 布式系统中已被广泛应用, 但静态分析面临误报率高的挑战. 动态测试技术则是在软件系统运行过程中生成大量
                 测试输入, 并通过实时监控系统的运行状态来检测异常行为或系统缺陷. 与其他技术相比, 它能够有效缓解模型检
                 测中的状态空间爆炸问题, 且误报率较低, 因此被广泛应用于分布式系统的缺陷挖掘过程中                            [15–17] . 然而相比于传统
                 软件的动态测试, 分布式系统动态测试具有测试环境复杂、输入维度繁多、行为状态多变、缺陷种类多样等特
                 点. 因此, 近年来针对分布式系统不同维度的输入、不同类型的系统缺陷, 诞生了许多动态测试技术研究成果, 累
                 计发现了大量的分布式系统缺陷, 有效提升了分布式系统的可用性及安全性                        [18–21] .
                    分布式系统的动态测试是其安全研究的重要方向, 近年来相关研究与综述不断涌现. Lima 等人                            [22] 在  2016  年
                 对  147  名软件测试专业人员进行了调研, 强调了分布式系统测试的重要性及对自动化工具的迫切需求. Lahami 等
                 人  [23] 则探讨了系统动态变化和更新过程中运行时测试的重要性. 然而, 现有综述缺乏对分布式系统动态测试的关
                 键技术以及主要挑战进行全面分析与总结.
                    本文第   1  节提出分布式系统的       4  层缺陷威胁模型, 并基于此模型分析总结了动态测试的主要需求和挑战, 提
                 出了通用的动态测试框架. 第         2  节介绍针对分布式系统功能性、安全性、一致性、性能、鲁棒性及扩展性缺陷的
                 典型测试工具. 第     3  节分析近年来在四维度测试输入生成、系统关键状态感知、缺陷判定准则构建等方面的研究
                 进展. 第  4  节通过覆盖率和缺陷发现能力评估当前主流动态测试工具, 实验结果显示这些工具的覆盖率仍然较低,
                 许多深层路径缺陷未被检测到, 而多维度测试输入生成技术可以有效提升测试效率. 第                            5  节讨论并展望分布式系
                 统测试未来的研究方向.

                 1   分布式系统动态测试概述

                 1.1   动态测试技术
                    动态测试技术通过在特定测试输入下运行程序并分析其行为或输出来发现缺陷                             [24–27] , 其核心流程如图  1  所
                 示, 主要包含   3  个重要的步骤: 测试输入生成, 程序执行以及缺陷检测. 其中, 测试输入生成器依据生成策略, 生成
                 待测程序输入. 程序执行是指待测程序执行前一步骤生成的测试输入. 缺陷监视器主要包含缺陷判定器和判定准
                 则, 用以判定程序是否触发缺陷.
   39   40   41   42   43   44   45   46   47   48   49