3     黑盒测试及用例的设计

端口测试模型

端口测试模型侧重于对被测对象的抽象,说明的是要测试什么。它将被测试对象之间的共性抽象出来,使测试与被测试对象可以最大程度地分离开来,其主要思想是:被测试对象可以用测试端口集合来表达;测试功能体现在测试端口的对外协议(称为端口协议)的实现上,对不同系统的测试或对同一系统中不同子系统的测试都表现为对不同端口的测试。端口协议一般用结构化语言描述在测试用例中。端口协议的差异不会影响测试对象的内部实现(与被测试对象的借口除外)。

 

对象测试模型

对象测试模型注重于测试内容的表达,阐明的是如何表达测试内容。对象测试模型把分散的功能测试单元有机地组合起来,使实际测试更逼近真正的系统测试。其主要思想是:测试内容及测试的实现方法(指对测试数据的处理)可以被封装限定在一个个测试对象中。测试对象有三个层次:数据对象、业务对象和事务对象,它们的关系式逐级被包含的关系。简单来说,数据对象是指业务(或功能)数据的载体,它通常有物理对应,其主要测试内容是一个状态迁移图;业务对象值共同实现一种业务(或功能)的数据对象集合,它一般都只有逻辑对应,其主要测试内容是一个时间追踪图;事务对象是指一组业务相关的业务对象的有序组合,其主要测试内容是业务间的关系图,准确地说是业务结果件的布尔关系图。

 

分层设计模型

分层设计模型侧重于黑盒自动测试工具的实现,阐明的是如何设计测试工具。它将测试工具的功能进行抽象和分层,使测试工具的积木化开发现实可行。其主要思想是:测试工具可划分为五个不同的层次,从低到高依次是端口驱动层、测试执行层、测试表达层、测试管理层、测试设计层。通过规范这五个层次间的接口,可使按照这个设计模型设计的测试工具或提供相同的接口的其他测试工具无缝地集成在一起,从而实现理想的积木式开发。

 

黑盒测试的测试用例设计方法:等价类划分方法、边界值分析方法、错误推测方法、因果图方法、决策表驱动分析方法、正交实验设计方法、功能图分析方法。

 

功能图方法是一种黑盒、白盒混合用例设计方法,它是以功能图形式化的方式表示程序的功能说明,并由此生成功能图的测试用例。功能图模型由状态迁移图和逻辑功能模型模型构成。

状态迁移图用于表示输入数据序列和相应的输出数据。在状态迁移图中,由输入数据和当前状态决定输出数据和后续状态。

逻辑功能模型用于表示在状态输入条件和输出条件之间的对应关系。逻辑功能模型只适合于描述静态说明,输出数据仅由输入数据决定。测试用例则由测试中的一系列状态和在每个状态中必须依靠输入/输出数据满足的一对条件组成。

 

等价类划分法(Equivalence Class Testing)对测试有两个重要的意义:完备性和无冗余性。等价类划分通过识别许多相等的条件,极大地降低了要测试的输入条件的数量,但这种方式不能测试输入条件组合。

 

针对是否对无效数据进行测试,可以将等价类测试分为标准等价类测试和健壮等价类测试。

标准等价类测试不考虑无效数据值,测试用例使用每个等价类中的一个值。通常,标准等价类测试用例的数量和最大等价类中元素的数目相等。

健壮等价类测试存在两个问题:第一个是规格说明往往没有定义无效测试用例的期望输出应该是怎样的,因此需要花费精力定义这些测试用例的期望输出;第二十对强类型的语言没有必要考虑无效的输入。

 

对等区间划分将被测对象的输入/输出划分成一些区间,被测软件对一个特定区间的任何值都是等价的。对等区间划分假定位于单个区间的所有值对测试都是对等的,应为每个区间的一个值设计一个测试用例。

对于复杂的软件,使用对等区间划分就不太实际了,对于枚举型等非标量数据也不能使用对等区间划分。

 

边界值分析法(Boundary Value Analysis, BVA)是基于可靠性理论中称为“单故障”的假设,即有两个或两个以上故障同时出现而导致软件失效的情况很少,也就是说,软件失效基本上是由单故障引起的。

 

对于一个含有n个变量的程序,保留其中一个变量,让其余的变量取正常值,被保留的变量一次取min min+ nom max- max值,对每个变量都重复进行,这样,对于一个n变量的程序,边界值分析测试程序会产生4n+1个测试用例。

 

因果图(Cause/Effect Graphing, CEG)方法是基于这样的一种思想:一些程序的功能可以用判定表的形式表示,并根据输入条件的组合情况规定相应的操作。因此,可以考虑为判定表中的每一列设计一个测试用例,以便测试程序在输入条件的某种组合下的输出是否正确。概括地说,因果图方法就是从程序规格说明书的描述中找出因(输入条件)和果(输出结果或程序状态的改变)的关系,通过因果图转换为判定表,最后为判定表中的每一列设计一个测试用例。这种方法考虑到输入情况的各种组合以及各个输入情况之间的相互制约关系。

 

在所有的黑盒测试方法中,决策表(也称判定表, Decision Table)驱动分析方法是最为严格、最具有逻辑性的测试方法。

判定表通常由四个部分组成:

条件桩():列出了问题的所有条件,通常认为列出的条件的次序无关紧要。

动作桩():列出了问题规定可能采取的操作,这些操作的排列顺序没有约束。

条件项():列出针对它左列条件的取值,在所有可能情况下的真假值。

动作项():列出在条件项的各种取值情况下应该采取的动作。

规则:任何一个条件组合的特定取值及其相应要执行的操作。在判定表中贯穿条件项和动作项的一列就是一条规则。

决策表最突出的优点是,能够把负载的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此利用决策表能够设计出完整的测试用例集合。

1)决策表测试法适用于具有以下特征的应用程序。

if-then-else逻辑突出。

输入变量之间存在逻辑关系。

涉及输入变量子集的计算。

输入与输出之间存在因果关系。

2)适用于使用决策表设计测试用例的情况。

① 规格说明以决策表形式给出,或较容易转换为决策表。

② 条件的排列顺序不会也不应影响执行的操作。

③ 规则的排列顺序不会也不应影响执行的操作。

④ 当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则。

⑤ 如果某一规则的条件要执行多个操作任务,这些操作的执行顺序无关紧要。

3) 决策表规模较大,有n个条件的有限条目决策表有2n个规则。

 

正交试验设计法(Orthogonal Experimental Design)是研究与处理多因素实验的一种科学方法。其原理根据正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具有“均匀分散,齐整可比”的特点,它利用规格化的表格——正交表,科学地挑选试验条件,合理安排实验。

正交表是一整套规则的设计表格,Ln(t^c)为正交表的代号,n为试验的次数,t为水平数,c为列数,也就是可能安排最多的因素个数。例如,L9(3^4),它表示需做9次实验,最多可观察4个因素,每个因素均为3个水平。根据正交表的数据结构看出,正交表是一个nc列的表,其中第j列由数码1,2,……,Sj组成,这些数码均各出现N/S次。正交表是运用组合数学理论,在拉丁方盒正交拉丁方的基础上构造的一种规格化的表格。它将正交试验选择的水平组合列成表格。

有关术语解释:

次数(Runs):运用在测试方法中,即为实验次数,若在软件测试中就是有多少个测试用例。

因素(Factor):在试验中,准备考察的变量称为因素。

水平(Level):在试验范围内,因素被考察的值称为水平。

正交表的符号表示:L runs (levels^factors)

例如, L8(2^7),L18(3^6;6^1)

Runs(次数计算):Runs=(levels-1)+1

例如L8(2^7)Runs=(2-1)*7+1=8L18(3^6;6^1)=3-1*6+6-1*1+1=18

 

正交试验设计法的特点

(1)   每一列中,不同的数字出现的次数相等。在同一张正交表中,任意两列(两个因素)的水平搭配(横向形成的数字对)是完全相同的。

(2)   任意两列中数字的排列方式齐全且均衡。在同一张正交表中,每个因素的每个水平出现的次数是完全相同的。

 

正交表强度(Strength)是指变量间的相互关系,当强度为2时,只考虑变量两两之间的影响,如果强度为3,同时考虑3个变量对结果的影响;当强度增加时,用例的个数会急剧增加。

 

测试用例设计方法选择的综合策略原则:

(1)   首先进行等价类划分,包括输入条件和输出条件的等价划分,将无限测试变成有限测试,这是减少工作量和提高测试效率最有效的方法。

(2)   在任何情况下,都必须使用边界值分析法。

(3)   可以使用错误推测法追加一些测试用例。

(4)   对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没有达到要求的覆盖标准,应当再补充足够的测试用例。

(5)   如果程序的功能说明中含有输入条件的组合情况,则一开始就可以选用因果图法和判定表驱动法。

(6)   对于参数配置类的软件,要用正交试验法选择较少的组合方式达到最佳效果。

(7)   利用功能图法可以通过不同时期条件的有效性设计不同的测试数据。

(8)   对于业务流清晰的系统,可以利用场景法贯穿整个测试案例设计过程,在案例中综合使用各种测试方法。