【白盒测试】逻辑覆盖和路径测试的设计方法

  • 📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢交流讨论:欢迎加入我们一起学习!
  • 📢资源分享:耗时200+小时精选的「软件测试」资料包
  • 📢 软件测试学习教程推荐:火遍全网的《软件测试》教程

前言

 白盒测试主要是检查程序的内部结构、逻辑、循环和路径。白盒测试的常用用例设计方法有逻辑覆盖和基本路径测试。

根据覆盖测试的目标不同,逻辑覆盖又可分为语句覆盖、判断覆盖、条件覆盖、判断/条件覆盖、条件组合覆盖及路径覆盖。

1. 一个程序模块的例子

图1 一个程序模块的例图

从图中可知,该程序模块有4条不同的路径、4个可执行语句。这4条路径可分别表示为:

L1(a→c→e)简化为ace;

L2(a→b→d)简化为abd;

L3(a→b→e)简化为abe;

L4(a→c→d)简化为acd;

4条路径应该满足的逻辑表达式分别为:

记M={(A>1)and(B=0)},N={(A=2)or(X>1)}

L1(a→c→e)= M and N

L2(a→b→d)= /M and /N

L3(a→b→e)= /M and N

L4(a→c→d)= M and /N

其中,“/M”表示M的反,“/N”表示N的反,或者将4条路径应该满足的逻辑表达式写为:

L1(a→c→e)= {(A>1)and(B=0)} and {(A=2)or(X/A>1)} ;

L2(a→b→d)= / {(A>1)and(B=0)} and / {(A=2)or(X>1)} ;

L3(a→b→e)=/ {(A>1)and(B=0)} and {(A=2)or(X>1)} ;

L4(a→c→d)= {(A>1)and(B=0)} and / {(A=2)or(X/A>1)};

其中,由符号“and”连接起来的语句是为了遍历这条路径各个输入变量应取值的范围,而由“or”划分了几组可选的取值。根据上面导出的逻辑表达式,就可以用来设计测试用例。

2. 语句覆盖

语句覆盖就是设计若干个测试用例,运行所测程序,使得每一条可执行语句至少执行一次。对上面的例子,所有的可执行语句都在路径L1上,所以选择路径L1来设计测试用例,就要覆盖所有的可执行语句。

测试用例设计的格式如下:

[输入的(A,B,X),输出的(A,B,X)]为覆盖路径:L1(a→c→e)= M and N,{(A>1)and(B=0)} and {(A=2)or(X/A>1)}。可设计出满足语句覆盖的测试用例是:

[(2,0,4),(2,0,3)],覆盖ace[L1]。

从每个执行语句都得到执行这一点来看,语句覆盖的方法似乎能能够比较全面地检验每个可执行语句,但实际上并非如此。

语句覆盖的不足之处是:假如该程序段中的两个逻辑运算有问题,例如,第一个判断中的逻辑运算符“&&”写成了“||”,或者第二个判断中的逻辑运算符“||”错写成了“&&”,利用上面的测试用例,仍然可覆盖所有4个可执行语句,这说明虽然做到了语句覆盖测试,但可能发现不了判断时逻辑运算中出现的错误。语句覆盖是最弱的逻辑覆盖准则。

3. 判断覆盖

判断覆盖就是设计若干个测试用例,运行所测程序,使得程序中每个判断的取TRUE分支和取FALSE分支至少经历一次。判断覆盖又称为分支覆盖。

根据定义,可分别选择路径L1和L2或者路径L3和L4设计测试用例。

如果选择路径L1和L2,则可得到满足要求的测试用例:

[(2,0,4),(2,0,3)],覆盖ace[L1]

[(1,1,1),(1,2,1)],覆盖abd[L2]

如果选择路径L3和L4,则可设计另一组测试用例:

[(2,1,1),(2,1,2)],覆盖abe[L3]

[(3,0,3),(3,0,1)],覆盖acd[L4]

