2025/4/23

资深RenMin教师 | 31 | 2025-04-22

软件工程基础知识

白盒测试

逻辑覆盖法

根据覆盖目标的不同,逻辑覆盖又可以分为语句覆盖、判定覆盖、条件覆盖、判定\条件覆盖、组合覆盖和路径覆盖。

语句覆盖:选择足够多的测试用例,使得程序中的每个可执行语句至少执行一次。
判定覆盖:通过执行足够的测试用例,使得程序中的每个判定至少都获得一次“真”值和“假”值,也就是使程序中的每个取“真”分支和取“假”分支至少均经历一次,也称为“分支覆盖”。
条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的可能取值(真/假)都至少满足一次。
判定/条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的所有情况(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。----满足判定/条件覆盖的测试用例一定同事满足判定覆盖和条件覆盖。
组合覆盖:通过执行足够的测试用例,使得程序中每个判定的所有可能的条件取值组合都至少出现一次。----满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖和判定/条件覆盖。
路径覆盖:设计足够多的测试用例,要求覆盖程序中所有可能的路径。



白盒测试.png


语句:每个语句执行一次
判定:每个判定真假至少一次
条件:每个判定中的条件真假至少一次
判定条件= 2 + 3
组合(条件组合覆盖):每个判定中的 各个条件 各种可能的组合至少一次
路径:所有路径至少执行一次

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.路径覆盖:所有路径至少执行一次

路径覆盖率的计算方法:测试时至少被执行过一次的路径总数 / 程序的总路径数



白盒测试1.png


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



白盒测试2.png


路径 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



文章标签: 编程语言
推荐指数:

真诚点赞,手留余香

2025/4/23

加载中...

关于作者

资深RenMin教师

专业研究教育19年,熟练拿捏学生心理,是人民的好公仆~

等级 LV2

粉丝 4

获赞 18

经验 195

推荐标签

编程语言 系统维护 mysql java 计算机硬件 平台通知 UML 考试通知

2025/4/23

评论