软件测试基础理论体系学习6-黑盒测试方法白盒测试方法简述

news2024/11/16 22:00:16

13 白盒测试方法

  • 1 黑盒测试
    • 1.1 黑盒测试概述
    • 1.2 黑盒测试的使用场景
    • 1.3 “黑盒”的两种基本方法
    • 1.4 黑盒测试的优缺点
      • 1.4.1 优点
      • 1.4.2 缺点
    • 1.5 黑盒测试的测试用例设计方法
  • 2 白盒测试
    • 2.1 白盒测试概述
    • 2.2 逻辑覆盖
    • 2.3 语句覆盖
      • 2.3.1 基本思想是
      • 2.3.2 优点
      • 2.3.3 缺点
    • 2.4 判定覆盖
      • 2.4.1 基本思想
      • 2.4.2 优点
      • 2.4.3 缺点
    • 2.5 条件覆盖
      • 2.5.1 基本思想
      • 2.5.2 优点
      • 2.5.3 缺点
    • 2.6 判定-条件覆盖
      • 2.6.1 基本思想
      • 2.6.2 优点
      • 2.6.3 缺点
    • 2.7 条件组合覆盖
      • 2.7.1 基本思想
      • 2.7.2 优点
      • 2.7.3 缺点
    • 2.8 路径覆盖
      • 2.8.1 基本思想
      • 2.8.2 优点
      • 2.8.3 缺点

1 黑盒测试

1.1 黑盒测试概述

  • 黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用;
  • 把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性;
  • 黑盒测试方法主要有等价类划分、边值分析、因—果图、错误推测等,主要用于软件确认测试;
  • “黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。

1.2 黑盒测试的使用场景

  • 是否有不正确或遗漏了的功能
  • 在接口上,能否正确地接受输入数据,能否产生正确地输出信息
  • 访问外部信息是否有错
  • 性能上是否满足要求
  • 界面是否错误,是否不美观
  • 初始化或终止错误

1.3 “黑盒”的两种基本方法

  • 黑盒测试有两种基本方法,即通过测试和失败测试。
  • 在进行通过测试时,实际上是确认软件能做什么,而不会去考验其能力如何。软件测试员只运用最简单,最直观的测试案例。
  • 在设计和执行测试案例时,总是先要进行通过测试。在进行破坏性试验之前,看一看软件基本功能是否能够实现。这一点很重要,否则在正常使用软件时就会奇怪地发现,为什么会有那么多的软件缺陷出现?
  • 在确信了软件正确运行之后,就可以采取各种手段通过搞“垮”软件来找出缺陷。纯粹为了破坏软件而设计和执行的测试案例,被称为失败测试或迫使出错测试。

1.4 黑盒测试的优缺点

1.4.1 优点

  • 比较简单,不需要了解程序内部的代码及实现;
  • 与软件的内部实现无关;
  • 从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;
  • 基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;
  • 在做软件自动化测试时较为方便。

1.4.2 缺点

  • 不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%;
  • 自动化测试的复用性较低。

1.5 黑盒测试的测试用例设计方法

  • 等价类划分方法
  • 边界值分析方法
  • 错误推测方法
  • 因果图方法
  • 判定表驱动分析方法
  • 功能图分析方法

2 白盒测试

2.1 白盒测试概述

  • 白盒测试并不是简单的按照代码设计用例,而是需要根据不同的测试需求,结合不同的测试对象,使用适合的方法进行测试。
  • 白盒测试与程序内部结构相关,需要利用程序结构的实现细节等知识,才能有效进行测试用例的设计工作。
  • 白盒测试方法有程序控制流分析、数据流分析、逻辑驱动测试、域测试、符号测试、路径测试、程序插桩及程序变异等。

2.2 逻辑覆盖

包含语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖和路径覆盖。例:实现一个简单的数学运算

Dim a,b As Integer
Dim c As Double
If (a>0 And b>0) then
  c=c/a
End if
If (a>1 or c>1) Then
    c=c+1
End if
 c=b+c

在这里插入图片描述

由这个流程图(b)可以看出,该程序模块有4条不同的路径:

P1:(1-2-4)     P2:(1-2-5)
P3:(1-3-4)     P4:(1-3-5)

将里面的判定条件和过程记录如下:

条件M={a>0 and b>0}
条件N={a>1 or c>1}

这样,程序的4条不同路径可以表示为:

P1:(1-2-4)=M and N      P2:(1-2-5)=~M and N
P3:(1-3-4)=M and ~N     P4:(1-3-5)=~M and ~N

2.3 语句覆盖

2.3.1 基本思想是

设计若干测试用例,运行被测程序,使程序中每个可执行语句至少执行一次。
上面的例题,P1包含了所有可执行语句,按照语句覆盖的测试用例设计原则,可以使用P1来设计测试用例,如下:。

令a=2,b=1,c=6,此时满足条件M{a>0 and b>0}和条件N={a>1 or
c>1}(注:此时c=c/a=3),这样,测试用例的输入{a=2,b=1,c=6}和对应的输出{a=2,b=1,c=5}覆盖路径P1。

2.3.2 优点

