Page 55 - 《软件学报》2025年第7期
P. 55
2976 软件学报 2025 年第 36 卷第 7 期
2.3 针对一致性缺陷的测试工具
一致性缺陷是指在分布式系统中, 由于共识同步不正确、并发处理不当或故障处理错误等原因, 导致系统中
多个节点或副本之间的数据不一致、事务无法正确完成等缺陷. 这类漏洞会造成数据的不完整性和不准确性, 严
重影响系统的可靠性和上层应用的正常运行. 分布式系统的一致性缺陷主要包括共识不一致缺陷、并发冲突一致
性缺陷、崩溃一致性缺陷等. 这些一致性缺陷可能导致数据丢失、系统操作失败, 甚至业务逻辑错误, 从而引发重
大经济损失和信誉风险.
共识不一致检测旨在分析和验证分布式系统中多个节点在决策过程中的一致性, 以保障数据一致性和系统的
正确运行. 针对去中心化分布式系统的共识一致性问题, 典型测试工具 Tyr [76] 设计了一种基于行为分化导向模型
的模糊测试算法. 在分布式环境中, 实时一致性难以实现, 多数系统仅保证最终一致性. Tyr 认为短暂的不一致是
正常且可接受的, 但最终不一致通常是由多次短暂不一致积累而来. 因此, Tyr 将导致节点行为差异的消息测试输
入视为有价值的测试输入, 并通过变异扩大这种差异性. Tyr 首先对去中心化分布式系统的共识过程进行行为差
异建模, 并在测试中实时收集计算节点间的行为差异, 进而引导消息测试输入的变异, 提升生成质量. 在对 Go-
Ethereum、Fabric、FISCO BCOS 和 Diem 等常见共识系统的 24 h 测试中, Tyr 发现了 20 个严重的共识不一致
缺陷.
并发冲突一致性检测通过分析和验证分布式系统中多个并发操作的相互影响, 确定是否会导致数据不一致和
状态异常 (如数据损坏、死锁等). 其最大挑战是有效探索和覆盖庞大的并发操作空间. 由于分布式系统中并发操
作数量众多, 操作之间的交互复杂且不可预测, 测试时难以穷尽所有可能的并发场景. 典型工具 PCTCP [61] 利用随
机调度算法, 将消息交互建模为事件, 建立有序事件集, 并在运行时动态选择和执行事件, 提高发现并发错误的概
率, 在主流分布式系统中发现了 9 个新缺陷. 但由于事件有序关系有限, 大多数事件依赖关系不确定, 测试探索空
间依然很大. 针对这一问题, 典型工具 FlyMC [63] 通过识别系统状态对称性和事件独立性, 减少状态和事件组合数
量, 并并行化处理多个独立事件来加快测试过程. 此外, FlyMC 通过并行翻转多个事件顺序, 系统化地探索复杂事
件交错, 从而提高检测效率, 在主流分布式系统中发现了 10 个新一致性缺陷. 然而, 系统性地探索整个输入空间的
测试效率依然较低. 因此, 典型工具 Morpheus [65] 仅针对复杂并发执行路径, 利用部分顺序采样技术, 专注于探索稀
有但关键的并发冲突. 在测试过程中, Morpheus 实时分析系统运行状态, 动态调整事件优先级, 根据关键事件进行
调度, 提高发现并发冲突的概率, 在主流分布式系统中发现了 11 个严重一致性缺陷.
崩溃一致性缺陷检测是指在分布式系统中, 检测由于节点崩溃、系统故障等原因导致的系统数据不一致和
事务失败的缺陷. 该检测主要关注系统在故障后, 是否能够正确恢复数据一致性状态、完成未决事务以及防止数
据丢失或重复. 典型工具 Modulo [71] 对分布式系统的操作事件、故障事件、分歧状态、恢复事件以及收敛路径 (从
分歧状态到一致状态的收敛路径) 进行建模, 生成分化同步模型 DRMs. 基于该模型, Modulo 生成事件调度计划,
包括一系列系统操作和故障注入事件, 引导系统进入特定的分歧状态. 系统执行这些计划时, Modulo 实时比较不
同节点的数据状态, 验证系统在故障恢复后的收敛情况, 保障系统数据能正确达到一致状态. Modulo 在
ZooKeeper、MongoDB 和 Redis 等主流分布式系统发现了 6 个新的崩溃一致性缺陷. 另一个典型工具 Phoenix [78]
通过在区块链系统中随机注入上下文敏感的故障, 在区块同步、共识投票等关键步骤引入一系列故障注入技术,
如磁盘数据故障、数据污染等, 来模拟可能导致系统数据不一致的场景, 在 Ethereum、Fabric 等主流区块链系统
上发现了 6 个新的崩溃一致性缺陷.
2.4 针对性能问题的测试工具
性能问题通常指目标分布式系统不能在给定的时间范围内返回请求处理结果. 分布式系统通常用于处理大量
并发请求和大规模数据, 如果性能不佳, 系统可能无法及时响应用户请求, 影响用户体验, 导致服务质量下降. 此
外, 性能问题还会增加资源消耗, 导致运营成本上升. 相比于其他缺陷类型, 性能问题的确定具有更多的不确定性.
崩溃问题会对系统造成明显的影响, 逻辑缺陷和一致性缺陷有清晰的判断标准, 而合理的响应时间则难以给出一
个明确的界限. 因此, 针对分布式系统性能问题的测试工具重点是设计合理的缺陷判定准则. 目前大多数测试工具
采用的是基于数据分析的离群点识别算法来判断系统的性能变化.

