语句覆盖,判定覆盖,条件覆盖,条件/判定覆盖,条件组合覆盖,路径覆盖

本文深入解析软件测试中的逻辑覆盖概念,包括语句覆盖、判定覆盖、条件覆盖等六种测试方法,通过实例详细说明如何设计测试用例,确保程序逻辑结构的全面测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在复习软件测试的考试,每次到白盒测试这里都要为这几种逻辑覆盖方法感到头疼,这次终于决定好好整理出来。

逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖。它是一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。
根据覆盖目标的不同和覆盖源程序语句的详尽程度,逻辑覆盖又可分为:语句覆盖,判定覆盖,条件覆盖,条件/判定覆盖,条件组合覆盖,路径覆盖

这里以一个题目引入:

if (a>1) and (b = 0)
then x = x / a
if (a = 2) or (x > 1)
then x = x+ 1
  1. 根据以上程序段画出程序流程图
  2. 按照要求给出六种逻辑覆盖的测试用例

程序流程图如下:
在这里插入图片描述

注:[可执行语句:流程图中的矩形;判定:流程图中的菱形]

(一) 语句覆盖:选择足够多的测试用例,使程序中每一可执行语句至少执行一次

分析:需要覆盖的可执行语句为x = x / ax = x + 1

测试用例如下:

a = 2, b = 0, x = 3   覆盖路径:a-c-e

(二) 判定(分支)覆盖:选择足够多的测试用例,使程序中每个判定的"真"和"假"至少执行一次

分析:需要覆盖的路径为:a-c-e和a-b-da-b-e和a-c-d

测试用例如下:

答案1
a = 2, b = 0, x = 3 覆盖路径:a-c-e
a = 1, b = 0, x = 1 覆盖路径:a-b-d

答案2
a = 2, b = 1, x = 1 覆盖路径:a-b-e
a = 3, b = 0, x = 3 覆盖路径:a-c-d

(三) 条件覆盖:选择足够多的测试用例,使程序中每个判定的每个条件取得各种可能的结果

分析:需要满足的判定为:判定一(a > 1, a <= 1, b = 0, b != 0) ; 判定二(a = 2, a != 2, x > 1, x <= 2)

测试用例如下:

答案1
a = 2, b = 0, x = 3 取到a>1(同时满足a=2), b = 0, x>1
a = 1, b = 1, x = 1 取到a <= 1(同时满足a!=2), b != 0, x <= 2

答案2
a = 1, b = 0, x = 3 取到a <= 1(同时满足a!=2), b = 0, x >1
a = 2, b = 1, x = 1 取到a>1(同时满足a=2), b != 0, x<=2

(四) 判定/条件覆盖:选择足够多的测试用例,使程序中每个判定的"真"和"假"至少执行一次,并且每个判定的每个条件取得各种可能的结果。

分析:

  1. 需要覆盖的路径为:a-c-e和a-b-da-b-e和a-c-d

  2. 需要满足的判定为:判定一(a > 1, a <= 1, b = 0, b != 0) ; 判定二(a = 2, a != 2, x > 1, x <= 2)

测试用例如下:

a = 2, b = 0, x = 3 覆盖路径a-c-e 取到a>1(同时满足a=2), b = 0, x>1
a = 1, b = 1, x = 1 覆盖路径a-b-d 取到a <= 1(同时满足a!=2), b != 0, x <= 2

(五) 条件组合覆盖:选择足够多的测试用例,使程序中所有判定的条件组合至少执行一次

分析:需要覆盖的条件组合为:

a > 1, b = 0
a>1, b != 0
a <= 1, b = 0
a <= 1, b != 0
a = 2, x > 1
a = 2, x< = 1
a != 2, x > 1
a != 2, x <= 1

测试用例如下

a = 2, b = 0, x = 3 覆盖组合1,5
a = 2, b = 1, x = 1 覆盖组合2,6
a = 1, b = 0, x = 3 覆盖组合3,7
a = 1, b = 1, x = 1 覆盖组合4,8

(六) 路径覆盖:选择足够多的测试用例,使程序中每条路径至少执行一次

分析:需要覆盖的路径为:a-c-e、 a-b-d、 a-b-e、 a-c-d

a = 2, b = 0, x = 3 覆盖路径:a-c-e
a = 1, b = 0, x = 1 覆盖路径:a-b-d
a = 2, b = 1, x = 1 覆盖路径:a-b-e
a = 3, b = 0, x = 4 覆盖路径:a-c-d
图5-10所示的程序流程图由于没有提供具体的代码,我将以一种常见的伪代码形式来说明如何设计各种覆盖率的测试用例。 首先,假设程序有三个基本的判断条件(A、B、C)和两个动作(X、Y): ``` if A: do X else: if B: do Y else: do X ``` 1. **语句覆盖**(Statement Coverage): 每语句都要被执行一次。测试用例包括: - A为真,B为假 - A为假,B为真 - A为真,B也为真 - A为假,B也为假 2. **判定覆盖**(Decision Coverage): 每个判定条件)的每个可能结果都要被执行一次。测试用例包括: - A为真,B为假 - A为假,B为真 3. **条件覆盖**(Condition Coverage): 每个条件单独地取真和假。如上例,加上: - A为假,B也为假(X) - A为假,B为真(Y) 4. **条件判定组合覆盖**(Combined Condition/Decision Coverage,CCDC): 每个条件的组合都要被执行一次。例如: - A真,B真,执行Y - A真,B假,执行X - A假,B真,执行Y - A假,B假,执行X 5. **多条件覆盖**(Multiple Conditions Coverage): 当有多于一个条件时,每种条件的组合都至少有一次。比如: - A真,B真,无论C是否成立 - A真,B假,无论C是否成立 - A假,B真,无论C是否成立 - A假,B假,无论C是否成立 注意,实际设计时需根据流程图的具体结构来确定详细的测试用例。如果提供具体的流程图,我可以给更精确的设计建议。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值