1 白盒测试

白盒测试是对软件的过程性细节做细致的检查,把测试对象看作是一个打开的盒子,允许测试人员利用程序内部的逻辑结构以及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。

白盒测试只测试软件产品的内部结构和处理过程,而不是测试软件产品的功能,可以分为静态和动态两种:

  • 静态白盒测试就是在不执行测试的情况下有条理仔细审查软件设计、体系结构和代码,从而找出软件缺陷的过程
  • 动态白盒测试也叫结构化测试,通过查看并使用代码的内部结构,设计和执行测试

白盒测试的常见方法包括:

  • 逻辑覆盖法
  • 路径分析
  • 控制结构测试

2 逻辑覆盖法

逻辑覆盖法又叫控制流覆盖,是按照程序内部逻辑结构设计测试用例的测试方法,根据程序中的判定和条件控制流覆盖准则来定量度量测试进行程度,按照覆盖标准的不同,可以分为:

  • 语句覆盖
  • 判定覆盖
  • 条件覆盖
  • 条件判定覆盖
  • 修正条件判定覆盖
  • 条件组合覆盖
  • 路径覆盖

2.1 语句覆盖

语句覆盖又叫线覆盖面或者段覆盖面,含义是选择足够数目的测试数据,使被测试程序中每条语句至少执行一次。语句覆盖可以直接应用于目标代码,不需要处理源代码,但是由于对一些控制结构不敏感(比如同样的测试用例,语句中的逻辑运算符从and改为or也同样通过),逻辑覆盖率低,因此往往不能发现判断中逻辑运算符出现的错误。

2.2 判定覆盖

又叫分支覆盖或所有边覆盖,用于测试控制结构中布尔表达式分别为真和假,其中布尔表达式被认为是一个整体,不考虑内部是否包含了“逻辑与”或者“逻辑或”等运算符。判定覆盖的基本思想是设计的测试用例是的程序中每个判定至少分别取“真”分支和取“假”分支经历一次,即判断真假值均被满足。

判定覆盖比语句覆盖提供了更强的测试能力,但是,大部分的判定语句是由多个逻辑条件组合而成的,仅仅判断最终的逻辑运算结果并不能真正覆盖所有的测试路径,这是判定覆盖的一个缺点。

2.3 条件覆盖

条件覆盖是设计测试用例,使得每个判断中每个条件的可能取值至少满足一次。

条件覆盖比判定覆盖增加了对符合判定情况的测试,增加了测试路径,但是条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。

2.4 条件/判定覆盖

条件/判定覆盖是综合了条件覆盖与判定覆盖的一种方法,含义是通过设计足够的测试用例,使得判断条件中所有条件可能至少执行一次取值,同时所有判断的可能结果至少执行一次。

表面上,条件/判定覆盖能同时满足判定覆盖以及条件覆盖两种标准,但实际上并没有完全覆盖所有的“真”和“假”取值的条件组合情况,这种情况下需要将判定语句中的复合条件表达式进行分解,形成由多个基本判定嵌套组成的流程图,以有效检查所有条件是否正确。

2.5 修正条件/判定覆盖

修正条件/判定覆盖(缩写为MC/DC)可以解释为:

  • 每个条件的所有可能结果至少出现一次
  • 每个判定本身的所有可能结果也至少出现一次
  • 每个入口点与出口点至少要唤醒一次
  • 每个条件都显示能单独影响判定结果

MC/DC具有如下优点:

  • 继承了多重条件覆盖的优点
  • 线性地增加了测试用例的数量
  • 对操作数以及非等式条件变化反应敏感
  • 具有更高的目标码覆盖率

2.6 条件组合覆盖

基本思想是,设计测试用例使得:

  • 每个条件中的所有可能至少出现一次
  • 每个判断本身的判定结果也至少出现一次

条件组合覆盖是一种相当强的覆盖准则,可以有效地检查各种可能的条件取值的组合是否正确,它不但可以覆盖所有条件的可能取值组合,还可以覆盖所有判断的可取分支,但仍有可能的路径会遗漏掉,测试还不完全。

2.7 路径覆盖

路径覆盖的基本思想是,选择足够的测试用例,使得程序中所有可能的路径都至少被执行一次。一条路径是从函数的入口到出口分支的一个唯一序列。

路径覆盖的覆盖率比前面几种逻辑覆盖要大,但是随着代码增加,测试工作将呈指数级增长,比如一个函数包括10个判断语句,那么就需要测试2^10 = 1024个路径。

2.8 总结

语句覆盖的效果最弱,路径覆盖的效果最好,如下图所示:

优缺点集合:

3 路径分析

