Page 255 - 《软件学报》2025年第10期
P. 255
4652 软件学报 2025 年第 36 卷第 10 期
以上两个模型的主要动作都是通过使用车辆摄像头收集的图像作为输入来确定转向和加速度.
(3) RL+BipedalWalker: BipedalWalker [44] 是 OpenAI Gym 中的一个双足机器人仿真环境, 包括草地、台阶、坑
和树桩等, 我们选择基于强化学习的 TQC 模型 [44] 作为目标智能体. TQC 以 24 维状态为输入, 根据身体角度、腿
部角度、速度和激光雷达等数据预测每条腿的速度, 引导智能体穿过草地、树枝等障碍. 该模型的实现开源在著
名的 stablebaseline3 算法包内.
(4) MARL+CoopNavi: CoopNavi [45] 是 OpenAI 发布的一个合作导航环境, 用于多智能体合作在没有碰撞的情
况下到达一组地标, 是一个多智能体的强化学习环境. 我们使用现有工作 [45] 中公开的方法构建 MARL 模型, 通过
观测其他智能体和地标的相对位置选择移动方向和速度.
4.3 基线模型和评价指标
4.3.1 基线模型
对连续决策模型的测试是一个非常有挑战性的方向, 目前大多数方法的目标是生成安全攸关的场景, 例如
AV-FUZZER 和 MOSAT 让自动驾驶车辆在生成的场景环境中仿真执行以触发事故, 但这些场景都是与被测系统
的领域强相关的, 即自动驾驶的场景无法迁移到机器人行走的场景. 如前所述, 连续决策问题通常可以建模为
MDP 过程, MDPFuzz 中提出了一个通用的模糊测试框架, 能够对不同领域的连续决策模型进行测试. 我们的工作
是基于模糊测试基础框架, 通过预测不会触发失效事故的测试序列, 提前中止惰性的测试序列, 以期在相同的时间
内, 可以执行更多的测试序列, 并触发更多且有差异性的失效事故. 基于上述考虑, 我们选择 MDPFuzz 作为对比基线.
4.3.2 评价指标
首先, 我们首先定义失效事故, 亦即测试断言. 由于不同的实验系统任务目标不同, 因此任务失败 (即失效事
故) 的定义存在差异. 对于自动驾驶环境 CARLA, 失效事故定义为“自主车辆 (ego-vehicle) 与其他车辆 (NPC-
vehicle) 或者障碍物发生碰撞”; 对于机器人行走 BipedalWalker, 失效事故定义为“自走智能体 (ego-walking agent)
跌倒”; 对于合作导航 CoopNavi, 失效事故定义为多智能体之间发生碰撞. 同时, 失效事故也可以根据用户关心的
不同方面或测试目标进行定义, 例如在自动驾驶系统中, 我们不仅可以将车辆碰撞定义为失效事故, 还可以将车辆
压线、闯红灯等违反交通规则的行为定义为失效事故.
评价指标如下.
(1) 为了评价 IIFuzzing 的有效性和效率, 我们采用两个最常用的指标:
● #Crash: 表示在指定时间内触发的失效事故的数量.
● #Test: 表示在指定时间内执行的测试轮次.
(2) 为了评价 IIFuzzing 预测惰性序列的准确度, 我们采用了分类模型中最常用的两个指标:
● Precision: 表示正确识别的阳性标签占模型预测的阳性标签的比例.
● Recall: 表示正确识别的阳性标签占样本中总阳性标签的比例.
4.4 实验设置
IIFuzzing 用 Python 编写, 通过 MDP 框架和目标模型及环境交互. 所有被测目标模型运行在 PyTorch 环境. 我
们根据各模型在测试环境中状态变化的速度, 为上述 4 种测试配置分别设置合适的最大执行时间步 M. 对于输入
的初始状态, 模型在执行中如果没有触发失效事故, 且未被预测为惰性序列, 则执行 M 步后即视为完成任务, 执行
下一轮测试.
表 1 给出了 4 种测试配置的具体信息. 其中“历史/初始数据”栏表示该测试配置中的历史数据, 或者先随机执
行生成的初始数据. 在本实验中, 我们先让模型在配置环境中随机运行 2 h, 将产生的初始状态空间作为初始种子
状态集合. 然后在不干预的情况下运行 12 h, 获得数据作为“历史/初始数据”用来训练状态序列表示学习模型和聚
类模型, 以及确定最优干预点. 从这里我们可以看到, 在不干预的情况, MDP 的模糊测试只能触发非常少的失效事故.
所有实验都是在配备 NVIDIA TITAN RTX GPU、Intel Xeon Silver CPU、64 GB RAM 的服务器上进行的, 所
使用的操作系统为 Ubuntu 20.04.

