第3章 黑盒测试的实用技术
黑盒测试技术是软件测试的主要方法之一,黑盒测试的基本概念、方法、操作步骤、工具等内容是必须掌握的。
本章主要讨论以下内容:
黑盒测试的基本概念。
黑盒测试的方法。
黑盒测试的原则、策略和方法的选择。
黑盒测试的步骤。
3.1 黑盒测试的基本概念
黑盒测试(Blackbox Testing)又称为数据驱动测试或基于规格说明的测试。黑盒测试就是把程序看做一个不能打开的黑盒子,在不考虑程序内部逻辑结构和内部特性的情况下测试程序的功能,测试者要在软件的接口处进行测试,它只检查程序功能是否按照规格说明书的规定正常使用、程序是否能接收输入数据而产生正确的输出信息,以及性能是否满足用户的需求,并且保持数据库或外部信息的完整性。通过黑盒测试可以检测每个功能是否都能正常运行,因此黑盒测试又可称为从用户观点和需求出发进行的测试。
由于黑盒测试不考虑程序内部结构,只关心软件的功能,所以许多高层的测试(如确认测试、系统测试、验收测试)都采用黑盒测试。设计黑盒测试用例可以和软件实现同时进行,因此可以缩短整个测试的时间。
黑盒测试主要是为了发现以下几类错误:
是否有不正确或遗漏的功能。
界面是否有错误。
在接口上,输入能否正确地接收,能否输出正确的结果。
是否有数据结构错误。
性能上是否满足要求。
初始化或终止性错误。
数据库的访进访出是否正常。
3.1.1 黑盒测试的优点和缺点
1)黑盒测试的优点如下:
从产品功能角度测试可以最大限度地满足用户的需求。
相同动作可重复执行,最枯燥的部分可由机器完成。
依据测试用例有针对性地寻找问题,定位更为准确,容易生成测试数据。
将测试直接和程序/系统要完成的操作相关联。
2)黑盒测试的缺点如下:
代码得不到测试。
如果规格说明设计有误,很难发现。
测试不能充分地进行。
结果的准确性取决于测试用例的设计。
3.1.2 对黑盒测试人员的要求
黑盒测试只关心软件的外部功能和界面表现,不接触代码,为了保证测试工作顺利进行,在合理的时间内完成测试,发现软件系统的缺陷,掌握测试用例的书写,保证测试结果的可靠性,在对黑盒测试人员的选择和要求上也要符合一定的标准:
掌握测试思想和常规测试流程。
了解产品的需求和功能。
掌握测试用例的书写。
有一定的软件开发和测试经验。
3.1.3 黑盒测试的意义
黑盒测试对于测试工作的意义主要有:
1)黑盒测试有助于对被测产品的总体功能的需求进行验证。
2)从测试管理方面来说,黑盒测试是非常方便的,不需要对代码进行测试管理。
3)黑盒测试是把所有可能的输入都作为测试数据使用的,容易查出程序中的错误。
3.2 黑盒测试的方法
黑盒测试是一种基于证明功能需求和用户最终需求的测试方法,设计黑盒测试用例的方法有如下8种:
等价类划分法。
边界值分析法。
因果图法。
判定表驱动测试。
场景法。
功能图法。
错误推测法。
正交试验设计法。
在实际测试工作中,往往是综合使用各种方法才能有效地提高测试效率和测试覆盖率,这就需要认真掌握这些方法的原理,积累更多的测试经验,以有效地提高测试水平和测试效率。下面就将主要介绍这8种设计黑盒测试用例的方法。
3.2.1 等价类划分
等价类划分法是一种典型的、重要的黑盒测试方法,它将程序所有可能的输入数据(有效的和无效的)划分成若干个等价类。然后从每个部分中选取具有代表性的数据当做测试用例进行合理的分类,测试用例由有效等价类和无效等价类的代表组成,从而保证测试用例具有完整性和代表性。利用这一方法设计测试用例可以不考虑程序的内部结构,以需求规格说明书为依据,选择适当的典型子集,认真分析和推敲说明书的各项需求,特别是功能需求,尽可能多地发现错误。
由于等价类是在需求规格说明书的基础上进行划分的,并且等价类划分不仅可以用来确定测试用例中的数据的输入输出的精确取值范围,也可以用来准备中间值、状态和与时间相关的数据以及接口参数等,所以等价类可以用在系统测试、集成测试和组件测试中,在有明确的条件和限制的情况下,利用等价类划分技术可以设计出完备的测试用例。这种方法可以减少设计一些不必要的测试用例,因为这种测试用例一般使用相同的等价类数据,从而使测试对象得到同样的反映行为。对于等价类我们从以下几个方面讨论它的划分方法。
1.等价类划分
等价类可以划分为有效等价类和无效等价类。
(1)有效等价类
有效等价类指对于程序规格说明来说,是合理的、有意义的输入数据构成的集合。利用有效等价类可以检验程序是否实现了规格说明预先规定的功能和性能。有效等价类可以是一个,也可以是多个,根据系统的输入域划分若干部分,然后从每个部分中选取少数有代表性数据当做数据测试的测试用例,等价类是输入域的集合。
(2)无效等价类
无效等价类和有效等价类相反,无效等价类是指对于软件规格说明而言,没有意义的、不合理的输入数据集合。利用无效等价类,可以找出程序异常说明情况,检查程序的功能和性能的实现是否有不符合规格说明要求的地方。
2.等价类划分的方法和原则
1)等价类划分的方法有:
按区间划分。
按数值划分。
按数值集合划分。
按限制条件或规划划分。
按处理方式划分。
2)等价类划分的原则如下:
在输入条件规定的取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类。
在规定了输入数据的一组值中(假定有n个值),并且程序要对每个输入值分别处理的情况下,可以确定n个有效等价类和一个无效等价类。
在规定输入数据必须遵守的规则的情况下,可以确定一个有效等价类和若干个无效等价类。
在输入条件规定了输入值的集合或规定了“必须如何”的条件下,可以确定一个有效等价类和一个无效等价类。
在确定已划分的等价类中各元素在程序处理中的方式不同的情况下,则应将该等价类进一步地划分为更小的等价类。
3.等价类表的建立
等价类表的建立如表3-1所示。
表3-1是等价类表的基础,可依据表3-1确定测试用例。测试用例可按下列步骤来确定:
表3-1 等价类表
1)在分析需求规格说明的基础上划分等价类,列出等价类表,为每一个等价类规定一个唯一的编号。
2)将程序可能的输入数据分成若干个子集,从每个子集中选取一个有代表性的数据作为测试用例。等价类是某个输入域的子集,在该子集中的每个输入数据的作用都是等效的。
3)设计新的测试用例,使其尽可能多地覆盖未覆盖的有效等价类,按照这一步骤重复进行,直到所有的有效等价类都被覆盖为止。
4)设计新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,按照这一步骤重复进行,直到所有的无效等价类都被覆盖为止。
4.等价类表与测试用例的关系
等价类表与测试用例的关系如表3-2所示。
表3-2等价类表与测试用例的关系表
3.2.2 边界值分析法
边界值分析法(BVA,Boundary Value Analysis)是用于对输入或输出的边界值进行测试的一种黑盒测试方法。
在测试过程中,边界值分析法是作为对等价类划分法的补充,专注于每个等价类的边界值,两者的区别在于前者在等价类中随机选取一个测试点。边界值分析法采用一到多个测试用例来测试一个边界,不仅重视输入条件边界值,而且重视输出域中导出的测试用例。边界值分析法比较简单,仅用于考察正处于等价划分边界或边界附近的状态,考虑输出域边界产生的测试情况,针对各种边界情况设计测试用例,发现更多的错误。边界值分析法的测试用例是由等价类的边界值产生的,根据输入输出等价类,选取稍高于边界值或稍低于边界值等特定情况作为测试用例。下面介绍边界值分析方法需要注意的问题。
1.选择边界值测试原则
选择边界值测试主要考虑以下几条原则:
1)如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数小一的数、比最大个数大一的数作为测试数据。
2)如果输入条件规定了值的范围,则应取刚达到这个范围边界的值,以及刚刚超过这个范围边界的值作为测试输入数据。
3)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
4)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
5)分析程序规格说明,找出其他可能的边界条件。
2.常见的边界值
常见的边界值通常表现在界面屏幕、数组、报表和循环等上,其表现方式如下:
1)屏幕上光标在最左上、最右下位置。
2)数组元素的第一个和最后一个。
3)报表的第一行和最后一行。
4)循环的第0次、第1次、倒数第2次和最后一次。
3.2.3 因果图法
因果图法也是较常用的一种黑盒测试方法,是一种简化了的逻辑图。因果图能直观地表明输入条件和输出动作之间的因果关系,能帮助测试人员把注意力集中到与程序功能有关的输入组合上,比采用等价分类法的测试效率更高,但这种方法的操作步骤比较复杂。
因果图法是一种适合于描述对于多种输入条件组合的测试方法,根据输入条件的组合、约束关系和输出条件的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件涉及的各种组合情况。因果图法一般和判定表结合使用,通过映射同时发生相互影响的多个输入来确定判定条件。因果图法最终生成的就是判定表,它适合于检查程序输入条件的各种组合情况。
采用因果图法能帮助我们按照一定的步骤选择一组高效的测试用例,同时,还能指出程序规范中存在什么问题,鉴别和制作因果图。
下面介绍因果图的基本关系符号和约束。
1.关系符号
(1)恒等
恒等关系符号如图3-1所示。
(2)非
非关系符号如图3-2所示。
图3-1 恒等关系符号图 |
图3-2 非关系符号图 |
(3)或
或关系符号如图3-3所示。
(4)与
与关系符号如图3-4所示。
图3-3 或关系符号图 |
图3-4 与关系符号图 |
通常在因果图中,用Ci表示原因,ei表示结果,Ci和ei的状态可用0或1表示,0表示某状态不出现,1表示某状态出现。
2.约束
输入状态还存在着某些依赖关系,这种关系称为约束。
约束符号如图3-5所示。
图3-5 约束符号图 |
E约束(异):a和b中最多有一个可能为1,即a和b不能同时为1。
I 约束(或):a、b、c中至少有一个必须为1,即 a、b、c不能同时为0。
O约束(唯一):a和b必须有一个且仅有一个为1。
R约束(要求):a是1时,b必须是1,即a为1时,b不能为0。
M约束(强制):若结果a为1,则结果b强制为0。
3.利用因果图导出测试用例的基本步骤
利用因果图导出测试用例一般要经过以下几个步骤:
1)分析软件规格说明的描述中哪些是原因,哪些是结果。原因是输入或输入条件的等价类,结果是输出条件。给每个原因和结果并赋予一个标识符,根据这些关系,画出因果图。
2)因果图上用一些记号表明约束条件或限制条件。
3)对需求加以分析并把它们表示为因果图之间的关系图。
4)把因果图转换成判定表。
5)将判定表的每一列作为依据,设计测试用例。
3.2.4 判定表驱动法
因果图方法中已经用到了判定表(Decision Table),它是分析和表达多逻辑条件下执行不同操作的情况下的工具。在程序设计发展的初期,判定表就已被当做编写程序的辅助工具了。由于判定表测试严格,能够将复杂的逻辑关系和多种条件组合的情况表达得既具体又明确,针对不同的逻辑条件组合值,分别执行不同的操作,因此,使用判定表能够设计出完整的测试用例集合。判定表是一种针对存在条件、动作关系或者因果关系的特性测试的用例设计方法。
图3-6 判定表的4个组成部分 |
1.判定表的组成
判定表通常由4个部分组成,如图3-6所示。
1)条件桩(Condition Stub):列出了问题的所有条件,列出条件的次序没有约束。
2)动作桩(Action Stub):列出问题规定可能采取的操作,这些操作的排列顺序无关紧要。
3)条件项(Condition Entry):列出条件桩给出的条件并列出所有可能的取值。针对条件桩的条件和条件项的取值,判断在整个程序模块中的所有可能的情况下其结果的真假值。
4)动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。
2.判定表的建立步骤
判定表的建立步骤如下:
1)确定规则的个数,例如,有n个条件,那么决策表中就有2n个规则(每个条件取真、假值)。
2)列出所有的条件桩和动作桩。
3)填入条件项。
4)填入动作项,得到初始判定表。
5)简化判定表,合并相似规则。
3.2.5 场景法
现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件触发时的情景,
有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。
1.场景法的基本流和备选流
场景用来描述流经用例的路径,从用例开始到结束遍历这条路径上所有的基本流和备选流,如图3-7所示。
图3-7 场景法的基本流和备选流 |
图3-7中经过用例的每条路径都用基本流和备选流来表示,直黑线表示基本流,是经过用例的最简单路径。下面三点给出了一个备选流的开始和结束的可能历程,它可以在某个特定条件下执行:
可能重新加入基本流中(如备选流1和3)。
也可能从另一个备选流(如备选流2)中引出。
或者终止用例而不再重新加入到某个流(如备选流2和4)。
2.场景法的设计步骤
场景法的设计步骤如下:
1)根据说明,描述出程序的基本流及各项备选流。
2)根据基本流和各项备选流生成不同的场景。
3)对每一个场景生成相应的测试用例。
4)对生成的所有测试用例重新审查,去掉多余的测试用例,确定测试用例后,为每
一个测试用例确定测试数据值。
3.2.6 功能图法
功能图法是用功能图形象地表示程序的功能说明,由状态迁移图和布尔函数组成,同时需要依靠判定表或因果图表示逻辑功能,并机械地生成功能图的测试用例。功能图法是黑盒、白盒混合用例的设计方法。
功能图模型由状态迁移图和逻辑功能模型两部分构成。
状态迁移图:用于表示输入数据序列以及相应的输出数据,由输入数据和当前状态决定输出数据和后续状态。
逻辑功能模型:用于表示在状态中输入条件和输出条件的对应关系,由输入数据决定输出数据。此模型只适用于描述静态说明,输出数据由输入数据决定。
程序功能说明包括动态说明和静态说明:
动态说明:描述输入数据的次序或转移次序。
静态说明:描述输入条件和输出条件之间的对应关系。
生成功能图测试用例的步骤如下:
1)生成局部测试用例:在每个状态中,通过因果图生成局部测试用例。
2)生成测试路径:利用规则生成从初始状态到最后状态的测试路径。
3)合成测试用例:合成测试路径与功能图中每个状态的局部测试用例。其结果是初始状态到最后状态的一个状态序列,以及每个状态中输入数据与对应输出数据的组合。
4)采用条件构造树测试用例的合成算法。
3.2.7 错误推测法
错误推测法是基于以往的经验和直觉,参照以往的软件系统出现的错误,推测程序中所有可能存在的各种缺陷和错误,从而有针对性地设计测试用例。
错误推测法的基本思路是:列举出程序中所有可能的错误和容易发生错误的特殊情况,根据可能出现的错误情况选择测试用例。
例如:
1)单元测试中列出许多在模块中常见的错误、以前产品测试中曾经发现的错误等。
2)输入数据为0或字符为空。
3)各种情况在产品说明中常常被忽视,也可能被程序员遗忘,但是在实际使用中却经常发生。测试人员要站在用户的角度,考虑他们要输入的信息,而不管这些信息看起来是合法的输入还是非法的输入。
3.2.8 正交试验设计法
正交试验设计法是通过正交试验理论来指导测试用例的选取,以便能够用较少的测试用例使测试充分,本方法在系统测试用例的设计中不常用。
正交试验设计法依据Galois理论,从大量的(实验)数据(测试用例)中挑选适量的、有代表性的点(例),从而合理地安排实验(测试)的一种科学实验设计方法。
该设计方法是使用已经建好的正交表格来安排试验并进行数据分析的一种方法,目的是用最少的测试用例达到最高的测试覆盖率。
利用正交试验设计测试用例的步骤如下:
1)提取功能说明,构造因子——状态表:
影响实验指标的条件称为因子,而影响实验因子的条件称为因子的状态。利用正交试验设计方法来设计测试用例时,首先要根据被测试软件的规格说明书找出影响其功能实现的操作对象和外部因素,把它们当做因子,而把各个因子的取值当做状态。对软件需求规格说明中的功能要求进行划分,把整体的概要性的功能要求进行逐层分解与展开,分解成具体的、相对独立的、基本的功能要求。这样就可以把被测软件中的所有因子都确定下来,并为确定每个因子的权值提供参考的依据。确定因子与状态是设计测试用例的关键,因此要求尽可能全面、正确地确定取值,以确保测试用例的设计完整、有效。
2)加权筛选,生成因素分析表:
对因子与状态的选择可按其重要程度分别加权,可根据各个因子及状态的作用大小、出现频率的大小以及测试的需要确定权值的大小。
3)利用正交表构造测试数据集:
提取功能说明,构造因子——状态表;
加权筛选,生成因素分析表;
利用正交表构造测试数据集。
3.3 黑盒测试的原则和策略
随着软件开发速度的加快,用户需求变化趋势的加快,黑盒测试作为一种测试方法也需要不断地调整应用,所以要对软件进行更加严格的测试,不断变化的需求将导致不同的功能产生,对每个功能都需要进行测试。另外,由于黑盒测试不涉及内部结构和代码知识,而是根据规格说明书进行的,因此在选择黑盒测试的方法方面要考虑以下原则和策略。
3.3.1 黑盒测试的原则
黑盒测试的原则如下:
根据软件规格说明书设计测试用例,规格说明书的正确性是至关重要的。
有针对性地查找问题,并且正确定位等价类。
检查功能是否有缺陷或错误现象。
根据测试的重要性来确定测试等级和测试重点,减少程序可能出现的缺陷。
检查在接口处输入的信息是否能正确接受,以及接受后能否输出正确的结果。
认真选择测试策略,尽可能发现程序的数据结构错误或外部信息访问错误,站在用户角度进行测试。
3.3.2 黑盒测试的策略
黑盒测试的策略如下:
1)在任何情况下都必须采用边界值分析法。这种方法设计出来的测试用例对发现程序的错误是非常有用的。
2)必要时采用等价类划分法补充测试用例。
3)对照程序逻辑,检查已设计的测试用例的逻辑覆盖程度。如果它没有达到要求的覆盖标准,则应当补充更多的测试用例。
4)如果程序的功能说明中含有输入条件的组合情况,则应该一开始就选用因果图法。
5)对于业务流清晰的系统,可以利用场景法贯穿整个测试案例过程,在案例中综合使用各种测试方法。
3.4 黑盒测试的步骤
在传统的软件开发中,测试工作往往放在整个开发过程的后期进行,当应用程序的编码已经完成后,才开始进行测试,这样做有如下缺点:
1)不利于发现早期设计过程(概要设计、初步设计、系统设计)中存在的错误。
2)如果早期设计过程存在错误而没有被发现,在程序编码后进行单元测试才发现是早期设计过程中产生的错误,这给测试工作带来的工作量是相当大的,同样也增加了测试成本。从某种程度上说,部分工作就需要重做。
3)不利于提高工作效率,影响开发的进度。
为了保证测试工作科学、准确、全面、高效地进行,应该采取边设计边测试、边开发边测试的策略,使设计工作、开发工作与测试工作同时进行。
3.4.1 测试计划
测试计划是完成测试工作的基础,一份好的测试计划是完成测试工作的先决条件。制订测试计划是整个测试工作的重要组成部分。测试计划模板请参见本书第15.2节。
测试计划是根据用户需求报告中关于功能和性能指标的要求进行的,测试计划制定的参考范围如下:
定义测试目标。
确定测试方法。
定义测试环境(包括选择测试工具)。
制定测试规约(编写测试用例)。
确定测试日程表。
制定测试审核计划。
3.4.2 测试设计
将测试计划阶段制订的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例。在实际测试中,往往要综合使用各种方法才能有效地提高测试效率和测试覆盖率,这就需要认真掌握这些方法的设计原理,积累更多的设计经验,以有效地提高测试水平。
3.4.3 测试执行的步骤
建立测试执行过程,测试执行一般由单元测试、集成测试、系统测试等步骤组成,测试人员应对发现的Bug进行跟踪管理,一步一个脚印地进行测试。
3.4.4 测试评估
结合测试报告及缺陷跟踪报告,对软件的质量和测试队伍的工作进度及工作效率进行综合评价。评价要本着务实、认真、公正的态度进行。
3.5 习题
1.请详细叙述黑盒测试的基本概念。
2.请说明黑盒测试都有哪些优点。
3.请说明黑盒测试都有哪些缺点。
4.请详细说明黑盒测试的方法。
5.黑盒测试的原则都有哪些?