Page 254 - 《软件学报》2021年第7期
P. 254
2172 Journal of Software 软件学报 Vol.32, No.7, July 2021
同时设计了如下 8 个测试用例:t 1 (6,3,6)、t 2 (4,1,4)、t 3 (4,2,2)、t 4 (1,5,1,)、t 5 (1,0,1)、t 6 (2,4,1)、t 7 (0,4,1)
和 t 8 (0,0,1).程序语句的覆盖信息及使用 Tarantula 和 FLPI 方法对示例程序的定位结果见表 2.其中,“语句”表示
程序相关的语句;“覆盖信息”表示在各个测试用例执行过程中对各个语句的覆盖情况;“排名”表示用 Tarantula
方法和我们的方法分别计算得到的各个语句出错怀疑度值的排名.
Table 2 The result of the example program
表 2 示例程序结果
覆盖信息 排名
语句
t 1 t 2 t 3 t 4 t 5 t 6 t 7 t 8 Tar FLPI
s 1 3 6 (0.757)
s 2 3 6 (0.757)
s 3 3 4 (1.567)
s 4 3 6 (0.757)
s 5 3 5 (1.379)
s 6 3 11 (0.511)
s 7 3 6 (0.757)
s 8 2 3 (2.006)
s 9 3 6 (0.757)
s 10 1 1 (3.614)
s 11 12 12 (0.264)
s 12 3 2 (2.025)
结果 F F F T T T T T 3-11 5-5
针对上述的示例程序,我们来介绍 FLPI 方法的定位过程.首先根据控制流图及各节点的 IN、OUT、REF、
DEF 集获取程序所有执行路径中的不同数据依赖关系,例如语句节点 5 的 IN 集为(1,x)、(2,y)、(3,z)和(4,m),OUT
集为(5,x)、(2,y)、(3,z)和(4,m),REF 集为 x 和 z,而 DEF 集则为 x.针对语句节点 5,将其 REF 集中的使用变量与
IN 集中的流入变量进行对比,由此可以建立 P l 关系(1,5,x)和(3,5,z),同理可以得到所有执行路径中的其他数据依
赖关系,分别为(2,4,y)、(3,8,z)、(3,10,z)、(3,11,z)、(4,9,m)、(5,6,x)、(5,7,x)、(5,8,x)、(5,10,x)、(6,11,y)、(8,10,x)、
(10,12,r)和(11,12,r).
接下来结合程序语句覆盖信息和所有执行路径中的数据依赖关系对示例程序进行路径分析,得到 P l 的覆
盖信息并计算其相应的信息熵等值,所得结果见表 3.
Table 3 The result of path analysis
表 3 路径分析结果
覆盖信息 计算结果
P l 信息
t 1 t 2 t 3 t 4 t 5 t 6 t 7 t 8 N CF N US N CS N UF Sus
(1,5,x) 3 0 5 0 0.757
(2,4,y) 3 0 5 0 0.757
(3,5,z) 3 0 5 0 0.757
(3,8,z) 1 4 1 2 1.459
(3,10,z) 3 3 2 0 3.786
(3,11,z) 0 2 3 3 0.264
(4,9,m) 3 0 5 0 0.757
(5,6,x) 3 0 5 0 0.757
(5,7,x) 3 0 5 0 0.757
(5,8,x) 1 4 1 2 1.459
(5,10,x) 3 3 2 0 3.786
(6,11,y) 0 2 3 3 0.264
(8,10,x) 1 5 0 2 3.099
(10,12,r) 3 3 2 0 3.786
(11,12,r) 0 2 3 3 0.264
结果 F F F T T T T T
与 s 5 语句相关的 P l 为(1,5,x)、(3,5,z)、(5,6,x)、(5,7,x)、(5,8,x)和(5,10,x),以(1,5,x)为例,其信息熵等值计算
如下:
N N 5 5
H(P)= S log S = log =0.42, H(F)=0.53,
N S N F N S N F 53 5 3