白盒测试用例设计方法

假设我们有以下待测试程序 :

python 复制代码
def func(a, b, x):
    if a > 1 and b == 0:
        x = x / a
    if a == 2 or x > 1
        x = x + 1
    return x

语句覆盖

语句覆盖:每条语句至少执行一次。

使用此准则测试上述函数, 只需要遍历路径 ace, 即可使得所有语句执行一次。

对应测试用例为 : a = 2, b = 0, x = 4

判定覆盖

判定覆盖:又叫分支覆盖, 每个判定的所有可能结果至少出现一次。

只需要涵盖路径 aceabd, 或 acdabe, 就可以使得两个判定为 "真" 和 "假" 的分支都执行一次。

前者 :

  • a = 2, b = 0, x = 4 -> ace √ √
  • a = 0, b = 1, x = 1 -> abd × ×

后者 :

  • a = 2, b = 0, x = 1 -> acd √ ×
  • a = 2, b = 1, x = 2 -> abe × √

条件覆盖

条件覆盖:每个条件的所有可能结果至少执行一次。

第一个判断的所有条件的可能取值情况 : <math xmlns="http://www.w3.org/1998/Math/MathML"> a > 1 a > 1 </math>a>1 或 <math xmlns="http://www.w3.org/1998/Math/MathML"> a ≤ 1 a \leq 1 </math>a≤1, <math xmlns="http://www.w3.org/1998/Math/MathML"> b = 0 b = 0 </math>b=0 或 <math xmlns="http://www.w3.org/1998/Math/MathML"> b ≠ 0 b \neq 0 </math>b=0。

第二个判断的所有条件的可能取值情况 : <math xmlns="http://www.w3.org/1998/Math/MathML"> a = 2 a = 2 </math>a=2 或 <math xmlns="http://www.w3.org/1998/Math/MathML"> a ≠ 2 a \neq 2 </math>a=2, <math xmlns="http://www.w3.org/1998/Math/MathML"> x > 0 x > 0 </math>x>0 或 <math xmlns="http://www.w3.org/1998/Math/MathML"> x ≤ 1 x \leq 1 </math>x≤1。

  • a = 1, b = 0, x = 3 : 触发 <math xmlns="http://www.w3.org/1998/Math/MathML"> a ≤ 1 a \leq 1 </math>a≤1 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> b = 0 b=0 </math>b=0 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> a ≠ 2 a \neq 2 </math>a=2 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> x > 1 x > 1 </math>x>1。(出于简单起见, 这里不考虑逻辑中断的发生)

  • a = 2, b = 1, x = 1 : 触发 <math xmlns="http://www.w3.org/1998/Math/MathML"> a > 1 a > 1 </math>a>1 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> b ≠ 0 b \neq 0 </math>b=0 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> a = 2 a = 2 </math>a=2 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> x ≤ 1 x \leq 1 </math>x≤1。

组合覆盖

组合覆盖:每个判定中的所有可能的条件结果的组合,以及所有的入口点都至少执行一次。(注意"可能"二字,因为有些组合的情况难以生成。)

为了满足组合条件覆盖的测试用例, 必须覆盖以下八种组合。

  • a = 2, b = 0, x = 4 : 覆盖 1 + 5
  • a = 2, b = 1, x = 1 : 覆盖 2 + 6
  • a = 1, b = 0, x = 2 : 覆盖 3 + 7
  • a = 1, b = 1, x = 1 : 覆盖 4 + 8
相关推荐
FIT2CLOUD飞致云17 小时前
测试跟踪步骤描述用例交互优化,MeterSphere开源持续测试工具v2.10.26 LTS版本发布
软件测试·测试用例·测试·metersphere
霍格沃兹_测试1 天前
软件测试 | 测试开发 | 利用 pytest 玩转数据驱动测试框架
测试
Apifox4 天前
如何在 Apifox 中使用 OpenAPI 的 discriminator?
前端·后端·测试
utmhikari6 天前
【架构艺术】自动化测试平台架构设计的一些通用要点
自动化测试·功能测试·测试开发·架构·测试·系统设计·后端开发
漫谈测试7 天前
性能调优JVM参数优化方案有哪些
测试
研來如此8 天前
离线测试与在线测试
测试
霍格沃兹_测试8 天前
AI驱动的测试:用Dify工作流实现智能缺陷分析与分类
测试
霍格沃兹_测试8 天前
当Dify遇见Selenium:可视化编排UI自动化测试,原来如此简单
测试
大话性能9 天前
【Pycharm 调试技巧 03】7 步实现远程代码调试
测试
Apifox11 天前
Apifox 10 月更新|支持实时预览在线文档个性化配置的效果、性能优化、测试能力升级
前端·后端·测试