Page 45 - 《软件学报》2025年第7期
P. 45
2966 软件学报 2025 年第 36 卷第 7 期
测试输入生成器 白盒 缺陷监视器
控制/数据流
构造
分析
黑盒 否
测试输入 程序执行 缺陷判定器 是否发现
缺陷?
灰盒 是
运行时状态
引导 判定准则
生成策略 状态收集器 缺陷报告
图 1 动态测试一般流程
1.1.1 测试输入生成
动态测试的核心在于生成一系列能够触发程序潜在故障的测试输入. 这些输入不仅需要满足程序的基本格式
要求, 还要具有足够的“问题性”以提高揭露缺陷的可能性. 高效生成能引发程序错误的测试输入是动态测试工具
研究的关键. 测试输入生成策略主要分为两类: 基于生成 (generation-based) 和基于变异 (mutation-based). 基于生成
的方法利用目标程序的语法建模, 生成大量符合格式要求的输入; 基于变异的方法通常采用遗传算法, 通过对初始
输入进行变异, 产生新的输入以尽可能探索程序的状态.
1.1.2 程序执行
在测试输入生成之后, 这些用例会被输入到目标程序中进行测试. 动态测试工具自动启动目标程序, 执行测试
过程, 并监控和控制测试输入的处理, 保障测试流程顺利进行. 根据对目标程序的控制粒度, 测试方法可分为黑盒
测试、白盒测试和灰盒测试这 3 种. 黑盒测试将测试对象视为一个黑盒子, 不考虑程序内部逻辑, 仅依据需求说明
进行功能验证. 白盒测试则分析代码的内部结构 (如控制流和数据流) 及其背后的逻辑, 要求测试人员具备编码能
力并了解测试的软件. 灰盒测试介于两者之间, 既考虑程序的内部结构也考虑外部功能, 使用部分运行时信息动态
引导测试输入生成, 以提高测试效率和覆盖率.
1.1.3 缺陷检测
在执行目标程序时, 缺陷监视器实时监控程序运行状态, 判断是否违背预定义的判定准则. 一旦发现违规, 即
判定为程序缺陷, 记录并捕获违规行为. 捕获后, 动态测试工具会将相应的测试输入存储以供重放和分析使用. 监
视器检测的对象有两种类型: (1) 行结果审查: 将程序运行输出与预知输出对比, 分析是否存在缺陷. 这种方法直
观, 但无法检测到未反映在输出结果中的缺陷; (2) 执行过程检查: 通过插桩或其他监控技术分析程序运行行为, 查
找错误行为. 此方法能更直接观察到缺陷的触发, 即使未导致错误输出, 但需要提前定义错误行为.
1.2 分布式系统的缺陷威胁模型
分布式系统是由多个独立的计算节点通过网络协作完成共同任务的计算系统. 一个典型分布式系统的运行流
程如图 2 所示, 主要包括 4 个关键步骤: (1) 根据系统配置文件启动分布式网络; (2) 客户端发起请求, 由分布式服
务进行响应; (3) 在分布式节点间协同完成请求的处理; (4) 整个过程中, 系统在分布式环境下软硬件实时进行交互,
保障分布式系统高效与稳定性的兼顾.
1. 定义系统、 分布式网络
系统配置 网络拓扑
文件
服务 服务 系统软件
节点 3. 协同协议 节点
计算机硬件
输入/输出
4. 系统交互
2. 发生请求 服务 服务
客户端
节点 节点 分布式环境
图 2 分布式系统一般运行流程

