软件测试-----黑盒测试与白盒测试

简介: 软件测试-----黑盒测试与白盒测试

1.软件测试


软件测试是为了发现程序中的错误而执行程序的过程。软件测试不等于程序测试,它贯穿于软件定义和开发的整个期间软件测试的对象。针对的对象有:需求分析,概要设计,详细设计以及程序编码等各个阶段得到的文档。


注:


①只能尽可能地差错,不能证明程序没错


②测试员与程序员不应该是同一个人


测试用例:为了进行测试而输入地和获得的输出数据。


软件测试的方法包括黑盒测试和白盒测试。


2.黑盒测试

把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。又叫做功能测试或数据驱动测试

是在程序接口上进行测试


注:使用黑盒穷举测试对所有输入数据的各种可能值的排列组合都进行测试,来检查程序是否都能产生正确的输出。实际上这是不可能的。

黑盒测试要达到的目的:用尽可能少的测试用例去发现尽可能多的软件缺陷。

黑盒测试主要使用的方法 1.等价类划分        2.边界值分析        3.错误推测法        4.因果图


5.场景法


①等价类划分

方法:


1.找出限制条件


2.划分有效等价类和无效等价类


3.输入测试数据覆盖等价类


变量的命名规则一般规定如下:变量名的长度不多于 10 个字符,第一个字符必须为英文字母,其他字符可以英文字母、数字以及下划线的任意组合。请用等价分类法设计测试用例。

输入等价类    有效等价类  无效等价类
长度 1.不多于10个字符 2.大于10个字符
第一个字符 3.英文字符 4.非英文字符
其他字符 5.英文,数字,下划线 6.非英文,数字,下划线

输入测试数据覆盖等价类:每一个测试用例只覆盖一类无效等价类,而有效等价类可通过一条全部覆盖

测试数据 结果 覆盖
abc123_ 有效 条件 1,2,3
abcdefghijk 无效 条件2
2abc 无效 条件4
a>b 无效 条件6
②边界值分析法

输入域边界或边界附近,常常能发现大量缺陷,所以可以选择系统边界或边界附近的数据来设计测试用例。

注:边界值分析法和等价类划分法一般同时使用。

int Add(int x1,int x2)

{

1<=x1<=200

50<=x2<=300

}

针对有效输入,函数返回x1+x2

针对无效输入,函数返回-1

刚开始可能会这样想:

但是这样设计会引起以下问题

①这样排列组合数据,很容易导致罗列不全,思路混乱

②像0,49,两个都来自于超出范围的左边界,如果发生错误,那么就不能确定是0导致的还是49导致的错误

所以边界值分析法要解决的问题就是

(1)确定边界:

(2)确定边界点:

(3)确定边界的邻域:

人为定义区间δ𝛿,这样就构成了最小值的邻域和最大值的邻域 (δ𝛿1和δ𝛿2一般是一致的,但是也可以不一致),如下图:

若使用穷尽取值法,他的取值范围如下图红色区域所示,测试用例达到2000多个,虽然测试用例的覆盖度达到了100%,但是测试用例太多,冗余度非常高,很难定位哪一个边界值出了问题。

若采用以下方法,一个边界点附近只需9个测试用例,总共36个测试用例,这样覆盖度一般也能达到100%,但是最大的问题就是缺陷定位能力太差,无法通过一个测试用例确定哪一个边界值出现了问题。

正确的取测试用例的方法:

得到如下表格:

•边界值+中间值

•边界附近+中间值

也不一定需要中间值,这里强调的是,取边界的值需要单一化,不能同时取边界值或边界附近的值,这样在出错之后,就可以确定是哪一个边界值出现了问题。

边界值分析的示例:

边界值的选取有两种方式:

•选取5个值:最小值、略大于最小值、正常值、略小于最大值、最大值

•选取7个值:略小于最小值、最小值、略大于最小值、正常值、略小于最大值、最大值、略大于最大值

输入条件规定取值范围为1~100,选取5个值和7个值的情况如下表:

如果要求三角形的边长取值范围为1~100,则可以使用边界值分析法对三角形边界边长进行测试,在设计测试用例时,分别选取1、2、50、99、100五个值作为测试数据:

用边界值法构造用例:

③错误推测法

凭经验或直觉推测可能的错误

一一错误推测法在很大的程度上靠直觉和经验进行,它的基本想法是列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。

对于程序中容易出错的情况也有一些经验总结出来,例如:


• 输入数据为零或输出数据为零往往容易发生错误;

• 如果输入或输出的数目允许变化(例如被检索的或生成的表的项数),则输入或输出的数目为0和1的情况(例如表为空或只有一项) 是容易出错的情况。


