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 从相对指标的角度描述了错误定位方法的精度,该指标表示在检测
到错误时需要检查的程序语句的百分比,其值越低,则定位精度越高,公式具体如下: