白盒测试的几种覆盖方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖详解

2023-11-11

文章转自:http://www.51testing.com/html/44/n-3713444.html

白盒测试用例设计的一个很重要的评估标准就是对代码的覆盖度。一说到覆盖,大家都感觉非常熟悉,但是常见的覆盖都有哪些?各自有什么优缺点?在白盒测试的用例设计中我们应该如何自如地运用呢?今天小编就为大家总结了一下几种常见的覆盖以及各自的优缺点。

白盒测试中常见的覆盖有六种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。下面我们就分别看看这几种不同的覆盖究竟是什么鬼。

一、语句覆盖(Statement Coverage)

语句覆盖,顾名思义就是针对代码语句的嘛。它的含义是我们设计出来的测试用例要保证程序中的每一个语句至少被执行一次。通常语句覆盖被认为是“最弱的覆盖”,原因是它仅仅考虑对代码中的执行语句进行覆盖而没有考虑各种条件和分支,因此在实际运用中语句覆盖很难发现代码中的问题。举个非常简单的例子:

public int foo(int a,int b)

{

return a/b;

}

这是一个求两数之商的函数。如果我们设计如下的测试用例:

TestCase: a = 2, b = 1

这时候我们会发现,该函数的代码覆盖率达到了100%,并且设计的case可以顺利通过测试。但是显然该函数有一个很明显的bug:当 b=0 时,会抛出异常。

二、判定覆盖(Decision Coverage)

判定覆盖也被成为分支覆盖(Branch Coverage),也就是说设计的测试用例要保证让被测试程序中的每一个分支都至少执行一次。举个例子,有如下流程图:

针对该图我们想要做到判定覆盖,可以设计如下case:

TestCase1: a=1, b=1    (路径:ab)

TestCase2: a=-1, b=-1    (路径:acd)

TestCase3: a=2, b=-1    (路径:ace)

判定覆盖比语句覆盖强一些,能发现一些语句覆盖无法发现的问题。但是往往一些判定条件都是由多个逻辑条件组合而成的,进行分支判断时相当于对整个组合的最终结果进行判断,这样就会忽略每个条件的取值情况,导致遗漏部分测试路径。

三、条件覆盖(Condition Coverage)

条件覆盖于分支覆盖不同,条件覆盖要求所设计的测试用例能使每个判定中的每一个条件都获得可能的取值,即每个条件至少有一次真值、有一次假值。

仍然以上面流程图作为例子来说明。上图中涉及到的条件一共有4个:

a>0, a<0, b>0, b<0

为了达到条件覆盖的目的,我们设计的用例需要在 a 点有:

a>0, a≤0, b>0, b≤0,

这些情况出现,并且在 c 点有:

a<0, a≥0, b<0, b≥0

这些情况出现。现在可以设计如下用例:

TestCase1: a=1, b=1    (路径:ab)

TestCase1: a=-1, b=-1    (路径:acd)

TestCase1: a=-1, b=0    (路径:ace)

TestCase1: a=1, b=-1    (路径:ace)

通常而言条件覆盖比判定覆盖强,因为条件覆盖使得判定中的每一个条件都取到了不同的结果,这一点判定覆盖则无法保证。但条件覆盖也有缺陷,因为它只能保证每个条件都取到了不同结果,但没有考虑到判定结果,因此有时候条件覆盖并不能保证判定覆盖。

四、判定条件覆盖(Decision/Condition Coverage)

判定条件覆盖,说白了就是我们设计的测试用例可以使得判断中每个条件所有的可能取值至少执行一次(条件覆盖),同时每个判断本身所有的结果也要至少执行一次(判定覆盖)。不难发现判定条件覆盖同时满足判定覆盖和条件覆盖,弥补了两者各自的不足,但是判定条件覆盖并未考虑条件的组合情况。

五、组合覆盖(Branch Condition Combination Coverage)

组合覆盖也叫做条件组合覆盖。意思是说我们设计的测试用例应该使得每个判定中的各个条件的各种可能组合都至少出现一次。显然,满足条件组合覆盖的测试用例一定是满足判定覆盖、条件覆盖和判定条件覆盖的。

针对前文提到的流程图,做条件组合覆盖时我们可以设计如下用例:

TestCase1: a=1, b=1    (路径:ab)

TestCase1: a=-1, b=-1    (路径:acd)

TestCase1: a=-1, b=0    (路径:ace)

TestCase1: a=1, b=-1    (路径:ace)

