Page 255 - 《软件学报》2021年第7期
P. 255

姜淑娟  等:基于路径分析和信息熵的错误定位方法                                                        2173


                                        Ns             N  ()s     7       7
                                           ()
                          H(C(s))=      C      log   C       =     log  =0.17, H(U(s))=0.38,
                                                                            
                                                                    
                                      N C ( ) s   N U  () s  N C  () s   N U ( ) s    71  71
                            ( ( ())HC s   H ( )F   N  ( )) ( ( ())s   H U s   H ( )P   N  ( ))s  0.17 0.53 3 0.38 0.42 0      
                     susp () s             CF                   US   =                       =0.757.
                                              s 
                            ( ( ()) H P   ( ) N CS  ( )) ( ( ()) H F   ( ) N UF ( ))  0.17 0.42 5 0.38 0.53 0
                                                  H U s 
                                                                           
                                                                                           
                             HC s 
                                                                                       
                                                                                
                                                                    s
                    同理可以得到其他与 s 5 语句相关的 P l 的怀疑度值分别为 0.757、0.757、0.757、1.459 和 3.786,加权平均
                 得到 susp(s 5 )=1.379.同理可以得到其余语句的怀疑度值,详见表 1 最后一列.表 1 最后一行显示了两种方法在最
                 好和最坏情况下需要检查的语句数,分别为 3-11 和 5-5.由此示例可知,FLPI 方法是可行的.综上,FLPI 方法可以
                 减少语句检查数量,提高错误定位的精度.
                 3    实   验
                    针对本文提出的基于路径分析和信息熵的错误定位方法进行实验验证评估其有效性.实验运行环境为
                 Windows 10 和 Linux 系统,2.60GHz Intel(R) i5 四核处理器,4GB 物理内存.
                 3.1   实验对象
                    本文选取了 17 个程序作为实验对象,程序特征见表 4.前 14 个程序来自 SIR 库                       [19] ,后 3 个开源项目
                 JFreeChar、Joda-Time 和 Mockito 来自 Defect4J 库 [20] .
                                                 Table 4   Experimental subject
                                                      表 4   实验对象
                                程序          简要描述         错误版本数         代码行数         测试用例数
                             print_tokens   词法分析            7            565          4 130
                             print_tokens2   词法分析           10           510          4 115
                               replace      模式替换            32           563          5 542
                               schedule    优先级调度            9            412          2 650
                              schedule2    优先级调度            10           307          2 710
                                tcas        高度分离            41           173          1 608
                               totinfo      信息度量            23           406          1 052
                             NanoXML v 1   XML 解析器          7           4 351          237
                             NanoXML v 2   XML 解析器          7           5 671          237
                             NanoXML v 3   XML 解析器          10          6 838          237
                             NanoXML v 5   XML 解析器          8           7 160          237
                             XML-sec v 1   XML 加密程序         8           21 613         92
                             XML-sec v 2   XML 加密程序         6           22 318         94
                             XML-sec v 3   XML 加密程序         7           19 895         84
                              JFreeChart   图表绘制类库           26          96 300        2 205
                              Joda-Time   日期时间类库            27          28 400        4 130
                               Mockito    单元测试框架            38          23 000        1 366

                    本文的实验最终选取了基准程序中的 249 个错误版本.剩余程序被排除的主要原因如下:部分错误版本程
                 序不存在失败的测试用例,如 replace 的版本 32 和 schedule2 的版本 9;部分错误版本程序无法收集到覆盖信息,
                 如 print_tokens 的版本 4、schedule 的版本 5 和 print_tokens2 的版本 10 等;部分错误版本程序没有输出错误,如
                 Time 的版本 2 和版本 19、Mockito 的版本 6 和版本 10 等.
                 3.2   评价标准
                    为了评估所提错误定位方法的有效性,本文采用以下 4 个指标与现有方法进行实验比较.
                      累积检查语句数.即对于不同错误版本的基准程序定位到错误时累积检查的总语句数,其值越低,说明方
                 法越有效.
                     Expense(错误定位代价)    [21] .Expense 从相对指标的角度描述了错误定位方法的精度,该指标表示在检测
                 到错误时需要检查的程序语句的百分比,其值越低,则定位精度越高,公式具体如下:
   250   251   252   253   254   255   256   257   258   259   260