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  及其修复的核心代码片段
   68   69   70   71   72   73   74   75   76   77   78