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

吴泊逾 等: 干扰惰性序列的连续决策模型模糊测试                                                        4653


                    对于  RQ1  的实验, IIFuzzing  和基线方法  (MDPFuzz) 按照相同的标准测试配置, 即每个配置执行             3  次测试, 每
                 次  12 h [9,46] , 本文将汇报  3  次测试的平均结果.
                    对于  RQ2  的实验, IIFuzzing  在干预点预测到惰性序列后, 并不中止执行, 而是继续完成该轮                 MDP  过程, 这样
                 我们知道被预测为惰性序列的测试, 后续是否真实触发了失效事故, 以此来评价                         IIFuzzing  惰性预测模型   (InertS-
                 Pred) 的准确性.
                    对于  RQ3  的实验, 我们首先将     12 h  内所有的状态序列用表示学习模型做归一化表示                (参见第  3.3.1  节), 然后
                 将得到的表示向量送给高斯混合模型             (Gaussian mixture model, GMM) [47] 去拟合状态序列的分布, 最后, 我们可视
                 化  GMM  的分布, 通过比较覆盖区域, 来评估        IIFuzzing  和基线方法所执行的测试用例的多样性.
                    对于  RQ4  的实验, 对每个测试配置, 以其       M/5  作为间隔步长, 设置不同的干预点. 由于主要评价干预点对于惰性
                 预测准确性的影响, 所以和        RQ2  的实验类似, 实验中在干预点只做预测, 并不中止序列执行, 然后通过实际触发的失
                 效事故数据计算每个干预点的双侧召回率, 按照第               3.4  节的方法选择干预点, 然后分析在干预点测试状态序列的分布.
                  4.5   实验结果与分析
                  4.5.1    IIFuzzing  有效性和效率  (RQ1)
                    图  3  展示了  IIFuzzing  和基线方法在  4  个测试配置下随时间执行测试序列和触发失效事故的趋势. 可以看出
                 随时间进展, 在    4  个测试配置下, IIFuzzing  执行测试序列的数量和触发失效事故的数量与基线方法相比明显拉开
                 距离, 时间越长, 优势越明显.

                                                               50                   1 200
                                       1 400
                   40
                                       1 200                   40                   1 000
                   30                  1 000                   30                    800
                   #Crash  20          #Test  800             #Crash                #Test  600
                                                               20
                                        600
                                                                                     400
                                        400
                   10                                          10
                                        200                                          200
                    0                     0                     0                      0
                      0  2  4  6  8 10 12  0  2  4  6  8 10 12   0  2  4  6  8 10 12     0  2  4  6  8 10 12
                          Time (h)               Time (h)             Time (h)               Time (h)
                                   (a) RL+CARLA                                 (b) IL+CARLA
                                                               18
                   70                   6 000                                      140 000
                   60                                          15                  120 000
                                        5 000
                   50                                          12                  100 000
                                        4 000
                   #Crash  40          #Test  3 000            #Crash  9           #Test  80 000
                   30
                                        2 000                   6                   60 000
                   20                                                               40 000
                   10                   1 000                   3                   20 000
                    0                     0                     0                      0
                      0  2  4  6  8 10 12   0  2  4  6  8 10 12   0  2  4  6  8 10 12    0  2  4  6  8 10 12
                          Time (h)               Time (h)             Time (h)               Time (h)
                                 (c) RL+BipedalWalker                         (d) MARL+CoopNavi
                                                        MDPFuzz    IIFuzzing
                                   图 3 IIFuzzing  和基线方法执行的测试序列和触发失效事故的效率

                    表  2  给出了  3  次  12 h  执行的测试序列的总数和触发失效事故的平均值, 其中#Test 表示执行的测试序列数,
                 #Crash  表示触发的失效事故数. 可以看出, IIFuzzing      在  4  个测试配置中, 可以多执行      18.1%–103.8%  的测试序列,
   251   252   253   254   255   256   257   258   259   260   261