Page 52 - 《软件学报》2021年第6期
P. 52

1626                                     Journal of Software  软件学报 Vol.32, No.6,  June 2021

         开的运行速度缓慢;另外,庞大的扩展集也不利于启发式技术做出正确的选择.可见:如何有效减少冗余扩展的
         数量,是提升反向展开效率的关键因素.
             (3) directed unfolding 基准库
             directed unfolding 使用了 dartes,random,airport,openstacks 这 4 个用例集,本文分别与之进行比较.4 个用例
         集上的最大扩展次数均设为 10 000 次,最大运行时间设为 35s.
             dartes 用例集的实验结果如图 10(c)所示.正向展开中,hsum 策略效果最好,总共验证了 256/257 组用例的可
         覆盖性.反向展开中,hmax 策略效果最好,总共验证了 257/257 组用例的可覆盖性.进一步,反向展开|E|的规模在
         48 组用例上最优,在 2 组用例上与正向展开持平.在这个用例集上,正向展开与反向展开都发挥了各自的优势.
















                            (a) Randomtree                                             (b) Threadlock

























                                                  (c) Dartes
                Fig.10    Comparison of |E| in different test cases between directed unfolding and reverse unfolding
                        图 10   directed unfolding 与反向展开在不同测试用例上的事件总数对比

             在 random 用例集上:正向展开中,hsum 策略效果最好,总共验证了 33/45 组用例的可覆盖性;反向展开中,
         block+hsum 策略效果最好,总共验证了 26/45 组用例的可覆盖性.进一步,正向展开|E|的规模在 33 组用例上最优,
         在 12 组用例上与反向展开持平.在接下来对 airport,openstacks 的测试中,正向展开结合 hsum 策略分别能验证
         19/26,30/30 组用例的可覆盖性,而反向展开无法验证任何用例的可覆盖性.在这些用例上的低效甚至失效说明
         了反向展开并不能适用于所有场景,这也是其性质决定的.然而,启发式技术往往能够弥补算法在性质上的不
         足.因此,针对反向展开低效或失效的情况,应设计更有效的启发式技术加以优化.
   47   48   49   50   51   52   53   54   55   56   57