• 对文件操作(插入、删除等)采取计数的方式控制。


④因果图法

等价类划分法和边界值分析法都主要考虑的是输入条件,而没有考虑输入条件的各种组合以及各个输入条件之间的相互制约关系。因此,必须考虑描述多种条件的组合,相应的产生多个动作的形式来考虑设计测试用例。这就需要利用因果图法。


因果图法从自然语言书写的程序规格说明书中寻找因果关系,即输入条件与输出和程序状态的改变,通过因果图产生判定表。它能够帮助人们按照一定的步骤高效选择测试用例,同时还能指出程序规格说明书中存在的问题。


在因果图中,用C表示原因,E表示结果,各节点表示状态,取值0表示某状态不出现,取值1表示某状态出现。因果图有四种关系符号,如图所示:

从输入、输出考虑,有以下约束条件:

E (互斥) : a和b两个原因不会同时成立,最多有一个可以成立。


I (包含) : a和b两个原因至少有一个必须成立。


O(唯一) : a和b两个原因必须有且仅有一个成立。


R(要求) : a出现时b也必须出现。


M (强制/屏蔽): a是1时,b必须为0;a为0时,b则不确定。


因果图设计测试用例的步骤如下:

1.分析程序规格说明书的描述中,哪些是原因,哪些是结果,原因常常是输入条件或输入条件的等价类,而结果常常是输出条件;


2.分析程序规格说明书中描述的语义内容,并将其表示成连接各个原因与各个结果的因果图;


3.由于语法或环境的限制,有些原因和结果的组合情况是不可能出现的,为表明这些特定的情况,在因果图上使用若干特殊的符号标明约束条件;


4.把因果图转化为决策表;


5.为决策表中每一列表示的情况设计测试用例。


例题:


自动饮料售货机软件。规格说明如下:

有一个处理单价为1元5角的盒装饮料的自动售货机软件。若投入1元5角硬币,按下“可乐”“雪碧”“红茶”按钮,相应的饮料就送出来若投入的是2元硬币,则在送出饮料的同时退还5角硬币。


首先从软件规格说明中分析原因、结果以及中间状态。

再用因果图的方式描述出来:

获得因果图,就可以进一步根据因果图做决策表(判定表):

决策表通常由4部分构成:

建立决策表的步骤:


1.确定规则个数;

2.列出所有条件桩和动作桩;

3.填入条件项;

4.填入动作频,制定初始决策表;

5.简化,合并相似规则或者相同动作。

在简化并得到最终决策表后,只要选择适当的输入,使决策表每一列的输入条件得到满足即可生成测试用例。


以上案例的决策表如图所示:


可以根据上述决策表设计测试用例,验证适当的输入组合能否得到正确的输出。

⑤场景法

现在软件很多都是用事件触发来控制流程,事件触发时的情形变形成场景,而同一事件不同的触发顺序和处理结果就形成了事件流。这种在软件设计中的思想也可以应用到软件测试中,可生动地描绘出事件触发时的情形,有利于测试者执行测试用例,同时测试用例也更容易得到理解和执行。

用例场景是通过描述流经用例的路径来确定的过程,这个流经过程要从用例开始到结束遍历其中所有的基本流和备选流。

•基本流:采用黑直线表示,是经过用例的最简单路径,表示无任何差错,程序从开始执行到结束;

•备选流:采用不同颜色表示,一个备选流可以从基本流开始,在某个特定条件下执行,然后重新加入基本流中,也可以起源于另一个备选流,或终止用例,不再加入到基本流。


应用场景法进行黑盒测试的步骤:

1.根据规格说明,描述出程序的基本流和各个备选流。

2.根据基本流和各个备选流生成不同的场景。

3.对每一个场景生成相应的测试用例。

4.对生成的所有测试用例进行复审,去掉多余的测试用例,对每一个测试用例确定测试数据。

示例:根据场景法设计“ATM取款流程”测试用例:

得到用例场景如表所示:

接下来设计用例覆盖每个用例场景

3.白盒测试

把测试对象看做一个透明的盒子,允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。又称为结构测试或逻辑驱动测试。

① 语句覆盖:每个语句至少执行一次

eg:

if A and B

       then action 1

if C or D

       then action 2

这里的语句有action1 和 action2,如果两个语句都至少执行一次

A=TRUE B=TRUE(A,B两个都为真) C=TRUE/D=TRUE(C,D其中一个必须为真)

例如:若输入test:A=TRUE,B=TRUE,C=TRUE,就可以完成语句覆盖

② 判定覆盖(分支覆盖):每个判定真假至少一次

判定在这里就是指:if后面的框框

每个判定真假至少一次,即

