软件测试知识——白盒测试

  • 什么是白盒测试
  • 白盒测试的方法
    • 语句覆盖
    • 分支覆盖
    • 条件覆盖
    • 判定条件覆盖
    • 组合覆盖
    • 路径覆盖
  • 总结
    • 白盒测试的优劣

什么是白盒测试

白盒测试也称结构测试或逻辑驱动测试,是把测试对象看作一个透明白色的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。

白盒测试是一种基于代码的测试,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。

白盒测试一般是开发做单元测试用,但是也有测试自己做的,对测试能力要求比较高。

白盒测试的方法

白盒测试的基本方法主要有以下6种:

  • 语句覆盖
  • 分支覆盖
  • 条件覆盖
  • 判定条件覆盖
  • 路径覆盖
  • 组合覆盖

强度由低到高:语句覆盖、分支覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。

案例:

if A and B then Action1
if A or B then Action2

语句覆盖

语句覆盖,顾名思义就是针对代码语句。
设计出来的测试用例要保证程序中的每一个语句至少被执行一次。

通常语句覆盖被认为是“最弱的覆盖”,因为它仅仅考虑对代码中的执行语句进行覆盖而没有考虑各种条件和分支,比较难以发现代码中的问题。

例:案例中语句,设计一条测试用例即可:

A = true    B = true    C = true

分支覆盖

分支覆盖(判定覆盖),使得程序中每个判断的取真和取假至少经历一次,即判断的真假均曾被满足。

例:案例中的语句,设计两条测试用例即可:

teatcase1: A = true, B = true, C = true, D = false
teatcase2: A = true, B = false, C = false, D = false

条件覆盖

条件覆盖,要求所设计的测试用例能使每个判定中的每一个条件获得可能的取值,即每个条件至少有一次真值和假值。(不考虑组合情况)

第一个判断应考虑到 A=true, A=false, B=true, B=false
第二个判断应考虑到 C=true, C=false, D=true, D=false

例:案例中语句,可以设计测试用例满足下列条件,两条用例:

teatcase1: A = true, B = true, C = true, D = true
teatcase2: A = false, B = false, C = false, D = false

判定条件覆盖

判定条件覆盖,就是设计的测试用例可以使得判断中每个条件所有的可能取值至少执行一次(条件覆盖),同时每个判断本身所有的结果也要至少执行一次(判定覆盖)。

判定条件覆盖同时满足判定覆盖和条件覆盖,弥补了两者各自的不足,但是判定条件覆盖并未考虑条件的组合情况。

条件覆盖:
A=true, A=false, B=true, B=false
C=true, C=false, D=true, D=false

判断覆盖:
A and B = true, A and B = false
C or D = true, C or D = false

满足条件覆盖和判断覆盖,可以设计两条用例:

teatcase1: A = true, B = true, C = true, D = true   (条件都为 true, A and B = true, C or D = true )
teatcase2: A = false, B = false, C = false, D = false   (条件都为 false, A and B = false, C or D = false )

组合覆盖

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

针对案例语句,条件组合覆盖时可以设计如下用例:

teatcase1: A = true, B = true, C = true, D = true
teatcase2: A = true, B = false, C = true, D = false
teatcase3: A = false, B = true, C = false, D = true
teatcase4: A = false, B = false, C = false, D = false

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

路径覆盖

路径覆盖,要求覆盖程序中所有可能的路径。
设计的测试用例可以覆盖程序中所有可能的执行路径。可以对程序进行彻底的测试用例覆盖,但是用例数量会增多很多。所以路径覆盖是最彻底的测试用例覆盖,但实际上可操作性不强。

可以设计测试用例满足下列条件:

teatcase1: A = true, B = true, C = true, D = true
teatcase2: A = false, B = false, C = false, D = false
teatcase2: A = true, B = true, C = false, D = false
teatcase3: A = false, B = false, C = true, D = true
......

总结

在实际操作中,要正确使用白盒测试的代码覆盖方法,就要从代码分析和代码调研入手,根据调研的结果,可以选择上述方法中的某一种,或者好几种方法的结合,设计出高效的测试用例,尽可能全面地覆盖到代码中的给每一个逻辑路径,只有适当的测试方法,才能帮助我们从代码的角度对产品做到最好的测试。

白盒测试的优劣

优点

  • 迫使测试人员去仔细思考软件的实现。
  • 帮助软件测试人员增大代码的覆盖率。提高代码质量,发现代码中隐藏的问题。

缺点

  • 昂贵:系统庞大时,测试开销会非常大;测试人员要求比较高,人才昂贵。
  • 测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求。