可见,测试用例的选择不唯一。

判断覆盖的不足之处是:假如第二个判断中的条件X>1被错写成了X<1,利用上面的两组测试用例仍能得到同样的结果。

4. 条件覆盖

条件覆盖就是设计若干个测试用例,运行所测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。因此,首先要对所有的条件加以标记。

对第一个判断:

条件A>1取TRUE时为T1,取FALSE时为F1;
条件B=0取TRUE时为T2,取FALSE时为F2;
对第二个判断:

条件A=2取TRUE时为T3,取FALSE时为F3;
条件X>1取TRUE时为T4,取FALSE时为F4。
根据这8个条件取值,可分别设计如下两组测试用例,如表1和表2所列。

表1 第一组

表2 第二组

由表1和表2可以看出,两组测试用例都满足了条件覆盖,即覆盖了所有的体哦阿健取值。条件覆盖的不足之处是:第一组测试用例不满足判断(分支)覆盖的要求。

5. 判断-条件覆盖

判断-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行一次。也就是说,要求各个判断的所有可能的条件取值组合至少执行一次。

根据判断-条件覆盖的定义,只需设计下面两个测试用例来覆盖例子的8个条件取值以及4个判断分支,如表3所列。

表3 判断分支列表

判断-条件覆盖的不足之处是:从表面上看来,判断-条件覆盖测试了所有条件的取值,但实际上并非如此,而是某些条件掩盖了另一些条件(由于多重条件判定),例如,对条件表达式(A>1)AND(B=0)来说,若(A>1)的测试结果为FALSE,可以立即确定表达式的结果为FALSE,这时往往就不再测试(B=0)的取值了,因此,条件(B=0)就没有被检查。同样,对条件表达式(A=2)OR(X>1)来说,若(A=2)的测试结果为TRUE,就立即确定表达式的结果为TRUE,这时,条件(X>1)就没有被检查。

因此,采用判断-条件覆盖测试,逻辑表达式中的错误不一定能够检查的出来。

6. 条件组合覆盖

条件组合覆盖就是设计足够的测试用例,运行所测程序,使得每个判断的所有可能的条件取值组合至少执行一次。

针对上面的例子,先对各个判断的条件取值组合加以标记,如表4所列。

表4 判断条件取值组合表

对每个判断,要求所有可能的条件取值的组合都必须取到。每个判断各有两个条件,所以各有4个条件取值的组合。

注意:这里没有要求第一个判断的4个组合再与第二个判断的4个组合进行组合成16个组合。

设计4个测试用例,就可覆盖上面的8种条件组合,如表5所列。

表5 4个测试取值组合列表

 这些测试用例覆盖了所有条件的可能取值的组合,覆盖了所有判断的可取分支。条件组合覆盖的不足之处:没有覆盖路径L4,这样的测试还不完全。

7. 路径覆盖

路径覆盖就是设计足够的测试用例,覆盖程序中所有可能的路径。可设计下面的4个测试用例,覆盖全部4条路径。表6所列是对应实例程序的路径覆盖测试用例。

表6 设计4个测试用例覆盖全部4条路径

 路径覆盖的不足之处,没有全部覆盖判断的条件取值的组合,如②③⑥。 

8. 测试用例的组合和优化

对该例子,采用逻辑覆盖方法中的任何一种都不能满足所有需求,如果每个方法都采用,又有测试用例的重复。如何用最少的测试用例满足最多的需求呢?在设计中,这是一个值得考虑和解决的问题。

对于本例,我们采用条件组合覆盖和路径覆盖两种方法设计测试用例,并进行优化,可得到如表7所列的测试用例。

表7 采用条件组合覆盖和路径覆盖设计测试用例表

采用上面的8个测试用例,可满足所有逻辑覆盖测试。

结语

