第四章 软件测试方法(2)

2023-05-16

上周学习了白盒,本周开始学习黑盒测试。

4.3黑盒测试

黑盒测试(Black Box Testing)也称功能测试,主要测试每个功能是否正常使用。是软件测试使用中最广泛的一类测试。在黑盒测试中,通常把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,对程序接口进行测试,指检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,如图4-5所示

黑盒测试着手程序外部结构,不考虑内部逻辑结构,主要对软件界面和软件功能进行测试、是从用户角度考虑,从输入数据与输出数据的对应关系出发进行测试。关注的是软件的功能需求,主要试图发现以下类型的错误。

1)功能是否正确,是否有遗漏

2)界面是否有错误

3)数据结构或外部数据库访问错误

4)性能错误

5)初始化和终止错误

常见的黑盒测试方法有:功能性测试、性能测试、安心性测试、兼容性测试、稳定性测试、可靠性测试以及安装卸载测试等。

要有针对性的选择测试用例,通过定制案例测试的实施,保证测试由组织、有计划的进行。只有

对黑盒测试进行量化,才能保证软件的质量具体量化的方法之一就是测试用例。

黑盒测试用例设计方法包括;等价类划分法、边界值分析法、判定表分析法、因果图分析法、正交试验法、流程分析法、状态迁移法、异常分析法以及错误推测法等。

4.3.1等价类划分法

是典型的黑盒测试用例设计方法,是将软件的输入域分成若干部分,然后从每个部分中选取少数具有代表性的数据进行测试,可以避免穷举产生的大量用例。

等价类是指某个输入域的子集合,指输入该输入域中的某一个数据,如不能揭露被测对象的缺陷,那么我们就说这个输入域中的所有数据都无法揭露该缺陷,反义亦然。

一般分为两种情况:有效等价类和无效等价类

1)有效等价类:对需求规格而言、合理的、有效的输入数据构成的集合。

2)无效等价类:对需求规格而言、不合理的、无效的输入数据构成的结合。

因为软件不仅要能接收合理的数据,不合理的数据也需要做出正确响应。所有在设计用例时,两种等价类都需要考虑,这样有更高的可靠性。

等价类划分的标准:划分的子集必须是互不相交的,符合完备测、避免出现冗余。

等价类划分法的划分原则,通常按照以下规则进行划分等价类。

1)如规定输入的取值范围或个数时,则划分一个有效等价类和两个无效等价类。如:注册用户名的长度限制6-18个字符,6-18个字符是有效等价类,小于6和大于18字符则是两个无效等价类。

2)如果规定了输入的集合或规则必须要遵循的条件,则划分一个有效等价类和一个无效等价类。如:注册用户的格式要求必须以字母开头时,以字母开头是有效等价类,非字母开头则是无效等价类。

3)如果输入条件是一个布尔值,则划分一个有效等价类和一个无效等价类。如:在注册用户需要遵循协议或条款是否接收时,“接收”是有效等价类,“不接收”则是无效等价类。

4)如果输入条件是一组数据(枚举值),并且程序对每个输入的值做不同的处理,则化为若干有效等价类和一个无效等价类。如:网游中充值VIP等级(3个等价)对每个VIP的等级优惠不同,VIP1、VIP2、VIP3不同等级是三个有效等价类,不是VIP用户则是无效等价类。

5)如果输入条件规定了必须要遵循的某些规则下,则划分一个有效等价类和若干个无效等价类(无效等价类需要从不同的角度去违法规则)如:密码要求首位要求必须是大写字母,首字母是大写的是有效等价类,首字母是小写或未数字或特殊字符的则是无效等价类。

6)不是所有的等价类都有无效等价类,如性别的选择只有男或女两种。

等价类划分的设计用例的步骤如下:

步骤1:根据需求规格说明书,等价类划分。

步骤2:设计等价表,填写好划分好的内容并设计编号。根据划分原则将划分好的有效等价和无效等价填入等价类划分表中,间表4-3

 步骤3:设计覆盖表,填写覆盖的所有的有效、无效等价类、编号。

设计设计覆盖所有等价类时,有以下2个原则

1)设计新的测试数据,尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖完为止。

2)设计新的测试数据,尽可能多地覆盖尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖完为止。

步骤4:根据每组测试数据生成对应的测试用例。

等价类划分法:

优点考虑了单个输入域,所有可能的取值情况,避免了我们在设计用例时盲目或随机选取输入测试不完整或不稳定的数据。