条件组合覆盖能够同时满足判定、条件和判定条件覆盖,覆盖度较高,但是组合覆盖的测试用例数量相对来说也是比较多的。

六、路径覆盖

路径覆盖,意思是说我们设计的测试用例可以覆盖程序中所有可能的执行路径。这种覆盖方法可以对程序进行彻底的测试用例覆盖,比前面讲的五种方法覆盖度都要高。那么这种方法是不是就一定最好呢?当然不能讲得这么绝对,它的缺点也是显而易见的:由于需要对所有可能的路径全部进行覆盖,那么我们需要设计数量非常巨大的而且较为复杂的测试用例,用例数量将呈现指数级的增长。所以理论上来讲路径覆盖是最彻底的测试用例覆盖,但实际上很多时候路径覆盖的可操作性不强。

总结

以上简单描述了几种不用的逻辑覆盖方法的原则和优劣。在实际的操作中,要正确使用白盒测试的代码覆盖方法,就要从代码分析和代码调研入手,根据调研的结果,可以选择上述方法中的某一种,或者好几种方法的结合,设计出高效的测试用例,尽可能全面地覆盖到代码中的每一个逻辑路径。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

白盒测试的几种覆盖方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖详解 的相关文章

  • Python使用管道、队列、zeromq进行IPC速度对比测试

    管道 import sys from multiprocessing import Process Pipe import time import result msg list for i in range 100 msg list ap
  • SpringAOP来监控service层中每个方法的执行时间

    使用AOP来说 太方便了 并且特别适合这类场景 代码如下 这里是将要统计的信息写到log文件中 也可以设计成写入表中 package com ecsoft interceptor import org aspectj lang Procee
  • STM32F1各个工作状态下的工作电流

    低功耗操作实验 文章非原创 从其他网站上摘录 如果侵犯到到 麻烦联系删除 实验目的 测量 STM32 在各种状态下的功耗 包括在不同时钟频率下 32M 8M 1M 100K 10K 不同振荡器 内部 外部 不同模式 活动 睡眠 停机 待机
  • Servlet+JSP+JavaBean开发模式(MVC)介绍

    好伤心 写登陆注册之前看见一篇很好的博文 没有收藏 然后找不到了 前几天在知乎上看见一个问题 什么时候感觉最无力 前两天一直想回答 尝试过google到的所有solve case 结果bug依然在 今天想回答 明明遇见过 就是找不到那篇文的
  • 软件测试笔记(九)- 兼容性测试

    了解如何针对不同的软件应用程序和操作系统交互的问题进行测试 一 兼容性测试综述 随着用户对来自各个厂商的各种类型程序之间共商数据能力和充分利用空间同时执行多个程序能力的要求 测试程序支架能否写作变得越来越重要 软件兼容性测试 softwar
  • 软件测试从自学到工作,软件测试学习到底要怎样进行?

    前言 首先 请不要奢望有多么简单的办法 学习没有捷径 这里只是让你明白这一点 顺便根据个人经验帮你理一下学习的过程 其实有文章是说怎么学习以及学习什么的 但是可能还是有些抽象 或者内容有点多 有点杂 以至于不少朋友仍然觉得不知道如何下手 大
  • 登录界面测试用例设计

    登录界面测试用例设计 一 界面测试点 1 界面的设计风格是否与UI的设计风格统一 2 界面中的文字简洁易懂 3 界面中没有错别字 二 用户名与密码在输入时 要考虑 1 正确的用户名与正确的密码 2 正确的用户名与错误的密码 3 错误的用户名
  • Bicubic Interpolation (双三次插值)

    在Wikipedia http en wikipedia org wiki Bicubic interpolation 上找到了bicubic的描述 不过它只给出了知道导数情况下的公式 后来在CSDN上找到了C语言的算法描述 http to
  • MCS-51 汇编指令集(J开头的指令)

    MCS 51系列单片机指令以J开头的指令有8条 分别为 JB bit rel JBC bit rel JC rel JMP A DPTR JNB bit rel JNC rel JNZ rel JZ rel 1 JB bit rel 指令名
  • 导入 导出 jeesite框架封装

    为什么80 的码农都做不了架构师 gt gt gt JeeSite的Excel导入 导出 支持大数据量 使用annotation最小化配置 介绍 对Apache POI 3 9的简单封装 实现Excel的导出导入功能 使用Annotatio
  • 【测试】三张图解读 CI/CD

    文章目录 前言 CI CD 的概述 CI持续集成 Continuous Integration 持续集成小结 CD 持续交付 Continuous Delivery 持续交付小结 CD 持续部署 Continuous Deployment
  • 优秀软件测试工程师必备的8个能力!-(附思维导图)

    结合自己以往的工作经验 自己梳理出来一些材料 绝对原创 绝对干货 优秀的软件测试工程师必备的 8个能力 作为一名软件工程师 需要的能力并不多 但是要成为一名优秀的软件测试工程师 需要的能力就比较多了 自己整理出来8个方面 每个方面都会分成很
  • python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

    前言 1 环境准备 python3 6 requests xlrd openpyxl HTMLTestRunner api 2 目前实现的功能 封装requests请求方法 在excel填写接口请求参数 运行完后 重新生成一个excel报告
  • 从零开始写一个Javascript解析器

    最近在研究 AST 之前有一篇文章 面试官 你了解过 Babel 吗 写过 Babel 插件吗 答 没有 卒 为什么要去了解它 因为懂得 AST 真的可以为所欲为 简单点说 使用 Javascript 运行Javascript代码 这篇文章
  • 整理一下go的ci工具

    代码格式化 go fmt fileName go goimports 自动格式化import goimports w fileName go mod 自动更新 删除包 go mod tidy 检查注释是否符合导出 1 安装revive go
  • 【app测试】adb常用指令及华为卸载预置软件

    adb基础指令 1 adb devices 显示当前运行的全部Android设备 2 adb s 设备编号 对某一设备执行命令 3 adb install APK路径 安装应用程序 r表示replace覆盖安装 连接了多台设备时 需要指定设
  • HeadFirst 设计模式学习笔记10——MVC分析

    1 M V C Model View Controller 模式 视图 控制器 这是一种范型 模型对象正是应用系统存在的理由 你设计的对象 包含了数据 逻辑和其他在你的应用领域创建定制的类 视图通常是控件 用来显示和编辑 控制器位于二者中间
  • 组合测试方法PK正交分析方法

    测试过程中 我们经常遇到需要覆盖多个变化参数的测试场景 如我们测试BS配置控制客户端组织资源远程配置一个设备时 进行一个设备通道视频参数设置的各种组合测试 如下图 多数情况下 类似于这种多组合测试时 老员工则是依靠经验去进行有针对性的测试
  • 使用SpringSecurity

    前几天写了一个SpringBoot对拦截器的使用 在实际项目中 对一些情况需要做一些安全验证 比如在没有登录的情况下访问特定的页面应该解释的拦截处理 这一篇介绍使用SpringSecurity来做简单的安全控制 由于SpringSecuri
  • ASTM D6147测定压缩情况下硫化橡胶和热塑弹性体作用力衰减 (应力松弛) 的标准试验方法

    标准名称 ASTM D6147 Standard Test Method for Vulcanized Rubber and Thermoplastic Elastomer Determination of Force Decay Stre

