Page 73 - 《软件学报》2025年第7期
P. 73
2994 软件学报 2025 年第 36 卷第 7 期
此外, 系统配置生成工具 CTests 和 ECFuzz 在测试覆盖率上表现出色, 这表明分布式系统需要大量代码来处
理多变的配置项. 与 CTests 相比, ECFuzz 在 3 个待测系统上均表现出更佳的覆盖率, 这是因为它不仅对配置项的
语法语义进行了建模, 还对不同配置项间的依赖关系进行了深入优化, 从而提升了测试效果. 错误注入工具 Chronos
和 CrashFuzz 也取得了较高的覆盖率, 因为分布式系统中包含大量的错误处理代码, 以应对复杂的运行环境.
Chronos 相较于 CrashFuzz 覆盖率更高, 得益于其基于代码深度覆盖优先的算法, 能够更加高效地生成测试输入,
探索系统深层路径, 提高整体代码覆盖率. 最后, 消息生成工具 LOKI 和 Tyr 在去中心化系统 IPFS 上取得了较好
的代码覆盖效果, 但在中心化系统 HDFS 和 ZooKeeper 上表现较弱. 这是因为中心化系统的消息传递机制较简单,
相关的逻辑处理代码也较少, 限制了测试覆盖率的提升.
4.2.2 现有工具不足
从表 4 和表 5 的数据可以看出, 现有的动态测试工具的测试覆盖率仍然偏低, 且找到的缺陷数量远少于当前
分布式系统中的已知缺陷数量. 以主流分布式系统 HDFS 为例, 根据 HDFS 系统官方修复的缺陷报告, 我们分析并
总结了版本 3.0.0 的历史缺陷, 其中与配置、用户请求、消息处理、故障处理相关的系统缺陷共有 24 个, 而这 8
个典型动态测试工具仅发现了其中的 10 个缺陷, 约有 58% 的 HDFS 缺陷被这些工具所遗漏. 为了进一步分析现
有工具的不足, 我们对剩余的 14 个 HDFS 缺陷进行了初步人工分析, 发现这些缺陷的触发路径往往较深, 通常需
要多个不同维度的输入执行较深的逻辑交互才能触发, 这是目前测试工具所不具备的能力. 下面我们以 HDFS-
13279 为例, 详细介绍现有工具面临的主要挑战以及未来可能的解决方法.
数据存储管理缺陷 HDFS-13279 是一个逻辑缺陷, 由配置更新、用户请求负载和节点网络故障的测试输入共
同作用, 导致 HDFS 系统负载均衡分配错误, 最终引发数据节点服务中断. 图 13 是触发该缺陷的 5 个关键测试步
骤及主要执行逻辑, 图 14 是该缺陷及其修复的核心代码片段.
NameNode
NetworkTopology.java
Load 更新 clusterMap sortByLoad weightTree
changes
计算
更新不及时 不均衡?
Load
Alive Connection Data
balancer
DataNodes checker migration
1 … N
检查失败 数据迁移
volume_add
mkdir create DataNode
data_new 输入维度:
data_remove 配置、故障、
node_remove 用户请求 HeartBeat Data storage
new_data ops
图 13 缺陷 HDFS-13279 的主要触发流程
图 14 缺陷 HDFS-13279 及其修复的核心代码片段