A and B =T---->A=T,B=T        ①


A and B = F---->A=F/B=F        ②


C or D = T---->C=T/D=T        ③


C or D = F---->C=F,D=F        ④


满足以上四个判定


输入测试:

test1:A=T,B=T,C=T,D=F--->覆盖了①③用例


test2:A=T,B=F,C=F,D=F--->覆盖了②④用例

③ 条件覆盖:每个判定的条件至少真假一次

条件在这里就是指:

每个判定条件至少真假一次,即

A T F

B T F

C T F

D T F

 ⑤ ⑥(全T一列为⑤,全F一列为⑥)

那么以下测试用例,就可以覆盖上面的条件

test1:A=T,B=T,C=T,D=T

test2:A=F,B=F,C=F,D=F

④ 判定条件覆盖:判定覆盖+条件覆盖(两者都要满足)

A=T,B=T,C=T,D=T---->满足了⑤+①+③

A=F,B=F,C=F,D=F---->满足了⑥+②+④

⑤ 组合覆盖(条件组合覆盖):将每个判定中的各个条件的各种可能的组合至少一次

组合覆盖利用上面的例子就是:

对于if A and B 以及 if C or D:

                  A        B | C        D


test1:        T        T | T        T


test2:        T        F |T        F


test3:        F        T |F        T


test4:        F        F |F        F

⑥ 路径覆盖:将所有的路径都走一遍

我们将他展开,可以很清楚的看到4条路径:

覆盖这4个路径就可以满足路径覆盖:

test1:x=4 z=9 y=6  ----覆盖路径1

test2:   x=5 z=9 y=1 ----覆盖路径2

test3:   x=2 z=9 y=6 ----覆盖路径3      

test4:   x=2 z=9 y=1 ----覆盖路径4

我们也可以发现,覆盖程度由低到高:

语句覆盖--->判定覆盖--->条件覆盖--->判定条件覆盖--->组合覆盖--->路径覆盖

目录
相关文章
|
21天前
|
测试技术
软件质量保护与测试(第2版)学习总结第十章 黑盒测试
本文是《软件质量保护与测试》(第2版)第十章的学习总结,介绍了黑盒测试的基本概念和方法,包括等价类划分、边界值分析和因果图法,并通过具体例子展示了如何设计测试用例来验证软件的功能性需求。
55 1
软件质量保护与测试(第2版)学习总结第十章 黑盒测试
|
5月前
|
机器学习/深度学习 人工智能 算法
深入探索软件测试中的黑盒测试技术
本文旨在通过一个创新视角,探讨软件测试领域中的黑盒测试技术。我们将从一个全新的维度——测试用例的生成策略出发,分析如何提高黑盒测试的效率和效果。文章不仅会介绍传统的测试用例设计方法,如等价类划分、边界值分析等,还会结合最新的技术发展,讨论人工智能在黑盒测试中的应用前景。通过案例分析和实践应用,我们期望为读者提供一套系统的黑盒测试解决方案,以应对日益复杂的软件测试需求。
|
21天前
|
测试技术
软件质量保护与测试(第2版)学习总结第十一章 白盒测试
本文是《软件质量保护与测试》(第2版)第十一章的学习总结,详细讲解了白盒测试中的控制流测试技术,包括语句覆盖、判断覆盖、条件覆盖、判定-条件覆盖和路径覆盖等方法,并通过具体代码示例展示了如何设计测试用例来验证程序中的不同执行路径。
43 2
|
2月前
|
测试技术 程序员 C语言
『软件测试4』耗子尾汁!2021年了,你还不知道这4种白盒测试方法吗?
该文章深入介绍了四种常用的白盒测试方法,包括语句覆盖、判定覆盖、条件覆盖以及路径覆盖,并探讨了这些方法在软件测试中的应用。
『软件测试4』耗子尾汁!2021年了,你还不知道这4种白盒测试方法吗?
|
2月前
|
机器学习/深度学习 Web App开发 测试技术
『软件测试3』八大典型的黑盒测试方法已来袭,快快接住!
该文章介绍了八种常用的黑盒测试方法,包括等价类划分、边界值分析、错误推测法、因果图法、决策表测试、状态转换法、场景法以及随机测试,并提供了相应的案例说明。
|
2月前
|
测试技术 数据库
『软件测试2』 关于黑盒测试和测试用例的基础知识
该文章讲解了黑盒测试的基本概念以及如何编写有效的测试用例,包括选择合适的输入数据、预期结果的设定和测试执行的步骤。
|
13天前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
23 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
185 7
Jmeter实现WebSocket协议的接口测试方法
|
2月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
187 3
快速上手|HTTP 接口功能自动化测试
|
22天前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
32 0