what's the 白盒测试
what's the 白盒测试
白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。白盒要考虑测试用例对程序内部的覆盖程度,最好的白盒测试是能覆盖到每一条路径,但是由于路径数目极大,要执行每一条路径是不可能。但我们能做到就是让覆盖率变高一点,下面要介绍的六种覆盖测试方法,看看他们的覆盖程度。
六种白盒测试:(覆盖率从低到高排序)
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 判定/条件覆盖
- 条件组合覆盖
- 路径覆盖
一、语句覆盖
“语句覆盖”是一个比较弱的测试标准,它的含义是:在测试时,首先设计若干个测试用例,然后运行被测程序, 使程序中的每个可执行语句至少执行一次。这时所谓“若干个”,自然是越少越好。
用例设计:

从本例可看出,语句覆盖实际上是很弱的,程序中每个语句都得到执行这一点来看,语句覆盖的方法似乎能够比较全面地 检验每一个语句。但它也绝不是完美无缺的。假如这一程序段中两个判断的逻辑运算 有问题,如果第一个条件语句中的AND错误地编写成OR,上面的测试用例是不能发现这个错误的;又如第三个条件语句中X>1误写成X>0,这个测试用例也不能暴露它,此外,沿着路径abd执行时,X的值应该保持不变,以为每个语句都经历过,似乎可以放心了。其实这种测试不十分可靠。语句覆盖在测试被测程序中,除去对检查不可执行语句有一定作用外,并没有排除被测程序包含错误的风险。
总之,一般认为“语句覆盖”是很不充分的一种标准。
优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。
缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句(即可执行语句),但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。
二、判定覆盖
比“语句覆盖”稍强的覆盖标准是“判定覆盖”(或称branch coverage分支覆盖)标准。判定覆盖准则进行测试是指,设计若干测试用例,运行被侧程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足。判定覆盖又称为分支覆盖

优点:
判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。
缺点:
往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。
三、条件覆盖
设计用例时针对判断语句里面每个条件表达式true 和 false各取值一次,不考判断语句的计算结果
测试用例条件:
A=T A=F
B=T B=F

四、判定条件覆盖(分支条件覆盖)
设计测试用例时,使得判断语句中每个条件表达式的所有可能结果至少出现一次,每个判断语句本身所有可能结果也至少出现一次。
测试用例条件:
A ^ B = T A ^ B = F
A=T A=F
B=T B=F

五、条件组合覆盖
设计测试用例时,使得每个判断语句中条件结果的所有可能组合至少出现一次
测试用例条件:
A= T B= T
A= T B= F
A= F B= T
A= F B= F