这篇帖子到这里就结束了,最后,希望看这篇帖子的朋友能够有所收获。如果想以测试为长期发展职业目标,是需要时刻保持学习的,要使自己具备竞争力,无论你现在工作几年,只要行动起来,你就已经占优势了。祝大家2024年能升职加薪,没入职的就早日拿到心仪公司的offer,事事顺遂。

最后我邀请你进入我们的软件测试学习交流群:785128166, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

​​

这些资料,对于从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

关注【公众号:豆子熊】免费领取!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网演进历程:从“全球等待”到“全球智慧”的技术革新与商业变革

文章目录 一、导言二、World Wide Wait (全球等待)阶段1. 技术角度2. 用户体验3. 企业收益4. 教育影响 三、World Wide Web (万维网)阶段1. 技术角度2. 用户体验3. 企业收益4. 教育影响 四、World Wide Wisdom (全球智慧)阶段1. 技术角度2. 用户体验3. 企业收益4. 教育影响 五、…

Vue 3.4 正式版发布,带来多项更新

12 月 28 日,Vue 3.4 正式版发布,代号为“🏀 Slam Dunk”,即灌篮高手。据尤大接收,这个版本进行了许多重要的内部改进,其中最引人瞩目的是重写的模板解析器。新的解析器将速度提高了 2 倍,显著提升了整体性能。 此外,响应性系统也经过了重构,使得 effect 触发更为精…

Java编程中的IO模型详解:BIO,NIO,AIO的区别与实际应用场景分析

IO模型 IO模型就是说用什么样的通道进行数据的发送和接收&#xff0c;Java 共支持3种网络编程IO 模式&#xff1a;BIO,NIO,AIO BIO(Blocking lO) 同步阻塞模型&#xff0c; 一个客户端连接对应一个处理线程 代码示例&#xff1a; package com.tuling.bio; import java.io.…

SQL BETWEEN 操作符

BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。 SQL BETWEEN 语法 SELECT column1, column2, ... FROM table_name WHERE column BETWEEN value1 AND value2; 参数说明&#xff1a; column1, column2, ...&#xff1a;要选择的字段名…

DeepL翻译器,一直想使用怎么办?

作为一个独立开发者&#xff0c;将应用程序翻译到不同语言是个让我很头大的事情。请专业人员翻译太贵无法承受&#xff0c;谷歌翻译质量太差时常词不达意。 如何使用 DeepL 使用起来很直观&#xff0c;打开此网页粘贴要翻译的内容即可。它也支持 macOS 和 PC 端。 这里开我们开…

LinuxShell

一、 新建用户 在Linux上新建一个用户并赋予超级用户权限&#xff0c;建立家目录并设置默认shell为bash&#xff0c;并设置Linux在输入sudo密码时显示星号。请提交全部命令及输出截图&#xff08;表明完成需求即可&#xff09;。 1.sudo useradd -m ymhs(用户名) 增加用户 2.su…

Transformer:Attention机制、前馈神经网络、编码器与解码器

主要介绍Transformer的一些工作原理与优势。 文章目录 Transformer中的Attention机制 一、引言 二、Transformer中的Attention机制 1. 背景介绍 2. 工作原理 3. 优势分析 Transformer中的前馈神经网络 一、引言 二、神经网络的基本概念 三、前馈神经网络 四、Transformer中的前…

SpingBoot的项目实战--模拟电商【5.沙箱支付】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringBoot电商项目的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一. 沙箱支付是什么 二.Sp…

2分钟了解什么是socket?

文章目录 概念比喻类型Socket 与 TCP、UDP的关系 概念 Socket 是提供网络通信功能的编程接口&#xff08;API&#xff09;&#xff0c;提供了网络通信的基本操作&#xff0c;允许程序或进程之间进行数据交换。是传输层协议的具体软件实现&#xff0c;它封装了协议底层的复杂实…

【干货】Windows中定时删除system32目录下的.dmp文件教程

