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

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

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

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

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

目录
相关文章
|
9天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
13天前
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
11天前
|
jenkins 测试技术 持续交付
软件测试中的自动化测试策略
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和效率的关键工具。本文将探讨自动化测试的重要性、实施策略以及面临的挑战,旨在为软件开发团队提供实用的指导和建议。
|
20天前
|
测试技术
探索软件测试中的“思维侧翼”——如何以创新思维引领测试策略###
本文旨在探讨软件测试领域中,如何通过培养与运用创新思维,提升测试策略的有效性与效率。不同于传统的技术解析或理论阐述,本文将以“思维侧翼”为喻,启发读者从不同维度审视软件测试,寻找突破常规的思路与方法。我们相信,在快速迭代的软件开发周期中,灵活多变且富有创造力的测试思维,是发现潜在缺陷、保障产品质量的关键。 ###
|
21天前
|
测试技术 定位技术 UED
软件测试的艺术:探索性测试的深度与广度
【10月更文挑战第22天】在软件开发的广阔舞台上,测试扮演着不可或缺的角色。本文将带领读者深入理解探索性测试(Exploratory Testing)的精髓,揭示其在现代软件质量保证中的价值。我们将通过实际案例、生动比喻和具体步骤,展现如何像艺术家一样进行软件测试,确保产品质量的同时,提升测试的效率和乐趣。文章不仅适合初学者建立测试基础,也能帮助资深测试人员深化对探索性测试的理解和应用。
|
19天前
|
监控 安全 jenkins
探索软件测试的奥秘:自动化测试框架的搭建与实践
【10月更文挑战第24天】在软件开发的海洋里,测试是确保航行安全的灯塔。本文将带领读者揭开软件测试的神秘面纱,深入探讨如何从零开始搭建一个自动化测试框架,并配以代码示例。我们将一起航行在自动化测试的浪潮之上,体验从理论到实践的转变,最终达到提高测试效率和质量的彼岸。
|
11天前
|
测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
【10月更文挑战第31天】 在当今快速迭代的软件开发环境中,自动化测试成为确保软件质量和加速产品上市的关键。本文探讨了自动化测试的重要性、实施策略以及一些最佳实践。通过分析不同类型的自动化测试工具和框架,本文旨在为软件开发团队提供一套实用的指导方案,以提高测试效率和质量。
|
5月前
|
机器学习/深度学习 人工智能 算法
深入探索软件测试中的黑盒测试技术
本文旨在通过一个创新视角,探讨软件测试领域中的黑盒测试技术。我们将从一个全新的维度——测试用例的生成策略出发,分析如何提高黑盒测试的效率和效果。文章不仅会介绍传统的测试用例设计方法,如等价类划分、边界值分析等,还会结合最新的技术发展,讨论人工智能在黑盒测试中的应用前景。通过案例分析和实践应用,我们期望为读者提供一套系统的黑盒测试解决方案,以应对日益复杂的软件测试需求。
|
2月前
|
机器学习/深度学习 Web App开发 测试技术
『软件测试3』八大典型的黑盒测试方法已来袭,快快接住!
该文章介绍了八种常用的黑盒测试方法,包括等价类划分、边界值分析、错误推测法、因果图法、决策表测试、状态转换法、场景法以及随机测试,并提供了相应的案例说明。
|
2月前
|
测试技术 数据库
『软件测试2』 关于黑盒测试和测试用例的基础知识
该文章讲解了黑盒测试的基本概念以及如何编写有效的测试用例,包括选择合适的输入数据、预期结果的设定和测试执行的步骤。