缺点:产生的测试用例比较多,而且在设时没有考虑输入条件之间的约束关系,啃会插手一些无效的测试用例,也没有对边界条件进行考虑,所以在设时需要结合其他的设计方法进行补充,如边界值分析法。

4.3.2边界值分析法

是对等价划分的一个补充,该方法不仅需要考虑输入域的边界,而且还要关注输入域的边界。测试经验得知,大量的错误发生在输入和输出范围的边界上。因此针对各种边界情况设计用例,可以查出等多的错误。该方法一般在规定了取值范围或规定了值的个数,或者明确输入条件的有序集合中使用。使用边界值分析设计用例需要考虑3个点的选择。

3点的关系图如图4-7所示

 

1、上点:就是边界上的点,它不区分区间还是闭区间。

2、离点:是里面最近的点,如果输入域是封闭的。则离点在域的范围外;如熟人价域是开区间,则离点在域的范围内。

3、内点:是输入域内任意的一个点。

通常按照以下规则进行边界点的划分

1)如果规定了输入域的取值范围,则选取刚好在范围内边界的点,以及刚好超过边界的点,作为测试的数据数据。

2)如果规定了输入值的个数,最小个数,比最小个数少1,比最大个数多1的数作为测试数据。

3)如果规定了输入是一个有序的集合,则选取集合的第一元素和最后一个元素作为测试数据。

注意:在设计时,通常选择上点和离点。在选择离点时,需要考虑数据的类型和精度。如:上点数据类型是实数,精确度0.001,那么离点就是上点减0.001或加0.001.

边界值分析设计用例的基本步骤如下:

步骤1:设计等价表,填写划分好的内容并设计编号

步骤2:为每一个等价类的边界点设计上点、离点、内点并设计好编号,

步骤3:设计测试数据,覆盖所有的等价类及边界点直到所有的点全部进行覆盖。

步骤4:根据每组测试数据生成对应的测试用例。

4.3.3判定表分析法

在等价类设计中,没有考虑输入域的组合情况,导致设计的用例中无法覆盖输入域之间存在的关联的地方。为了弥补等价类设计的不足,介绍一种新的用例设计方法-判定表分析法。

主要是分析和表达多种条件下系统执行不同动作的技术。在程序设计发展的初期,判定表就已经被当作编写程序的辅助工具了,它可以把复杂的逻辑关系和多种条件组合的情况表达的很明确,判定表由四个部分组成,如图4-8所示

1)条件桩:列出被测对象的所有输入,并列出输出条件与次序无关。

2)动作桩:列出输入条件系统可能采取的操作,这些操作的排序没有约束。

3)条件项:列出输入条件的其他取值,在所有可能情况下的真假值。

4)动作项:列出条件的各种取值情况下应采取的动作。

规则:将条件项和动作项组合在一起,即在条件项的各种取值情况下应采取的动作。在判定表中贯穿条件项和动作项的每一列构成一条规则,即测试用例。可以针对每个合法的输入组合的规则设计测试用例进行测试。

规则计算方法为2n 个 n 表示条件个数

在根据判定表设计好的测试用例中,可能存在相似的规则,即条件桩取值对动作桩无影响的情况。此时,可以将规则进行合并。合并的规则是动作桩相同的情况下,并且条件项中存在相似的关系,则可以合并规则。合并规则如图4-9所示

图中Y表示真,N表示假、X表示动作。

判定表分析法的设计用例的步骤如下:

步骤1:找出条件桩和动作桩

步骤2:分析条件项、并计算规则个数、然后构成判定表。

步骤3:根据条件项的各种取值将动作项填入判定表中。

步骤4;简化判定表,合并相似的规则。

步骤5:根据每条规则生成对应的测试用例

在使用判定表时,需要注意,合并是存在缝隙的。因为它是以牺牲输入条件的组合为代价的。一般测试用例少的时候并不建议合并,如果用例设计多需要合并时,最多只进行一次合并。

4.3.4因果图分析法

在利用判定表设计用例的过程中,如果条件过多,导致设计判定表比较困难,为了弥补该缺点,接收一种新的测试用例设计方法-因果图分析法

因果图分析法是分析输入条件之间的约束情况,然后生成判定表,进行用例设计。介绍一下因果图基本图形符号“因果符号”和“约束符号”

1、因果符号

