2025/4/23
软件工程基础知识
白盒测试
逻辑覆盖法
根据覆盖目标的不同,逻辑覆盖又可以分为语句覆盖、判定覆盖、条件覆盖、判定\条件覆盖、组合覆盖和路径覆盖。
1.语句覆盖:每个语句执行一次
if(A and B)
then statment 1;
if(C or D)
then statment 2;
语句→statement
复制
A and B → T => A→T,B→T
C or D → T => C→T,D→T
test:A→T,B→T,C→T,D→T
2.判定覆盖:每个判定真假至少一次
if(A and B)
then statment 1;
if(C or D)
then statment 2;
复制
判定→A and B,C or D
A and B → T => A→T,B→T ①
A and B → F => A→F,B→F ②
C or D → T => C→T,D→T ③
C or D → F => C→F,D→F ④
test1: A→T,B→T,C→T,D→T => ① + ③
test2: A→F,B→F,C→F,D→F => ② + ④
3.条件覆盖:每个判定中的条件真假至少一次
if(A and B)
then statment 1;
if(C or D)
then statment 2;
复制
条件→A,B,C,D
当题目只需取到时:
A B C D
T T T T ⑤
F F F F ⑥
test1: A→T,B→T,C→T,D→T => ⑤
test2: A→F,B→F,C→F,D→F => ⑥
若百分百覆盖,每个条件都需要执行到,则需要再加一个test
注:A and B ,当A为F时,B为任何值都执行不到
C or D ,当C为T时,D为任何值都执行不到
test3: A→T,B→F,C→F,D→T => 解决 B→F,D→T 未执行到的情况
4.判定条件覆盖= 2 + 3
if(A and B)
then statment 1;
if(C or D)
then statment 2;
复制
test1: A→T,B→T,C→T,D→T => ① + ③ + ⑤
test2: A→F,B→F,C→F,D→F => ② + ④ + ⑥
test3: A→T,B→F,C→F,D→T => 百分百覆盖
5.组合(条件组合覆盖):每个判定中的 每个条件 各种可能的组合至少一次
if(A and B)
then statment 1;
if(C or D)
then statment 2;
复制
A B C D
T T T T ⑦
T F T F ⑧
F T F T ⑨
F F F F ⑩
test1: A→T,B→T,C→T,D→T => ⑦
test2: A→T,B→F,C→T,D→F => ⑧
test3: A→F,B→T,C→F,D→T => ⑨
test4: A→F,B→F,C→F,D→F => ⑩
6.路径覆盖:所有路径至少执行一次
路径覆盖率的计算方法:测试时至少被执行过一次的路径总数 / 程序的总路径数
test1:a = -2 ,b = 1 , c = 1 A - C
test2:a = 2 ,b = 1 , c = 1 A - D
test3:a = 0 ,b = 1 , c = 1 B - C
test4:a = 2 ,b = 3 , c = 1 B - D
基本路径覆盖:完全覆盖程序中的路径
圈复杂度:
方法一:V(G) = A + 1,其中 A 代表控制流图中的封闭区域数量。
V(G) = 4 + 1 = 5
方法二:V(G) = P + 1,其中 P 代表控制流图中的判定节点数。
V(G) = 4 + 1 = 5
方法三:V(G) = e - n + 2,其中 e 代表控制流图中的边的数量,即控制流中的箭头数量;n 代表控制流图的节点数量,即控制流图中的圆圈数量。
V(G) = 11 - 8 + 2 = 5
路径 1 :1 - 2 - 4 - 5 - 8
路径 2 :1 - 2 - 4 - 5 - 6 - 8
路径 3 :1 - 2 - 4 - 5 - 6 - 7 - 8
路径 4 :1 - 2 - 3 - 5 - 8
路径 5 :1 - 2 - 4 - 3 - 5 - 8
test1:a = -1,b = 1,c = 1 => 路径 1
test2:a = 1,b = 1,c = -1 => 路径 2
test3:a = 1,b = 1,c = 1 => 路径 3
test4:a = 0,b = 1,c = 1 => 路径 4
test5:a = -1,b = 3,c = 1 => 路径 5
真诚点赞,手留余香