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

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

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

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

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

目录
相关文章
|
15天前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
15天前
|
测试技术 UED
软件测试的艺术:探索性测试的力量
【10月更文挑战第6天】在软件开发的世界中,测试是确保产品质量的关键步骤。传统的测试方法往往遵循严格的脚本和预定义的路径进行,但探索性测试(ET)则提供了一种更为灵活、创造性的替代方案。通过模拟真实用户的行为和思考过程,ET能够揭示那些传统测试可能遗漏的问题。本文将深入探讨探索性测试的核心原则、实施策略以及它如何提高软件测试的效率和有效性。
|
16天前
|
测试技术
软件测试中的探索性测试(ET)实践
【10月更文挑战第5天】本文将深入探讨一种与传统脚本化测试不同的测试方法——探索性测试(Exploratory Testing,简称ET)。我们将通过一个实际案例来展示ET的有效性,并分享如何将ET融入日常的软件测试流程中。文章旨在为测试人员提供一种灵活、高效的测试策略,帮助他们更好地发现软件中的缺陷。
|
14天前
|
监控 数据可视化 测试技术
软件测试中的自动化测试实践指南
【10月更文挑战第7天】 在软件开发的生命周期中,测试是确保产品质量的重要环节。随着技术的进步和应用的复杂性增加,自动化测试逐渐成为提升测试效率和覆盖范围的关键手段。本文将深入探讨自动化测试的基本概念、实施步骤及其在不同应用场景中的最佳实践。通过对自动化测试框架的选择、脚本开发、执行及维护的详细解析,帮助读者更好地理解和应用自动化测试技术,从而优化测试流程,提高软件质量。
25 2
|
3天前
|
测试技术 开发者
探索软件测试中的自动化测试框架
在软件开发的世界中,质量是至关重要的。为了确保软件产品的质量,软件测试扮演着不可或缺的角色。本文将深入探讨自动化测试框架的概念、重要性以及如何有效地实施它们来提高软件测试的效率和效果。我们将从自动化测试的基本概念开始,逐步深入到不同类型的自动化测试工具和框架,最后探讨如何在实际项目中选择合适的自动化测试策略。
|
14天前
|
测试技术
软件测试的艺术:探索性测试的深度与广度
【10月更文挑战第7天】在软件开发的宇宙中,测试是一颗璀璨星辰,指引着质量的方向。本文将带你遨游于测试的海洋,深入探索性测试(Exploratory Testing)的奥秘,从其哲学本质到实践应用,揭示如何通过自由探索来发现软件中的隐藏缺陷。我们将一起思考如何在不断变化的软件环境中,利用探索性测试提高测试效率和效果,确保软件产品的质量。准备好,让我们启航吧!
|
16天前
|
测试技术 UED
软件测试中的探索性测试:一种创新的质量保证方法
在软件开发的生命周期中,测试阶段扮演着至关重要的角色。传统的软件测试方法,如自动化测试和回归测试,虽然在一定程度上保证了软件质量,但它们往往依赖于预定义的测试用例和脚本,可能无法覆盖所有用户场景和边缘情况。为了克服这些限制,探索性测试作为一种创新的质量保证方法应运而生。本文将深入探讨探索性测试的概念、优势以及如何有效地实施它,以帮助读者更好地理解和应用这种测试技术。
|
6月前
|
设计模式 测试技术 持续交付
深入白盒测试:提升软件质量与性能的关键策略
【4月更文挑战第20天】 在软件开发的复杂世界中,确保产品的质量和性能始终是至关重要的任务。白盒测试,作为软件测试领域的重要分支,提供了对程序内部结构和逻辑的深入分析手段。本文将探讨如何通过有效的白盒测试策略来优化软件性能,减少缺陷,并最终提高用户满意度。通过剖析代码检查、单元测试、集成测试等白盒测试技术,我们将了解这些方法如何揭示潜在的问题点,并为改进提供方向。
|
6月前
|
供应链 测试技术
深入白盒测试:提升软件质量的关键策略
【4月更文挑战第7天】 在软件开发的复杂世界中,确保代码质量和性能的可靠性是至关重要的。白盒测试作为一种重要的软件测试方法,允许测试者通过检查内部结构、设计和编码来验证软件的正确性。本文将探讨白盒测试的核心概念、优势以及如何有效利用它来提高软件产品的质量。我们将深入分析不同的测试技术,如静态分析和动态测试,并讨论如何将这些方法应用于实际测试场景中,以便发现和修复潜在缺陷。通过案例研究和最佳实践的分享,本文旨在为读者提供一套全面的白盒测试策略,以支持他们在不断变化的技术环境中保持竞争力。
|
6月前
|
算法 安全 测试技术
深入探索白盒测试:提升软件质量与效率的关键策略
【4月更文挑战第11天】 在软件开发的生命周期中,确保代码质量和功能的正确性是至关重要的。白盒测试,作为一项关键的验证手段,允许测试者通过检查内部结构、设计和编码逻辑来识别软件中的缺陷和漏洞。本文将探讨白盒测试的核心概念、方法及其在提升软件测试效率和质量上的重要性。我们将分析静态分析和动态测试的策略,并讨论如何通过白盒测试优化软件开发过程。