【5.19】三、白盒测试方法—逻辑覆盖法
目录
3.1 逻辑覆盖法
3.1.1 语句覆盖
3.1.2 判定覆盖
3.1.3 条件覆盖
3.1.4 判定—条件覆盖
3.1.5 条件组合覆盖
3.1.6 实例:三角形逻辑覆盖问题
白盒测试又称为透明盒测试、结构测试,它基于程序内部结构进行测试,而不是测试应用程序的功能(黑盒测试)。因此,测试人员需要了解程序内部逻辑结构,从编程语言的角度设计测试用例。白盒测试可用于单元测试、集成测试和系统测试。
3.1 逻辑覆盖法
逻辑覆盖法是白盒测试最常用的测试方法,它包括语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖5种。
3.1.1 语句覆盖
语句覆盖(Statement Coverage)又称行覆盖、段覆盖、基本块覆盖,它是最常见的覆盖方式。
语句覆盖的目的是测试程序中的代码是否被执行,它只测试代码中的执行语句,这里的执行语句不包括头文件、注释、空行等。
语句覆盖在多分支的程序中,只能覆盖某一条路径,使得该路径中的每一个语句至少被执行一次,但不会考虑各种分支组合情况。
1 IF x>0 AND y<0 //条件1
2 z=z-(x-y)
3 IF x>2 OR z>0 //条件2
4 z=z+(x+y)
该段程序的流程图如:(a、b、c、d、e表示程序执行分支)

在语句覆盖测试用例中,使程序中每个可执行语句至少被执行一次。根据程序流程图中标示的语句执行路径设计测试用例:Test1:x=1 y=-1 z=2
执行上述测试用例,程序运行路径为acd。可以看出程序中acd路径上的每个语句都能被执行,但是语句覆盖对多分支的逻辑无法全面反映,仅仅执行一次不能进行全面覆盖,因此,语句覆盖是弱覆盖方法。
语句覆盖虽然可以测试执行语句是否被执行到,但却无法测试程序中存在的逻辑错误,例如,如果上述程序中的逻辑判断符号“AND”误写成了“OR”,使用测试用例Test1同样可以覆盖acd路径上的全部执行语句,但却无法发现错误。
3.1.2 判定覆盖
判定覆盖(Decision Coverage)又称为分支覆盖,其原则是设计足够多的测试用例,在测试过程中保证每个判定至少有一次为真值,有一次为假值。
判定覆盖的作用是使真假分支均被执行,虽然判定覆盖比语句覆盖测试能力强,但仍然具有和语句覆盖一样的单一性。
以上面的流程图及其程序为例,设计判定覆盖测试用例:

这4个测试用例覆盖了acd、abd、ace、abe 4条路径,使得每个判定语句的取值都满足了各有一次“真”与“假”。相比于语句覆盖,判定覆盖的覆盖范围更广泛。
判定覆盖虽然保证了每个判定至少有一次为真值,有一次为假值,但是却没有考虑到程序内部的取值情况,例如,测试用例test4,没有将x>2作为条件进行判断,仅仅判断了z>0的条件。
判定覆盖语句一般是由多个逻辑条件组成的,如果仅仅判断测试程序执行的最终结果而忽略每个条件的取值,必然会遗漏部分测试路径,因此,判定覆盖也属于弱覆盖。
3.1.3 条件覆盖
条件覆盖(Condition Coverage)指的是设计足够多的测试用例,使判定语句中的每个逻辑条件取真值与取假值至少出现一次,例如,对于判定语句IF(a>1 OR c<0)中存在a>1、c<0 2个逻辑条件,设计条件覆盖测试用例时,要保证a>1、c<0的“真”“假”值至少出现一次。
以上面的流程图及其程序为例,设计条件覆盖测试用例,在该程序中,有2个判定语句,每个判定语句有2个逻辑条件,共有4个逻辑条件,使用标识符标识各个逻辑条件取真值与取假值的情况:
设计测试用例时,要保证每种状态都至少出现一次。设计测试用例的原则是尽量以最少的测试用例达到最大的覆盖率,则该段程序的条件覆盖测试用例如:(这里保证了每种状态都出现了一次,但并没有列出所有的可能)