因果是指输入和输出的因果关系。因果符号有恒等、非、或、与四种表示方法,如图4-10所示。

其中c1 表示输入的状态,即原因 , e1 表示输出的状态,即结果。从c1和e1均可以取值为0或1(0表示某种状态不出现,1表示某种状态出现)。

1)恒等:当输入条件发生时,则一定会产生对应的输出,相反当输入条件不发生时,则不产生对应的输出,即c1为1, e1一定为1,否则c1为0, e1一定为0

2)非:与恒定相反,当输入条件发生时,则不产生对应的输出;反义亦然。即c1为1, e1一定为0,负责c1为0, e1一定为1;

3)或:当输入多个条件时,只有其中一个条件发生,则产生对应的输出。即只有c1、c2、c3其中一个为1,e1为1,只有c1、c2、c3全部为0,e1为0,

4)与:当输入多个条件时,只有所有的输入条件发生时,才会产生对应的输出。即c1、c2为1时,e1为1,只要c1、c2、其中一个为0,e1为0,

2、约束符号

是指输入域输出之间存在的某些依赖关系,称为约束。约束符号有异、或、唯一、要求、强制五种表示方法;其中前面四种是针对输入条件的约束,最后一种强制只针对输出条件的约束。如图4-11所示,其中a 、b分别代表条件。条件的取值为0或1(0表示状态不出现,1表示状态出现)

 1)异:在所有输入条件中,至少有一个可能不发生。即图4-11中,a 和b最多只有一个为1,不能同时为1,但可以同时为0

2)或:在所有输入条件中,至多有一个不可能发生,即图4-11中,a 、b 、c最少有1个为1,不同同时为0,也不能同时为1.

3)唯一:在所有输入条件中,有且只有一个发生。即图4-11中,a 和b只有一个为1,不同同时为1,也不能同时为0

4)要求:做所有输入条件中,只有有一个发生,则要求其他条件也发生,即图4-11中,a 和b,a为1时,要求b也为1

5)强制:指针对结构的结束关系,当一个结果发生,强制另一个结构不发生,即图4-11中,a 和b,a为1时,要求b也为0

因果图分析法的设计用例步骤如下

步骤1:找出输入条件(原因)和输出条件(结果)

步骤2:画出因果关系图,如果一步不能达到结果,可以借助中间节点。

步骤3:因果关系图转换为判定表

步骤4:简化判定表,合并相似的规则

步骤5:根据每条规则生成对应的测试用例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第四章 软件测试方法(2) 的相关文章