路径分析测试法是在程序控制流程图的基础上,通过分析控制构造的环路复杂性,导出独立路径集合,设计测试用例的方法。程序的所有路径作为一个集合,在这些路径集合中必然存在一个最短路径,这个最小的路径称为基路径或独立路径。

路径分析与测试法主要步骤如下:

  • 绘制控制流图
  • 计算圈复杂性,圈复杂性用于计算程序的基本独立路径数目,确保所有语句至少执行一次的测试数量的上界
  • 确定独立路径的集合,独立路径是指至少引入程序的一个新处理语句集合或一个新条件的路径,即独立路径必须包含一条在定义之前不曾使用的边
  • 测试用例生成,设计测试用例的数据输入和预期结果,确保基本路径集中每条路径上的执行

4 控制结构测试

控制结构测试可以分为:

  • 条件测试:检查程序模块中所包含逻辑条件的测试用例设计方法
  • 循环测试:检测代码中的简单循环、嵌套循环以及串接循环,测试用例包括零次循环、一次循环、两次循环、m次循环、最大循环次数等等
  • Z路径覆盖:是路径覆盖的一个变体,是一种在大量判断和多个循环组合的情况下减少循环测试次数的方法,Z路径覆盖不考虑循环的形式和复杂度如何,也不考虑实际执行循环体次数是多少,只考虑通过循环体零次和一次这两种情况

软件测试笔记(四):白盒测试相关推荐

  1. 软件测试笔记——3.多种多样的测试类型

    前言 在之前的<软件测试笔记--1.什么是软件测试-定义.类型.方法?>中也曾经提高过测试的种类非常多,不同的术语往往让新人或者入行不久的测试人员望而生畏,对于开发也是同样的.这里推荐一个 ...

  2. 软件测试笔记2——什么是软件测试及软件测试分类

    软件测试笔记2目录 一.今日内容 二.软件生命周期模型(软件开发模型) 1.瀑布型生命周期模型--现在基本不用 2.V模型 3.敏捷开发模型 三.软件生命周期各个阶段 1.问题的定义及规划 2.需求分 ...

  3. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  4. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  5. MSSQL编程笔记四 解决count distinct多个字段的方法

    MSSQL编程笔记四 解决count distinct多个字段的方法 参考文章: (1)MSSQL编程笔记四 解决count distinct多个字段的方法 (2)https://www.cnblog ...

  6. RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)

    RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...

  7. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档

    POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...

  8. Ethernet/IP 学习笔记四

    Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...

  9. 软件测试实验4白盒测试,软件测试实验报告白盒测试

    <软件测试实验报告白盒测试>由会员分享,可在线阅读,更多相关<软件测试实验报告白盒测试(8页珍藏版)>请在人人文库网上搜索. 1.软件测试与质量课程实验报告实验3:白盒测试姓名 ...

  10. OpenCV学习笔记四-image的一些整体操作

    title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...

最新文章

  1. excel html modify,在Excel 2010中修改Series对象上的Z-index(Modify Z-index on Series object in Excel 2010)...
  2. bug4 导入新工程时报 Target runtime com.genuitec.runtime.generic.jee60 is not defined
  3. Java第三大的数,Java通过排序找出数组第三大数字
  4. python xlsxwriter使用方法汇总
  5. 对象序列化实现深度克隆
  6. PHP中如何实现 “在页面中一边执行一边输出” 的效果
  7. kotlin学习之集合(十三)
  8. Python 新浪微博 各种表情使用频率
  9. 计算机排名考研,计算机考研学校排名
  10. ASP.Net下使用ExtJS报“Ext未定义”错误的原因
  11. linux命令笔记之ls
  12. OS 中的SID(安全标识)
  13. 【已解决】平板远程控制WIN10电脑
  14. 计算机桌面文件删除不掉是怎么了,如何解决电脑桌面文件无法删除问题
  15. 【EXLIBRIS】#小词旮旯# 005 Pupil
  16. 关于爬取豆瓣电影和豆瓣书本的图片
  17. 3Q大战10年:丛林法则、黑暗森林与无限游戏
  18. php think命令,ThinkPHP 使用命令行 (cli) think 调用
  19. Linux入门第三天——linux命令(二)
  20. 淘宝/天猫API,获得淘宝商品评论返回值说明(数据解析)

热门文章

  1. C++ [进制转换]十六进制转化为二进制
  2. WebStorm/IDEA 激活证书服务器
  3. 数据库定义语言(DDL)
  4. Oracle索引简介
  5. Python namedtuple ——具名元组
  6. this.$refs.proup is not a function
  7. js删除json中指定的元素
  8. iOS使用libxlsxwriter导出excel文件
  9. ASP.NET/C# 控制器Controller的深入理解
  10. 嵌入式Linux驱动笔记(十四)------详解clock时钟(CCF)框架及clk_get函数