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

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


                 更多与错误相关的信息;反之,若仅有少数测试用例失败,那么其更有利于错误定位.基于此,文献[18]提出了一种
                 基于事件信息量的方法 SIQ.本文在其基础上,利用信息熵加以改进,进一步提高错误定位的精度.
                    信息熵是表示随机事件不确定性的数学化度量,是所有随机事件信息量的期望.对于一组随机事件 X 
                 {, ,x x  , },x  假设 x i 发生的概率为 P(x i ),则其信息熵 H(x)的定义如下:
                  1  2   n
                                             n                            n
                              H ( )x   E [ ( )]I x i        ( ( ) log ()) ( )P x   i  P x H x   i  E [ ()]I x i        ( () log ( ))Px   i  Px i  (1)
                                             i  1                        i  1
                    错误定位中的测试事件主要分为 4 类,即执行成功的事件 P 和执行失败的事件 F、覆盖程序实体的测试事
                 件 C(s)和未覆盖程序实体的测试事件 U(s),它们的信息熵表示如下:

                                           () 
                                                 [ ( )] 
                                          HP    E I P       N S     log  N S                   (2)
                                                            N   S  N  F  N   S  N F 
                                                 [ ( )] 
                                           () 
                                         HF     E I F       N F     log  N F                   (3)
                                                            N   S  N  F  N   S  N F 
                                                              ()
                                                                             ( )
                                     (( ))s 
                                                             C
                                                                            C
                                   HC      E [ ( ( ))]I C s           Ns    log  Ns           (4)
                                                          N C () s   N U () s  N  C  () s   N U  () s  
                                                               ()
                                                                             ()
                                     (( ))s 
                                                                            U
                                                             U
                                   HU      E [ ( ( ))]I U s           Ns    log  Ns           (5)
                                                          N C ( ) s   N U  () s  N C () s   N U () s  
                    为避免程序实体全部被覆盖执行或全部不执行两类随机事件的发生,我们取未执行一次代替全部执行的
                 事件,同理,用覆盖一次代替全部不执行的事件.
                    对测试事件进一步分析可知:N CF 和 N US 的数值越高,说明覆盖程序实体的测试事件更容易导致执行失败而
                 未覆盖程序实体的测试事件更容易使得执行成功,这两个参数与怀疑度计算成正比.同理可得,N CS 和 N UF 的数
                 值与怀疑度计算成反比.
                    利用信息熵 H(P)、H(F)、H(C(s))和 H(U(s))将程序语句存在错误可能性的信息量加权平均,对计算公式中
                 参数设置权重进行动态调整,辅助语句可疑度的计算.由于测试事件执行成功与否和其覆盖信息并不是相互独
                 立的,两者的信息熵无法相加,故以乘积的方式引入.综上所述,我们得到的怀疑度计算公式如下:
                                          ( ( ())HC s   H ( )F   N  ( )) ( ( ())s   H U s   H  ( )P   N  ( ))s
                                   susp ()s              CF                   US                     (6)
                                          ( ( ())HC s   H ( )P   N CS ( )) ( ( ())s   H U s   H ( )F   N UF  ( ))s
                 2.4   示例分析
                    本节引入了一个简单的例子程序,该例子程序包含 12 条语句,错误语句位于 s 5 处,例子程序及其控制流图如
                 图 3 所示.

















                                             Fig.3    An example program and its CFG
                                                图 3   示例程序及其控制流图
   248   249   250   251   252   253   254   255   256   257   258