可以很直观地从源代码得到测试用例,无须细分每条判定表达式。

2.3.3 缺点

此测试方法仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。如在Do-While结构中,语句覆盖执行其中某一个条件分支。语句覆盖对于多分支的逻辑运算也是无法全面反映的,它只在乎运行一次,而不考虑其他情况。

2.4 判定覆盖

2.4.1 基本思想

设计若干测试用例,运行被测程序,使得程序中每个判断的取真分支何取假分支至少经历一次,即判断真假值均曾被满足。
p1和p4可以作为测试用例,其中p1作为取真的路径,p4作为取反的路径。
在这里插入图片描述
在这里插入图片描述

2.4.2 优点

判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。

2.4.3 缺点

判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。

2.5 条件覆盖

2.5.1 基本思想

设计若干测试用例,执行被测程序以后要使每个判断中每个条件的可能取值至少满足一次。

对于M:a>0取真时T1,取假时F1;
b>0取真时T2,取假时F2;

对于N:a>1取真时T3,取假时F3;
c>1取真时T4,取假时F4。

根据条件覆盖的基本思路,和这8个条件取值,组合测试用例:

在这里插入图片描述

2.5.2 优点

条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。

2.5.3 缺点

要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。

2.6 判定-条件覆盖

2.6.1 基本思想

设计足够的测试用例,使得判断条件中的所有条件可能至少执行一次取值,同时,所有判断的可能结果至少执行一次。
应该至少保证判定条件M和N各取真/假一次,同时要保证8个条件取值至少执行一次:
在这里插入图片描述

2.6.2 优点

判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。

2.6.3 缺点

判定/条件覆盖准则的缺点是未考虑条件的组合情况。

2.7 条件组合覆盖

2.7.1 基本思想

设计足够的测试用例,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。
在这里插入图片描述
针对以上8种条件组合,来设计所有能覆盖这些组合的测试用例:
在这里插入图片描述

2.7.2 优点

多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。

2.7.3 缺点

线性地增加了测试用例的数量。

2.8 路径覆盖

2.8.1 基本思想

设计所有的测试用例,来覆盖程序中的所有可能的执行路径:
在这里插入图片描述

2.8.2 优点

这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。

2.8.3 缺点

由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。而在有些情况下,一些执行路径是不可能被执行的,如:

If  (A)B++;
  If  (!A)D--

这两个语句实际只包括了2条执行路径,即A为真或假时候对B和D的处理,真或假不可能都存在,而路径覆盖测试则认为是包含了真与假的4条执行路径。这样不仅降低了测试效率,而且大量的测试结果的累积,也为排错带来麻烦。

从前面的例子我们可以看到,采用任何一种覆盖方法都不能满足我们的要求,所以,在实际的测试用例设计过程中,可以根据需要和不同的测试用例设计特征,将不同的覆盖方法组合起来使用,以实现最佳的测试用例设计

采用条件组合和路径覆盖两种方法结合重新来设计测试用例:
在这里插入图片描述


【特别说明】:知识来源于网络、各种资料、书本、网站等,本文仅用于学习使用,不做他用,如果涉及版权问题,请联系博主删除,谢谢

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

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

相关文章

Python及其在数据科学中的应用

前言 Python及其在数据科学中的应用 Python易学,语法也比较简单。它是一种流行的数据科学语言,因为它功能强大且易于使用。Python是一种出色的数据分析语言,因为它包含各种数据结构、模块和工具。 使用Python进行数据科学的原因有很多&…

详细介绍NLP对话系统

任务型对话系统 任务型对话系统主要应用于固定领域。任务型对话的广泛应用的方法有两种,一种是模块法,另一种是端到端的方法。 模块法是将对话响应视为模块,每个模块负责特定的任务,并将处理结果传送给下一个模块。 端到端的任务…

分布式事务 - Seata - TCC模式

目录一、什么是TCC二、AT & TCC区别 及 适用场景三、代码集成示例3.1 升级Seata 1.5.23.2 示例场景说明3.3 TCC核心接口定义3.4 TCC相关阶段规划3.5 TCC核心代码四、TCC三大问题(幂等、空回滚、悬挂)之前介绍过分布式事务之Seata AT模式,…

智慧新零售异业联盟帮你搞定多店跨界整合,让你开启共富时代

大家好,我是林工,在如今的时代,不管你所看到的商业模式是什么样的,以不变应万变,目的只有一个,把买卖发展壮大,想要将买卖发展壮大,那就需要精准的吸粉引流获客方式和能力。 林工常常…

Fluent Mybatis 牛逼!

这玩意比ThreadLocal叼多了,吓得我赶紧分享出来。 推荐一些chrome浏览器必装的插件! 40 个 SpringBoot 常用注解 VSCode 花式玩法(摸鱼)收藏一下 ! 使用fluent mybatis可以不用写具体的xml文件,通过jav…

【面试大全】互联网面试软实力【必看】

软实力 推荐大家使用Markdown语法写简历,然后再将Markdown格式转换为PDF格式后进行简历投递。如果你对Markdown语法不太了解的话,可以花半个小时简单看一下Markdown语法说明: http://www.markdown.cn/ 面试 假如你是网络申请者【拉勾、boss等】&…

