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

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



                          分布式节点 1                  状态收集器
                          分布式节点 2
                                        API 列表     状态收集器         信息处理         状态感知        行为分析
                          分布式节点 3
                             …
                                                   状态收集器
                          分布式节点 n
                         待测分布式系统        接口识别       运行时调用        状态解析、过滤           关键状态获取
                                           图 8 测试工具动态接口状态感知的基本流程

                    典型动态测试工具       Tyr  [76] 是一个检测区块链系统中共识缺陷的工具, 它通过利用系统内置的区块查询                    API 接
                 口来动态监控区块链的共识状态信息. 在测试开始时, Tyr 会与区块链网络中的各个分布式节点建立连接, 利用节
                 点的  socket 服务接口, 实时收集包括区块高度、哈希值、节点成为领导者的次数以及区块内存储的交易数据等关
                 键行为状态信息. 随后, Tyr 利用这些数据计算不同节点间的共识差异度, 并使用这一差异作为测试流程的引导反
                 馈, 生成拜占庭消息. 此外, 漏洞检测器基于这些实际状态信息, 检测待测系统的共识差异是否在较长时间内保持
                 较高水平. 如果系统长时间        (超过  6  个区块共识时间) 处于异常不一致状态, 则           Tyr 判断系统可能未能达成正常共
                 识状态, 指出系统中可能存在的一致性缺陷.

                 3.3   判断准则构建技术
                    测试准则构建是动态测试中用于识别问题的基础, 尤其在自动化测试中至关重要. 它提供标准来评估测试输
                 入执行结果是否符合预期, 直接影响能发现的问题类型及诊断准确性. 作为分布式系统动态测试的核心, 测试准则
                 构建技术应对各种特性缺陷, 优化缺陷识别过程, 提升挖掘率和测试效率. 该技术通过深入分析待测系统的特性和
                 潜在缺陷, 建立一套判定规则, 判断系统执行结果或状态是否异常, 从而提高测试的有效性.
                    测试准则构建技术的设计包含两个关键目标: (1) 深入分析并分类目标缺陷, 通过审查系统源代码、历史缺陷
                 记录和相关文献, 理解缺陷的特性和成因, 确定测试应关注的缺陷类型和场景, 为准则制定奠定基础. (2) 基于缺陷
                 的理解, 制定具体测试准则或规则, 用于测试过程中评估系统是否出现异常. 这些准则包括对返回值的判断、关键
                 状态的检查及异常处理评估, 需充分考虑分布式系统的特性和缺陷特点, 确保能有效捕捉潜在问题. 目前, 分布式
                 系统动态测试常用准则包括: 基于反馈响应的崩溃检测、差分测试和蜕变测试进行缺陷判断、用户建模或系统特
                 征总结进行异常识别, 以及基于大数据分析的离群点检测等策略. 这些方法能够有效提升测试的覆盖率和缺陷挖
                 掘能力.

                 3.3.1    崩溃识别技术
                    崩溃缺陷指的是由于代码缺陷、资源管理不当等原因, 导致某个关键组件、进程、节点甚至整个系统突然停
                 止工作的安全缺陷. 这类缺陷可能导致数据丢失、服务中断, 甚至整个系统的崩溃, 严重影响系统的可用性、可靠
                 性和数据完整性. 在分布式环境中, 崩溃缺陷尤其严重, 因为一个组件的失败可能通过依赖链影响其他组件, 放大
                 故障的影响范围. 此外, 分布式系统通常承载着关键业务, 崩溃缺陷的发生不仅会导致直接的经济损失, 还可能损
                 害企业的声誉.
                    崩溃缺陷的识别相对直接, 因为它的表象十分明显, 即判断原有的进程、节点、服务是否还持续在线. 因此,
                 许多分布式系统动态测试工具           (如  ECFuzz [80] 、LOKI  [75] 、Chronos [21] ) 在系统测试时都会进行崩溃缺陷的检测. 针
                 对进程崩溃问题, 动态测试工具通常在系统启动时记录下关键进程号, 并在整个测试过程中实时监控操作系统                                  (OS)
                 抛出的系统崩溃信号是否在这些关键进程列表中. 针对节点崩溃问题, 工具会在系统启动时与各个分布式节点建
                 立长链接, 并周期性地发送心跳包, 等待回包, 若长时间没有心跳回包, 则判断对方节点处于崩溃状态. 对于服务崩
                 溃问题, 工具通过模拟发送用户级请求并监控是否收到正常响应来进行测试, 若服务无法返回预期的响应, 则可能
                 指示服务已处于崩溃状态中.
                    一些内存安全问题, 如缓冲区溢出、栈溢出、使用已释放的内存和内存泄漏等, 可能不会立即导致程序崩溃,
   61   62   63   64   65   66   67   68   69   70   71