3.1.4 判定—条件覆盖
判定-条件覆盖(Condition/Decision Coverage)要求设计足够多的测试用例,使得判定语句中所有条件的可能取值至少出现一次,同时,所有判定语句的可能结果也至少出现一次。
表中的3个测试用例满足了所有条件可能取值至少出现一次,以及所有判定语句可能结果也至少出现一次的要求。(但依然没有列出所有的可能)
相比于条件覆盖、判定覆盖,判定-条件覆盖弥补了两者的不足之处,但是由于判定-条件覆盖没有考虑判定语句与条件判断的组合情况,其覆盖范围并没有比条件覆盖更全面,判定-条件覆盖也没有覆盖acd路径,因此判定-条件覆盖仍旧存在遗漏测试的情况。
3.1.5 条件组合覆盖
条件组合(Multiple Condition Coverage)指的是设计足够多的测试用例,使判定语句中每个条件的所有可能至少出现一次,并且每个判定语句本身的判定结果也至少出现一次,它与判定-条件覆盖的差别是,条件组合覆盖不是简单地要求每个条件都出现“真”与“假”两种结果,而是要求让这些结果的所有可能组合都至少出现一次。
还是以上述的流程图及其程序为例,该程序中共有4个条件:x>0、y<0、x>2、z>0,依然用S1、S2、S3、S4标记这4个条件成立,用-S1、-S2、-S3、-S4标记这些条件不成立。由于这4个条件每个条件都有取“真”“假”两个值,因此所有条件结果的组合有2^4=16种:
表中列出了4个条件所有结果的组合情况,经过分析可以发现,第2、6、8、13这4种情况是不存在的,这几种情况要求x>0不成立,x>2成立,这2种结果相悖,因此最终图中的所有条件组合情况有12种。根据这12种情况设计测试用例:

表中有12个测试用例,这12个测试用例覆盖了4个条件结果的所有组合,与判定-条件覆盖相比,条件组合覆盖包括了所有判定-条件覆盖,因此它的覆盖范围更广。但是当程序中条件比较多时,条件组合的数量会呈指数型增长,组合情况非常多,要设计的测试用例也会增加,这样反而会使测试效率降低。
3.1.6 实例:三角形逻辑覆盖问题
1 INT A B C //三角形的 3 条边
2 IF((A+B>C)&&(A+C>B)&&(B+C)>A) //是否满足三角形成立条件
3 IF((A==B)&&(B==C)) //等边三角形
4 等边三角形
5 ELSE IF((A==B)||(B==C)||(A==C)) //等腰三角形
6 等腰三角形
7 ELSE //一般三角形
8 一般三角形
9 ELSE
10 不是三角形
11 END

如果使用判定覆盖,使程序中每个判定语句至少有一次“真”值,至少有一次“假”值,根据图2和图3可设计4个测试用例:

相关文章:
【5.19】三、白盒测试方法—逻辑覆盖法
目录 3.1 逻辑覆盖法 3.1.1 语句覆盖 3.1.2 判定覆盖 3.1.3 条件覆盖 3.1.4 判定—条件覆盖 3.1.5 条件组合覆盖 3.1.6 实例:三角形逻辑覆盖问题 白盒测试又称为透明盒测试、结构测试,它基于程序内部结构进行测试,而不是测试应用程序…...
Linux安装MySQL后无法通过IP地址访问处理方法
本文主要总结Linux安装Mysql后,其他主机访问不了MySQL数据库的原因和解决方法 环境说明: MySQL 5.7.30CentOS Linux release 7.6.1810 (Core) 创建完Mysql数据库后可以查看mysql 日志获取root 用户登录密码 [rootlocalhost mysql-5.7.30]# cat /var/l…...
使用Python实现Rest API指南
在今天的数字化世界中,数据的获取、交换和使用已经成为几乎所有行业的核心部分。无论您正在为一个大型公司设计复杂的软件系统,还是只是为了个人项目尝试获得一些公开的数据,理解和利 用API——尤其是RESTful API——都是一项至关重要的技术。…...
【2023 · CANN训练营第一季】进阶班 应用开发深入讲解→模型推理
1 模型离线推理 各步要解析如下: Host&Device内存管理与数据传输: Host&Device上的内存申请与释放,内存间的相互拷贝;模型加载:将离线的om文件加载到Device上;在样例的资源初始化模块中进行。模型输入输出准备∶根据禹线om的输入输出,在Device…...
单词分析问题
题目描述 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出…...
3个月出国|材料科学老师自费赴韩国访学
K老师指定韩国为访学的目标国家,希望专业匹配,尽快出国。最终我们获得了韩国庆北大学的邀请函,其学校名气、专业匹配度及导师影响力都符合K老师的要求。本案例从开始委托我们申请到最终出国,仅仅用时3个月。 K老师背景:…...
MaaS来临,SaaS进入「奇点」时刻|产业深度
大模型热度持续发酵。MaaS的到来,不仅改变了云厂商的竞争格局,SaaS行业也将迎来「奇点」时刻。未来十年,基于MaaS底座,国内SaaS甚至可能会出现Salesforce一样的巨头。 作者|思杭 编辑|皮爷 出品|产业家 大模型热度正在持续发酵。…...
课程分享:华清远见联合NXP推出i.MX8M Plus开发与实践课程,超干超实用!
课程名称: i.MX8M Plus开发与实践课程 课程介绍: i.MX8M Plus应用处理器是NXP推出的一款致力于推动机器学习(ML),机器视觉,多媒体与工业边缘物联网应用的工业人工智能芯片。拥有4个ARM Cortex-A53核心…...
idea将java程序打包为jar
idea将java程序打包为jar 灵光一现: 用java拉起浏览器,打开指定的网络地址,省的手动打开浏览器再复制地址过去了 本文记录了使用idea将java程序打包为jar包的过程 源码地址:https://gitcode.net/qq_39339588/jar.git 文章目录 ide…...
快速掌握Redis基础知识及使用技巧
Redis 是一个高性能、基于内存的键值数据库,其主要特点是支持多种数据结构和高并发读写操作。在本文中,我们将介绍 Redis 的基本概念和使用方法,以帮助读者快速入门 Redis。 Redis 的基本概念 Redis 是一种基于内存的高性能 key-value 存储系…...
C++控制台打飞机小游戏
我终于决定还是把这个放出来。 视频在这:https://v.youku.com/v_show/id_XNDQxMTQwNDA3Mg.html 具体信息主界面上都有写。 按空格暂停,建议暂停后再升级属性。 记录最高分的文件进行了加密。 有boss(上面视频2分47秒)。 挺好…...
Pinna的使用以及pinna的持续化存储(两种方法)
一、简介 pinia是 vue3 新的状态管理工具,简单来说相当于之前 vuex,它去掉了 Mutations 但是也是支持 vue2 的,需要的朋友可以参考下 二、使用方法 1.安装 npm install pinia -S 2..引入 import { createPinia,PiniaPluginContext } from p…...
开发中造成空指针的常见用法,如何避免
1. 前言 《手册》的第 7 页和 25 页有两段关于空指针的描述: 【强制】Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。 【推荐】防止 NPE,是程序员的基本修养,注意 NPE 产生的场景: 返回类型为…...
MySQL事务和索引
目录 事务的概念 事务的四大特性(ACID) 原子性 隔离性 持久性 一致性 什么是脏读、幻读和不可重复读? 脏读 幻读 不可重复读 事务的隔离级别 读未提交 读已提交 可重复读 串行化 索引 索引优点 索引缺点 索引分类 索引设…...
Kali工具集简介
Kali Linux提供了数种经过定制的专门为渗透测试设计的工具。工具都会按下图中下拉选单所示的方式按组分类聚合。了解工具是做渗透测试第一个认知。 口Information Gathering(信息收集) 这些都是侦察工具,用来收集目标网络和设备的数据。在这类工具中,从找出设备的工具到查看使…...
离散数学 | 图论 | 欧拉图 | 哈密顿图 | 割点 | 桥(欧拉图和哈密顿图有没有割点和桥?)
本文主要解决以下几个问题: 1.欧拉图能不能有割点,能不能有桥? 2.哈密顿图能不能有割点,能不能有桥? 首先我们要明白几个定义 割点的定义就是在一个图G中,它本来是连通的,去掉一个点v以后这个…...
Android生命周期:理解与应用
摘要:Android生命周期是开发Android应用程序时至关重要的概念。本文将介绍Android生命周期的概念、生命周期方法的执行顺序以及如何在应用程序中正确地管理生命周期。我们还将讨论生命周期对于应用程序的重要性,并提供一些实际应用中的最佳实践和注意事项…...
00后真的是内卷王中王,真的想离职了....
都说00后躺平了,但是有一说一,该卷的还是卷。这不,前段时间我们公司来了个00年的,工作没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。…...
linux Fd以及重定向讲解
感谢你的阅读,是对我最大的鼓励!!!! 目录 fd理解 文件操作重定向 让我们回顾C语言文件操作 首选我们要知道2个知识点: 额外知识点 如何理解一切皆文件呢? 当父进程fork创建子进程是否创建…...
Moonbeam近日提案公投一览
正在跟进Moonbeam治理的小伙伴,一起来快速浏览一下近期生态中正在发生的事情吧!其中包含多个去中心化应用的Grant加速计划提案、HRMP开拓提案以及优化质押相关平台的内容。许多提案都与网络的运作息息相关,一起了解和参与Moonbeam的发展吧&am…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
