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

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

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

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

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

目录
相关文章
|
17天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
68 8
|
25天前
|
测试技术 持续交付
探索软件测试中的自动化测试策略
随着软件开发周期的加速和市场需求的不断增长,传统的手动软件测试方法已难以满足现代软件开发的高效性和准确性要求。本文旨在探讨自动化测试在软件测试中的重要性、实施策略及其对提高软件质量的影响。通过分析自动化测试的优势与挑战,以及提供实用的自动化测试工具和框架选择指南,旨在帮助读者理解并应用自动化测试以提升软件开发效率和产品质量。
|
24天前
|
机器学习/深度学习 人工智能 监控
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
43 1
|
22天前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
23天前
|
数据管理 测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
57 4
|
23天前
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
32 4
|
23天前
|
测试技术 持续交付 数据安全/隐私保护
软件测试的艺术与科学:探索自动化测试框架
在软件开发的世界中,测试是确保产品质量的关键环节。本文将深入探讨自动化测试框架的重要性和实现方法,旨在为读者揭示如何通过自动化测试提升软件测试效率和准确性。我们将从测试的基本概念出发,逐步引导读者了解自动化测试框架的设计和实施过程,以及如何选择合适的工具来支持测试活动。文章不仅提供理论知识,还将分享实用的代码示例,帮助读者将理论应用于实践。无论你是测试新手还是经验丰富的开发者,这篇文章都将为你打开一扇通往更高效、更可靠软件测试的大门。
23 1
|
6月前
|
机器学习/深度学习 人工智能 算法
深入探索软件测试中的黑盒测试技术
本文旨在通过一个创新视角,探讨软件测试领域中的黑盒测试技术。我们将从一个全新的维度——测试用例的生成策略出发,分析如何提高黑盒测试的效率和效果。文章不仅会介绍传统的测试用例设计方法,如等价类划分、边界值分析等,还会结合最新的技术发展,讨论人工智能在黑盒测试中的应用前景。通过案例分析和实践应用,我们期望为读者提供一套系统的黑盒测试解决方案,以应对日益复杂的软件测试需求。
|
3月前
|
机器学习/深度学习 Web App开发 测试技术
『软件测试3』八大典型的黑盒测试方法已来袭,快快接住!
该文章介绍了八种常用的黑盒测试方法,包括等价类划分、边界值分析、错误推测法、因果图法、决策表测试、状态转换法、场景法以及随机测试,并提供了相应的案例说明。
|
3月前
|
测试技术 数据库
『软件测试2』 关于黑盒测试和测试用例的基础知识
该文章讲解了黑盒测试的基本概念以及如何编写有效的测试用例,包括选择合适的输入数据、预期结果的设定和测试执行的步骤。