随机推荐

  • 电脑提示d3dcompiler_47.dll缺失怎么修复?

    d3dcompiler 47 dll是 Microsoft 的 DirectX 11 核心组件之一 它主要用于编译和运行 Direct3D 11 应用程序和游戏 如果您的系统中缺少这个 DLL 文件 可能会导致一些程序无法正常运行 很多游戏
  • CMake----if与option使用小记

    在CMake中if语法比较简单 if后面括号中的参数随着CMake版本的推进 在else和endif中也可以不用写了 if address else endif 对于if语法 比较常用的就是字符串比较了 这里个人简单用到过两种 一种是这个变
  • 使用scoped穿透方法实现修改vue中mint UI组件样式

    效果 代码 div class goods swiper div
  • 图书商城系统

    摘 要 随着信息科学技术的不断发展与完善 信息化已经成为个人之间甚至是国家之间商务发展的一大趋势 并且广泛应用于商业贸易 国际化的网络 计算机科学以及网络通信之中 电子商务正是依托信息化技术的迅猛发展将全球化的市场集中在网络平台之中 打破了
  • c++基本类型和变量

    基本类型 c 内置类型 setlocale LC ALL chs bool bo true char ch a wchar t wch L 中国 short sh 32767 32768 32767 int i 10 32768 32767
  • runas 显示740 所需的操作需要提升的解决方法

    域环境中 有些软件启动需要用到管理员权限 所以对user用户来说比较麻烦 对IT来说也挺麻烦 每次使用都需要输一次账号密码 后来使用了runas工具就方便了 虽然有些不安全 今天发现这个不起作用了 cmd里输入语句 提示 740 所需的操作
  • C语言内存四区的学习总结(一)---- 静态区

    最近重新学习C语言相关知识 重新提到内存四区的概念 那么在之前的学习的基础上 在这儿做一个简单的总结与分享 一 内存四区建立的流程 可以简单直观的查看下面的这个图片 直接的说明我们的程序在内存中是如何去存储 运行 程序运行的流程说明 1 操
  • 引入字体包

    我接触的设计师都比较喜欢用苹方字体 然后每次都要引入字体包 首先一定要设计师给ttf格式的文件 然后在scss中引入 font face font family PingFangSC Regular font weight normal s
  • pandas数据读取与清洗视频03-pd.read_csv()读取csv、txt文件

    本系列课程适用人群 python零基础数据分析的朋友 在校学生 职场中经常要处理各种数据表格 或大量数据 十万级以上 的朋友 喜欢图表可视化的朋友 系列视频目前可在B站观看 会定期更新 欢迎大家吐槽 本节概要 数据量较大时一般保存为csv或
  • Wireshark TS

    问题背景 用户反馈说观察到一个设备连接的奇怪问题 客户端 172 18 0 122 尝试连接到服务器 172 18 50 1 之后服务器回复 SYN ACK 再收到消息后不久 客户端直接发送 RST 并在一段时间后又重复尝试连接 总结下来就
  • RPC通信功能实现

    Table of Contents RPC通信功能实现 配置参数 调用方法 RPC通信功能实现 HBase的RPC通信功能主要基于Protobuf和NIO这两个组件来实现 在通信管道上选择的是protobuf对外声明的BlockingRpc
  • Linux——僵尸进程以及僵尸进程的处理

    僵尸进程 1 进程中的指令已经执行完成 但是进程PCB结构还没有回收 即子进程先于父进程退出后 子进程的PCB需要其父进程释放 但是父进程并没有释放子进程的PCB 这样的子进程就称为僵尸进程 2 父进程未结束 子进程结束 但父进程没有处理子
  • C语言三大标准C89,C99和C11

    C89 标准 1983 年美国国家标准局 American National Standards Institute 简称 ANSI 成立了一个委员会 专门来制定C语言标准 1989 年C语言标准被批准 被称为 ANSI X3 159 19
  • 59 KVM Skylark虚拟机混部-概述、架构及特性

    文章目录 59 KVM Skylark虚拟机混部 概述 架构及特性 59 1 Skylark概述 59 1 1 问题背景 59 1 2 总体介绍 59 2 架构及特性 59 2 1 总体实现框架 59 2 2 功耗干扰控制 59 2 3 L
  • 树-树的遍历(先序、中序、后序)

    树的遍历 树的遍历方式主要分为四种 先序 中序 后序和层序 在这篇博客中我将仔细介绍一下树的这四种遍历方式 先序遍历 先序遍历 也叫先根遍历 前序遍历 首先访问根结点然后遍历左子树 最后遍历右子树 在遍历左 右子树时 仍然先访问根结点 然后
  • discuz常用函数调用

    调用主题的查看次数 lang show G forum thread views discuz帖子正文下方有一组自动推荐的相关帖子 其调用代码为 div class mtw mbw h3 class pbm mbm bbda lang re
  • 【Bug修复】安装BurpSuite时,配置完Java环境后burp-loader-keygen.jar无法打开的问题

    前言 我们在安装BurpSuite时需要打开 jar文件 打开jar文件的前提是安装java环境 这里我安装的是1 8版本的 正常流程是安装好java环境可以直接打开 jar文件 而我的不行 我的图标 文件类型也没有任何变化 工具分享链接链
  • [Windows Azure] What is a cloud service?

    What is a cloud service When you create an application and run it in Windows Azure the code and configuration together a
  • 目标检测器训练过程总结(HyperLPR)

    1 项目背景 开源项目HyperLPR 在车牌粗定位 提取 阶段 依赖于训练好的模型文件cascade xml 而该文件是一个由基于OpenCV的Haar级联分类器训练出来的模型 HyperLPR作者有在他的博客中谈到了该模型文件的训练过程
  • 白盒测试的几种覆盖方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖详解

    文章转自 http www 51testing com html 44 n 3713444 html 白盒测试用例设计的一个很重要的评估标准就是对代码的覆盖度 一说到覆盖 大家都感觉非常熟悉 但是常见的覆盖都有哪些 各自有什么优缺点 在白盒