Page 257 - 《软件学报》2025年第10期
P. 257

4654                                                      软件学报  2025  年第  36  卷第  10  期


                 并多触发   16.7%–54.5%  的失效事故. 在   MARL+CoopNavi 配置中, IIFuzzing  的优势最为明显, 这是因为该测试配
                 置中, 失效事故序列的比例非常低, 所以           IIFuzzing  中止不能触发失效事故的惰性序列, 对测试效能的提升就更加
                 明显. 我们同时也观察到, 在       4  种测试配置中, IIFuzzing  所触发的失效事故的比率并没有明显改变, 这也是一个非
                 常有意义的结果, 说明      IIFuzzing  并非盲目追求执行更多的测试序列, 而是在遵循被测模型缺陷密度自然属性的前
                 提下, 尽可能多快好省地揭示那些引发失效事故的缺陷.

                                             表 2 IIFuzzing  和基线方法的测试性能

                                RL+CARLA           IL+CARLA         RL+BipedalWalker    MARL+CoopNavi
                  测试方法
                             #Test    #Crash     #Test    #Crash    #Test    #Crash     #Test    #Crash
                  MDPFuzz    1 117      35       1 023     42       4 806      60       70 664     11
                             1 491      45       1 208     50       6 143      70      144 016     17
                  IIFuzzing
                            (+33.5%)  (+28.6%)  (+18.1%)  (+19.0%)  (+27.8%)  (+16.7%)  (+103.8%)  (+54.5%)

                    图  4  展示了  IIFuzzing  在不同测试配置下找到的独特失效事故的示例. 例如图              4(a) 展示的是在自动驾驶任务
                 中, 目标车辆在十字路口试图左转, 但由于纵向车道先行右转的                    NPC  车辆阻碍了视线, 导致目标车辆未能发现紧
                 随其后的试图直行的        NPC  车辆, 从而发生了碰撞; 图     4(b) 展示的同样是在自动驾驶任务中, 目标车辆在变道超车
                 时, 由于相邻车道的两个       NPC  车辆运行速度不稳定, 导致预留的超车空间狭小, 最终导致目标车辆与后车发生碰
                 撞; 图  4(c) 展示的则是控制双足机器人穿越障碍到达终点的任务, 由于生成的场景包含连续的树桩以及不同大小
                 的坑, 复杂的场景导致目标智能体摔倒; 图            4(d) 展示的是在合作导航任务中, 3        个目标智能体试图到达目的地时,
                 由于  NPC  智能体的突然转向导致与其中之一发生碰撞. 上述这些测试场景由于涉及的环境因素                             (障碍物、NPC
                 智能体) 较多, 对目标智能体的挑战性更大, 但往往需要经过多次探索才有可能生成. 相较于                           MDPFuzz, IIFuzzing
                 的工作原理在于尽可能跳过惰性序列             (非失效序列), 而对非惰性序列         (失效序列) 不进行操作, 从而节省测试资源
                 进行更广的探索. 正因如此        IIFuzzing  在发现失效事故的严重程度上不存在明显差异, 而是在发现失效事故的数量
                 和多样性上占据明显优势.

                        目标车辆    NPC 车辆  碰撞  运动轨迹                                     目标智能体  NPC 智能体  运动轨迹
                                                                                      障碍物  目的地  碰撞  地图边缘


                                                         目标智能体
                                                                  树桩
                                                                             坑
                                                         草地
                    (a) RL+CARLA       (b) IL+CARLA           (c) RL+BipedalWalker      (d) MARL+CoopNavi
                                              图 4 IIFuzzing  发现的失效事故示例

                    问题  1  评价结论: IIFuzzing  在同样的测试时间内, 可以执行更多的测试序列, 并触发更多的失效事故. 且其优
                 势随测试时间增加更加明显.
                  4.5.2    IIFuzzing  预测惰性状态序列的准确性  (RQ2)
                    IIFuzzing 的性能关键依赖其预测惰性状态序列的准确性, 从表               1  我们可以看到, 仿真测试中, 能触发失效事故
                 的测试序列非常稀疏, 数据极不平衡, 只考虑预测模型的单边精确率和召回率是不合适的. 同时, IIFuzzing                          的目标
                 是在尽可能不损失缺陷探测能力的前提下中止惰性序列的执行. 所以, 对于                       IIFuzzing  的惰性预测模型   InertS-Pred,
                 我们首先追求惰性序列预测的准确率, 放宽其召回率. 也就是说宁可放过惰性序列继续执行消耗资源, 也减少误报
                 带来的中止了有可能触发事故的测试序列执行的风险. 在非惰性序列一侧, InertS-Pred                     则期望尽可能高的召回率,
                 亦即期望非惰性序列不会被提前中止, 以免损害探测失效事故的能力. 表                       3  展示了  InertS-Pred@IIFuzzing  的实验
                 结果. 我们可以看到在       4  个测试配置中, 有   2  测试配置的惰性序列预测准确率都达到了              100%, 其他也在    97%  以
                 上, 非惰性序列的召回率在        66.7%–100%, 特别在两个强化学习算法中, 可以达到            100%  的惰性序列预测准确率和
   252   253   254   255   256   257   258   259   260   261   262