六、路径覆盖
设计测试用例时,覆盖程序中所有可能的执行路径
优点:这种覆盖方法可以对程序进行彻底的测试用例覆盖,比前面讲的五种方法覆盖度都要高。
缺点:于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。路径覆盖虽然是一种比较强的覆盖,但未必考虑判断语句中条件表达式结果的组合,并不能代替条件覆盖和条件组合覆盖。
参考:https://blog.csdn.net/write6/article/details/78702977
参考:https://blog.csdn.net/tsj11514oo/article/details/49161073
what's the 白盒测试的更多相关文章
- 软件测试第六周学习笔记之“Win8 APP应用程序的白盒测试”
这周的学习笔记我想写点自己关于实验中碰到的问题和感想. 因为这次做的是白盒测试,所以我决定去测试一下上回测试的app的功能函数. 这次我用的是单元测试项目来做的白盒测试: 创建单元测试的步骤: 1.点 ...
- 黑盒测试与白盒测试(Black box Testing)
黑盒测试和白盒测试的优缺点 类别 优点 缺点 黑盒测试 不需要了解软件代码 从用户角度出发 无法保证代码内各个路径被覆盖到 白盒测试 强制测试开发工程师关注代码的具体实现 揭露隐藏在代码中的Bug 是 ...
- 白盒测试之初识gtest工具
因为公司最近对软件产品质量提高了要求,之前项目组中黑盒测试方法就越来越无法满足公司的要求.虽然作为研发,但是也要求对白盒测试有一个系统的了解(毕竟之前没有系统的接触过白盒测试). 单元测试工具有很多种 ...
- 嵌入式平台组件白盒测试gcov、lcov和genhtml 使用指导
在嵌入式平台上使用了gtest白盒测试工具,覆盖了被测函数,但是不知道自己测试的效果如何,测试行覆盖率.函数覆盖率,分支覆盖率的数据. 便开始研究gcov这个代码覆盖率工具能否使用,来检查白盒测试的效 ...
- 嵌入式平台使用gtest进行白盒测试
看了coderzh大神写的gtest(http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html)使用的帖子,觉得gtest这个工具比 ...
- 实践作业3:白盒测试----我是如何写测试用例DAY6
一开始接到写白盒测试的任务,我感觉挺难的,因为感觉之前我所想到的都是黑盒测试啊,说到测试系统逻辑,感觉就有些神秘的样子没有思路了,那黑盒和白盒写的到底有啥区别.后来我请教了实验室的一个同学,他虽然还没 ...
- .net白盒测试
很久没写博客了,刚好这段时间空闲,做点记录 前提:最近部门需要白盒测试的工具,在网上也搜索了很多资料,国内很少有类似的资料(很少公司.net代码进行白盒测试),最后在国外(FQ)网站查找到了部分资料 ...
- 入门级----黑盒测试、白盒测试、手工测试、自动化测试、探索性测试、单元测试、性能测试、数据库性能、压力测试、安全性测试、SQL注入、缓冲区溢出、环境测试
黑盒测试 黑盒测试把产品软件当成是一个黑箱子,只有出口和入口,测试过程中只要知道往黑盒中输入什么东西,知道黑盒会出来什么结果就可以了,不需要了解黑箱子里面是如果做的. 即测试人员不用费神去理解软件里面 ...
- 白盒测试实践-day04
一.任务进展情况 通过小组成员的共同努力,终于完成了此次“白盒测试实践”任务.目前的主要任务将之前的文件汇总,整理出来. 二.存在的问题 由于测试系统的不完善,导致单元测试比较麻烦. 三.解决方法 认 ...
随机推荐
- HTTP/1.1 请求方法
HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于分布式.协作式和超媒体信息系统的 应用层协议.HTTP 是万维网的数据通信的基础.默认端口为 80. ...
- VMware虚拟机从一台电脑复制到另一台电脑
1.选中.vmx文件和所有的.vmdk文件,添加到压缩文件 vmx是虚拟系统配置文件,而vmdk则是虚拟磁盘文件,它们都是VMware所支持的文件格式 2.复制压缩文件到另一台电脑上,并解压 3.在另 ...
- python第九天(9-34)
一:队列的三种模式 先进先出(FIFO) class queue.Queue(maxsize) 后进先出(LIFO) class queue.LifoQueue(maxsize) 优先级顺序(优先级低 ...
- beta冲刺1/7
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(1/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 团队完成测试答辩 整理博客 复习接口 接下来的 ...
- labview使用了报表模块,在生成exe时需要添加以下内容,否则打包后不能开启excel功能
1.在你的安装目录下找到文件夹(D:\Program Files (x86)\National Instruments\LabVIEW 2016\vi.lib\Utility\NIReport.llb ...
- Selenium的webdriver的常用方法,鼠标事件
就来认识 WebDriver 中最常用的几个方法: get():跳转到的地址clear(): 清除文本. send_keys (value): 模拟按键输入. click(): 单击元素. 示例: f ...
- [OpenCV-Python] OpenCV 中摄像机标定和 3D 重构 部分 VII
部分 VII摄像机标定和 3D 重构 OpenCV-Python 中文教程(搬运)目录 42 摄像机标定 目标 • 学习摄像机畸变以及摄像机的内部参数和外部参数 • 学习找到这些参数,对畸变图像进行修 ...
- pyqt pyside QLineEdit 重写键盘事件
pyqt pyside QLineEdit 重写键盘事件 def keyPressEvent(self, event): if (event.modifiers() & QtCore.Qt.S ...
- 机器学习之--KNN算法简单实现
# # kNN 分类算法 a = np.array([[1,1],[1.2,1.5],[0.3,0.4],[0.2,0.5]]) #构造样本数据 labels = ['A','A','B','B'] ...
- arraylist 为什么 删除元素时要使用迭代器而不能使用遍历
因为你要是遍历了,arraylist 的长度就变了,容易数组越界和下标问题 public class Test { public static void main(String[] args) ...