Latex 分式格式处理

分式 分式命令:\frac{分子}{分母}。 对于行内短分式,可用斜线/输入,例如:(xy)/2 举例: 行内分式 \(\frac{xy}{yz} \) (显示为:) 行间分式 \[\frac{xy}{yz}\] (显示为&a…

【PCB设计特别篇之阻抗计算】还在用SI9000进行阻抗计算?

有了叠层信息后,才可以进行阻抗计算,走线阻抗与线宽、线距、介质厚度、绿油厚度、介质介电常数、铜箔厚度等一些信息相关,所以要现有叠层,才能进行阻抗计算。 阻抗计算的工具有很多,下面介绍几种: 1、SI900…

RSS Can:使用 Golang 实现更好的 RSS Hub 服务(一)

聊聊之前做过的一个小东西的踩坑历程,如果你也想高效获取信息,或许这个系列的内容会对你有用。 这个事情涉及的东西比较多,所以我考虑拆成一个系列来聊,每篇的内容不要太长,整理负担和阅读负担都轻一些。 本篇是第一…

Go代码审计学习(二)

文章目录环境搭建漏洞一:代码逻辑错误、没有做有效的鉴权漏洞二:目录穿越、任意文件读取漏洞三:条件竞争漏洞四:钩子函数执行命令参考链接环境搭建 Gitea是从gogs衍生出的一个开源项目,是一个类似于Github、Gitlab的多…

自学python第三年才懂,这事儿影响着最终的学习结果

前言 如果这件事你还没搞明白,那你学python会跟我一样,学了几年跟没学差不多! 当然,这件事仅限于学python是想赚钱或者提升职场竞争力的人明白即可,其他人别浪费时间了。 这事儿很重要 我从2018年底开始自学python&a…

SpringBoot2核心技术(基础入门)- 03 自动配置原理【3.1依赖管理+2容器功能】

1、SpringBoot特点 1.1、依赖管理 ● 父项目做依赖管理 依赖管理 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version> </parent…

(已更新)2023春节倒计时新款HTML单页源码

2023春节倒计时新款HTML单页自适应页面&#xff0c;有兴趣的可以看看&#xff01;背景图片自己修改喜欢的&#xff01; 源码介绍 自适应页面&#xff0c;支持安卓和ioswx背景音乐播放附带多个背景音乐&#xff0c;由于技术原因&#xff0c;一些js进行了加密&#xff08;支持i…

Spring boot 使用@DS 配合druid连接池切换数据源及切换数据源失效情况

一、导入包 <!-- dynamic-datasource --> <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.2.1</version> </dependency> 二、配置yam配置文…

【Flask框架】——09 视图和URL总结

目录一、创建flask项目1、安装环境2、创建项目3、启动程序4、访问项目二、flask参数说明1.初始化flask项目2.参数说明3.DEBUG调试模式三、应用程序的参数加载1.从配置对象中加载2.从配置文件中加载3.从环境变量中加载4.从Pycharm中的运行时设置环境变量的方式加载5.企业项目开发…

Flink-多流转换(合流,分流,双流join)

8 多流转换 8.1 分流 简单实现 对流三次filter算子操作实现分流 // 筛选 Mary 的浏览行为放入 MaryStream 流中DataStream<Event> MaryStream stream.filter(new FilterFunction<Event>(){Overridepublic boolean filter(Event value) throws Exception {retur…

vue-admin-template侧边栏修改成抽屉式

目录 一、修改sidebar组件 二、修改store 三、修改sidebaritem页面 四、修改navbar页面 五、修改layout 六、修改样式 一、修改sidebar组件 src—layout—components—sidebar—index.vue 把组件sidebar改成drawer <template><div :class"{ has-logo: s…

【AGC】崩溃服务flutter报缺失recordFatalException方法的问题

问题背景&#xff1a; cp反馈集成AGC-崩溃服务的flutter插件&#xff0c;使用最新的1.3.0300版本&#xff0c;出现下面错误 /Users/yin/Documents/projects/flutter/.pub-cache/hosted/pub.dartlang.org/agconnect_crash-1.3.0300/android/src/main/java/com/huawei/agconnec…

【脚本项目源码】Python制作艺术签名生成器,打造专属你的个人艺术签名

前言 本文给大家分享的是如何通过利用Python制作艺术签名生成器&#xff0c;废话不多直接开整~ 开发工具 Python版本&#xff1a; 3.6 相关模块&#xff1a; requests模块 PIL模块 PyQt5模块 环境搭建 安装Python并添加到环境变量&#xff0c;pip安装需要的相关模块即…

一个.NET的轻量级JWT库

这两天网上闲逛的时候&#xff0c;看到一个.NET的轻量级JWT库LitJWT&#xff0c;LitJWT号称主要关注性能&#xff0c;能提升至少5倍的编码/解码速度&#xff0c;以及更少的配置&#xff01; LitJWT支持的平台为netstandard 2.1或net5.0更高。 LitJWT宣传的性能对比图&#xf…