软件测试知识——白盒测试相关推荐

  1. 【软件测试】白盒测试方法与黑盒测试方法的区别

    软件测试方法一般分为两种:白盒测试与黑盒测试.其中,白盒测试又称为结构测试.逻辑驱动测试或基于程序本身的测试,着重于程序的内部结构及算法,通常不关心功能与性能指标.黑盒测试又被称为功能测试.数据驱动测 ...

  2. 网罗软件测试知识体系汇总

    (备注:以下链接均为其他博客主所写,在下主要是把他们网罗过来方便自己学习,感谢这些博主的分享,持续更新中-) 一.软件测试知识梳理    https://www.cnblogs.com/anliven ...

  3. 软件测试知识——MySQL常用命令

    软件测试知识--MySQL常用命令 数据库连接 创建数据库 显示数据库 删除数据库 选择数据库 创建表 显示数据表 查看表结构 删除表 插入表数据 修改表数据 查询单表数据 查询多表关联数据 删除表数 ...

  4. 软件测试--静态白盒测试

    软件测试–静态白盒测试 静态测试是指测试非运行部分-检查和审查.静态白盒测试是指在不执行软件的条件下条理地仔细审查软件设计.体系结构和代码,从而找出软甲缺陷的过程,又称为结构化测试. 静态白盒测试的好 ...

  5. 构建高效的软件测试知识体系

    2018年6月8日,作为第一届TMMi中国峰会圆桌会议的嘉宾,我参与讨论了"如何建立适合测试组织的测试规范体系"这个测试主题,其中分享了我对该话题的一些想法和经验.现在通过文章的方 ...

  6. 软件测试条件覆盖怎么画流程图,软件测试流程图白盒测试条件覆盖路径覆盖.doc...

    软件测试流程图白盒测试条件覆盖路径覆盖.doc 上传人:ms****95 文档编号:43341421 上传时间:2020-01-21 格式:DOC 页数:7 大小:235.50KB 下载提示(请认真阅 ...

  7. 软件测试知识学习路线

    本人做软件测试3年多,时间说长不算长,但也不短了,这3年来对软件测试这个行业已经有了一定了解,测试这行有人说很简单,就是点点程序,看会不会出错,其实不然,测试也是有很多学问的,要真正想把测试做好,也是 ...

  8. 测试小白的软件测试知识(适用于面试前突击)

                                       第一节  软件测试基础知识 1. 怎样看待测试,知道哪些测试的类型,有用过哪些测试方法? 软件测试是使用人工或自动化手段来运行或测 ...

  9. 最详细,最全的软件测试知识总结,吐血整理【建议收藏】

    有人问我,这些都是百度能百度到的知识,为什么要写?可能个人的角度不同吧,我是希望每个阶段都将自己的收获做一个总结,自己也能不断提升: 毕竟,百度出来的只是百度的,自己写的才是自己的:就像认识的一个家伙 ...

最新文章

  1. Dev C++ 中错误 stray 161' in program
  2. Python机器学习类库常见问题及解决
  3. Linux下base64命令工具的使用
  4. spring cloud学习进阶篇:Spring Cloud Sleuth + Zipkin 实现分布式跟踪解决方案
  5. C语言 · 前10名
  6. Java模拟事务Demo
  7. Linux 关闭服务后 鼠标 键盘用不了
  8. 跳过17:30,跳过瑞星定时扫描
  9. AndroidStudio_安卓原生开发_拍照存储在Uri中_利用图片后通过Uri获取文件真实路径_然后删除---Android原生开发工作笔记161
  10. python 特征选择卡方_为什么pythonsklearn特征选择卡方(chi2)测试不是对称的?
  11. mysql学生信息管理系统设计_学生信息管理系统的设计与实现(MyEclipse,MySQL)
  12. uni-app 简介
  13. 「沙龙回顾」从技术演进角度看猫眼电影
  14. MTK6737平台匹配设备节点的方法
  15. 用python绘制熊猫图案_在matplotlib中绘制熊猫日期
  16. 【知识小集】☞Excel之VBA编程语句集300句
  17. Shiro框架中实现CA登录及免密功能
  18. PPT怎么转换成Word文档?分享两种转换小妙招
  19. composer [InvalidArgumentException] Could not find package laravel/laravel with stability stable.
  20. oss文档存储类型:低频、标准、归档、冷归档

热门文章

  1. android用户中心应用,腾讯应用中心触屏版上线 对Android开发者开放
  2. Android官方架构组件Paging:分页库的设计美学
  3. nginx配置支持nagios
  4. linux查看远程服务器端口,linux下查看本机和远程服务器的端口是否连通的方法...
  5. redis客户端连接
  6. 871. 最低加油次数
  7. 递归算法——超详细讲解(图文并茂)
  8. 干货!数学与AI:AI的拓扑几何基础
  9. android中radiogroup作用,Android View系列---RadioGroup与RadioButton
  10. java分页sql语句_「sql分页」sql语句 实现分页 - seo实验室