旭帆科技的技术人员除了给用户答疑解惑以外&#xff0c;还会主动测试软件性能&#xff0c;进行平台优化&#xff0c;除此之外&#xff0c;技术人员还会总结一些技术干货&#xff0c;这不&#xff0c;近期又提供了一份如何在Windows中定时删除system32目录下的.dmp文件的教程。感…

CRM软件对企业发展起着哪些作用?CRM的功能解析

虽然不少科技成果昙花一现&#xff0c;但CRM管理系统作为销售和营销领域的核心技术&#xff0c;已经牢牢占据了不可撼动的地位。拥有一个部署得当的CRM系统能为企业带来诸多好处。它可以跟踪和管理销售人员与潜在/现有客户的所有互动和沟通&#xff0c;并帮助他们识别出需要重点…

msvcp140.dll文件缺失要怎么修复?msvcp140.dll重新安装的解决方法

使用Windows系统时&#xff0c;dll文件丢失的问题时有发生&#xff0c;特别是msvcp140.dll文件缺失问题&#xff0c;它会导致某些程序无法运行。针对这一常见问题&#xff0c;本文将详细阐述如何应对和修复msvcp140.dll文件缺失的状况&#xff0c;提供多个解决方案&#xff0c;…

Java多线程-14

目录 程序线程进程 并发并行​编辑 创建线程的基本方式 程序线程进程 并发并行 创建线程的基本方式&#xff08;1&#xff09; package com.edu.threaduse;public class Demo01 {public static void main(String[] args) throws InterruptedException {//创建Cat对象&…

DolphinScheduler实际应用

前言 最近公司新启动了一个项目&#xff0c;然后领导想用一下新技术&#xff0c;并且为公司提供多个大数据调度解决方案&#xff0c;我呢就根据领导要求调研了下当前的开源调度工具&#xff0c;最终决定采用DolphinScheduler&#xff0c; 因此研究了一下DolphinScheduler &…

今日聊聊寒假假期如何不颓废

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

安全防御之身份鉴别技术

身份认证技术用于在计算机网络中确认操作者的身份。在计算机网络世界中&#xff0c;用户的身份信息是用一组特定的数据来表示的&#xff0c;计算机也只能识别用户的数字身份。身份认证技术能够作为系统安全的第一道防线&#xff0c;主要用于确认网络用户的身份&#xff0c;防止…

Linux-进程间通信_管道

项目场景&#xff1a; 须熟知文件管理和进程方面的基础知识 通过Xshell和VScode 相互进行远程开发&#xff0c;学习进程间通信的其中一种方式——管道。 问题描述 依照我们曾经所学的知识&#xff0c;我们仅仅只能在单个进程中进行数据的交互&#xff0c;但是在实际应用中&a…

算法第七天-粉刷房子Ⅲ

粉刷房子Ⅲ 题目要求 解题思路 来自[宫水三叶] 动态规划 定义 f[i][j][k] 为开了前i间房子&#xff0c;且第 i 间房子的颜色编号为 j&#xff0c; 前 i 间房子形成的分区数量为 k 的所有方案中的[最小上色成本]。 我们不失一般性的考虑 f[i][j][k] 该如何转移&#xff0c;由…

Sentinel使用

前言&#xff1a; 所有的准备工作都做好了&#xff0c;就可以进入到Sentinel的具体使用上了&#xff0c;这里还需要一个测试工具叫做jmeter&#xff0c;是一个很好的测试工具&#xff0c;专门针对并发的&#xff0c;准备好以后&#xff0c;就可以直接开干了。 一、Sentinel作用…

闲人闲谈PS之五十一——项目物料移动中的2个WBS

惯例闲话&#xff1a;2024年在不知不自觉中已经到来&#xff0c;之前闲人也聊起过2023年是忙碌和收获的一年。今年的任务初步排一下&#xff0c;也基本上排到年底去了&#xff0c;又会是忙碌的一年。虽然忙碌&#xff0c;但是今年对于自己而言&#xff0c;有更加重要的事情要去…