随机推荐

  • GITHUB下载慢解决办法-插件解决

    在油猴上搜索此插件 或者直接导入插件代码如下 61 61 UserScript 61 61 64 name Github 增强 高速下载 64 name zh CN Github 增强 高速下载 64 name zh TW Github 增
  • OSPF路由协议配置实验

    实验目的 xff1a 理解OSPF xff1b 掌握OSPF的配置方法 xff1b 掌握查看OSPF协议的相关信息 实验器材 xff1a 路由器及PC机 xff0c 双绞线 实验内容 xff1a 本实验通过在路由器上配置OSPF协议 xff
  • linux 22.04版本ubuntu换源

    1 备份原始源文件 执行下面命令 xff0c 将原来的源文件备份保存 sudo cp etc apt sources list etc apt sources list bak 2 修改源文件sources list 打开源文件 xff0c
  • jquery dialog 弹出 ajax加载数据

    我之前就是想实现一个弹框 xff0c 在弹框的时候用ajax 动态加载要展示的内容 xff0c 这个地方实现起来并不难 xff0c 但是在实现的时候遇到了一个坑 页面 xff1a lt div id 61 34 logDiv 34 styl
  • 解决STM32新增加函数出现Undefined symbol HAL_ADC_Init (referred from main.o). 问题

    最近在开发STM32L0xx系列产品的ADC采集项目 xff0c 在老工程上添加库函数 xff0c stm32l0xx hal adc h stm32l0xx hal adc c函数 进行ADC初始化 xff0c 编译不通过出现 xff0c
  • GET,POST,PUT,DELETE,OPTIONS等请求方式简单总结

    之前做的java web项目 xff0c 基本上只使用get和post的请求方式 xff0c 但是现在新项目额外增加了put xff0c delete xff0c 查了点资料 xff0c 做个简单的总结 1 GET get请求是用来获取数据
  • IOS TableView Cell重用机制及TableView常用Code

    写的太好了 xff0c 多谢楼主的无私分享 文章来自 xff1a http heidianfeng blog 163 com blog static 6184345620121114104552518 创建UITableViewContro
  • 编译Linux驱动程序

    基于Ubuntu 12 10 xff0c 编译Linux驱动程序 1 准备linux内核源码 此时 xff0c 我要编译的驱动是基于Ubuntu 12 10内核的 xff0c 所以我下载的是其对应的内核源码包 xff1a linux 3 5
  • 卸载windows10子系统卸载linux

    参考地址 xff1a https docs microsoft com en us windows wsl wsl config 查看所有已经安装的分发版本 xff1a wsl list all 查看正在运行的分发版本 xff1a wsl
  • github镜像站

    github镜像站 xff1a https hub fastgit org GitHub 在国内经常会出现无法访问的情况 xff0c 下面分享几个 GitHub 镜像站供大家使用 xff01 全局加速 可直接访问站点 xff0c 查看代码等
  • vnc连接linux失败,vnc连接linux失败解决办法

    在日常工作学习中 xff0c 经常会使用到vnc连接 xff0c 那有小伙伴知道如何进行vnc连接linux吗 xff1f 当vnc连接linux失败又该如何解决呢 xff1f 之前有简单介绍过如何实现vnc连接linux 那接下来让我们一
  • 域名是如何关联到CDN的

    用户在访问一个域名的时候 xff0c 网络中是怎么知道这个域名到底是配置在哪一个CDN厂商的呢 xff1f 笔者以test1 huiziguoxueshe com为例 xff0c 来描述下具体的过程 xff0c 如下所示 xff1a ste
  • 第五章:软件详细设计

    真是应了那句 xff1a 白天游四方 晚上点灯补裤裆 捂脸 xff09 xff0c 孩子睡了夜深人静了 我才是开始我的小笔记整理工作 详细设计是软件设计的第二阶段 xff0c 这一阶段的工作 xff0c 就是要对系统中的每个模块给出足够详细
  • 第7章 软件测试(1)

    今天是个开心的日子 xff0c 具体为啥开心我知道你懂得 继续我的龟速学习小笔记 它来了它来了 xff0c 你说它很简单 xff0c 当我看到此章的一部分内容后发现了原来学霸和学渣差别就是如此大 xff08 捂脸 xff09 xff0c 今
  • 第7章 软件测试(3)

    一晃3天没有学习了 xff0c 昨天的阅读量创立了一个新高 xff0c 内心还是很欢喜的 7 4 2黑盒技术 黑盒技术着重测试软件功能 xff0c 需重点研究需求说明和总体设计中有关程序功能输入 输出之间的关系等信息 xff0c 从而与测试
  • 第七章 软件测试(此章完结)

    春乏秋困 xff0c 一个早上哈气连天 脖子酸 腰痛 xff08 捂脸 xff09 近期叫醒我的不是闹钟也不是梦想 xff0c 而是凌晨4点和6点广播大喇叭喊居民做核酸的声音 xff0c 还是别的小区的 xff08 再次捂脸 xff09 也
  • 第十章:面向对象分析(2)

    3 泛化关系 泛化关系和类找那个的泛化概念是一样的 xff0c 于用例继承父用例的行为和含义 xff0c 还可以增加或覆盖父用例的行为 xff0c 子用例可以出现在任何父用例出现的位置 xff08 父和子均有具体的实例 xff09 也可以重
  • 第十章:面向对象分析(此章完结)

    10 4 4建立活动图 活动具体表现为由一系列动作组成的执行过程 xff0c 将各种活动及不同活动之间的转换 xff0c 用图形进行表示就构成了活动图 xff0c 作用是对系统的行为建模 1 活动图与流程图 活动图描述系统使用的活动 xff
  • 第十五章 软件工程新技术

    俺家老大说这一章我不需要仔细看 xff0c 快快过一遍就行 xff08 可能是觉得以我的能力一时半会也用不到吧 xff08 捂脸 xff09 xff09 那么我就抄一段本章小结吧 xff0c 后面如有需要我在重新认真学习 xff08 奸笑
  • 第四章 软件测试方法(2)

    上周学习了白盒 xff0c 本周开始学习黑盒测试 4 3黑盒测试 黑盒测试 xff08 Black Box Testing xff09 也称功能测试 xff0c 主要测试每个功能是否正常使用 是软件测试使用中最广泛的一类测试 在黑盒测试中