一. 黑盒测试概述
1.定义
也称功能测试,它是通过测试来检测每个功能是否都能正常使用。
把程序看成一个黑盒子,完全不考虑程序内部结构和内部特性,着眼于程序外部结构,不考虑内部逻辑结构。
在程序接口进行测试,只检查程序功能是否按照需求说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息
主要针对软件界面和软件功能进行测试
2.试图发现的错误类型
功能不正确或遗漏
界面错误(输入能否正确的接受?能否输出正确的结果)
数据库访问错误(如数据结构定义错误或外部信息(如数据文件)访问错误)
性能错误
初始化和终止错误
3.黑盒测试用例设计方法
(1) 等价类划分法:把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类的其他值
(2) 边界值分析法:通过选择等价类边界的测试用例。不仅重视输入条件边界,而且也必须考虑输出域边界
(3) 错误推测法:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例的方法
(4) 因果图法:从用自然语言书写的程序规格说明的描述中找出因(输入条件)和果(输入或程序状态的改变),可以通过因果图转换成判定表
(5) 判定表驱动法:利用判定表进行测试用例的设计
(6) 正交试验设计法:使用已设计好的正交表格来安排试验,并进行数据分析的一种方法,目的是用最少的测试用例达到最高的测试覆盖率
(7) 功能图法:用功能图形象地表示程序的功能说明,并机械地生成功能图的测试用例。功能图模型由状态迁移图和逻辑功能模型构成
二. 黑盒测试用例设计方法
1.等价类划分法
(1)划分基础:需求规格说明书中输入、输出要求
(2)等价类:某个输入域的子集合;分为有效等价类和无效等价类
有效等价类:指对于程序规格说明书来说是合理的、有意义的输入数据构成的集合。利用有效等价类可以检验程序是否实现了规格说明书中的功能和性能
无效等价类:与有效等价的定义恰巧相反
(3)划分等价类原则(6条)
序号 输入条件(数据) 划分等价类
1 规定了取值范围值的个数 一个有效等价类两个无效等价类
2 规定了输入值的集合规定了“必须如何”的条件 一个有效等价类一个无效等价类
3 是一个布尔量 一个有效等价类一个无效等价类
4 输入数据的一组值(n个),并且程序对每一个输入值分别进行处理 n个有效等价类一个无效等价类
5 规定必须遵守的规则 一个有效等价类(符合规则)若干个无效等价类
6 在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类
(4) 列出等价类表
在确定了等价类之后,建立等价类表,列出所有划分出的等价类
输入条件 有效等价类 无效等类
…… …… ……
(5) 确定测试用例步骤
第一步:为每个等价类规定一个惟一的编号
第二步:设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步骤,最后使得所有有效等价类均被测试用例所覆盖
第三步:设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步骤,最后使得所有有效等价类均被测试用例所覆盖
小结:采用等价类划分方法设计测试用例,按照划分等价类、列出等价列表、确定测试用例三个步骤完成,目标是把可能的测试用例组合缩减到仍然足以满足软件测试需求为止。
2.边界值分析法
(1) 边界类型
边界条件:可以在产品说明书中有定义或者在使用软件过程中确定
次边界条件:在软件内部,也称为内部边界条件
其他边界条件:如输入信息为空(对于此类问题应建立单独的等价类空间)、非法、错误、不正确和垃圾数据
(2)边界值的选择方法(遵循原则)
序号 输入条件(数据) 输入边界值数据
1 规定了取值范围 刚刚达到这个范围刚刚超越这个范围
2 规定值的个数 最大个数、比最大个数大1最小个数、比最小个数少1
3 根据规格说明书的每个输出条件,使用 原则1、2
4 输入或输出是个有序集合 集合的第一个、最后一个元素
5 程序中使用一个内部数据结构 内部数据结构边界上的值
6 分析规格说明,找出其他可能的边界
(3)例子:
允许文本输入1~255个字符:测试用例-1、255、254、0、256
程序读写软盘:测试用例-文件很小、等于软盘容量限制之内、空、超过
程序允许在一张纸上打印多个页面:测试用例-只打印一页,规定最大页,0页,大于允许最大页数
3.错误推测法
基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例
4 .因果图法
侧重于输入条件的各种组合,各个输入情况之间的相互制约关系
(1) 因果图设计方法
从用自然语言书写的程序规格说明的描述中找出因果,通过因果图转换成判定表
(2) 因果图导出测试用例步骤
第一步:分析程序规格说明的描述中,哪些是原因,哪些是结果。原在因常常是输入条件或是输入条件的等价类,结果是输出条件
第二步:分析程序规格说明的描述中语义的内容,并将其表示成连接各个原因与各个结果的‘因果图’
第三步:标明约束条件
第四步:把因果图转换成判定表
第五步:为判定表中每一列表示的情况设计测试用例
(3) 因果图基本图形符号
通常在因果图中,用Ci 表示原因,Ei表示结果,各结点表示状态,可取值0(状态不出现) 或1(某状态出现)
恒等:若原因出现,则结果出现;若原因不出现,则结果不出现
非(~):若原因出现,则结果不出现;若原因不出现,则结果出现
或(V):若几个原因中有一个出现,则结果出现;若几个原因都不出现,则结果不出现;
与( ∧ ):若几个原因都出现,结果才出现;若其中有一个原因不出现,则结果不出现
(4) 因果图的约束符号
从输入(原因)考虑四种约束
E(互斥):表示两个原因不会同时成立,两个中最多有一个可能成立
I(包含):表示三个原因中至少有一个必须成立
O(惟一):表示两个原因中必须有一个,且仅有一个成立
R(要求):表示两个原因,a出现时,b也必须出现,a出现时,b不可能不出现
从输出(结果)考虑一种约束
M(屏蔽):两个结果,a为1时,b必须是0,当a为0时,b值不定
5.判定表驱动法
(1) 判定表:是分析和表达多逻辑条件下执行不同操作的情况的工具
(2) 判定表组成
条件桩:列出了问题的所有条件
动作桩:列出了问题规定可能采取的操作
条件项:列出针对它所列条件的取值,在所有可能情况下的真假值
动作项:列出在条件项的各种取值情况下应该采取的动作
规则:任何一个条件组合的特定取值及其相应要执行的操作
注:判定表中贯穿条件项和动作项的一列就是一条规则;
(3) 判定表的建立(步骤)
第一步:确定规则的个数。假如有n个条件,每个条件有两个取值(0,1),故有2n种规则
第二步:列出所有的条件桩和动作桩
第三步:填入条件项
第四步:填入动作项。制定初始判定表
第五步:简化。合并相似规则或者相同动作
(4) 适合使用判定表设计测试用例的条件
规格说明以判定表的形式给出,或很容易转换成判定表
条件的排列顺序不影响执行哪些操作
规则的排列顺序不影响执行哪些操作
当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则如果某一规则要执行多个操作,这些操作的执行顺序无关紧要
6.正交试验法
(1) 概述
从大量的试验数据中挑选适量的、有代表性的点,从而合理地安排测试的一种科学的试验设计方法
使用已造好的表格“-”正交表来安排试验并进行数据分析的一种方法
因子:影响实现指标的条件
因子的状态:影响实现因子的条件
(2) 优点
节省测试工时
可控制生成的测试用例的数量
测试用例具有一定的覆盖率
(3) 设计步骤
提取功能说明,构造因子‘-’状态表。
加权筛选,生成因素分析表;
利用正交表构造测试数据集,正交表的推导依据Galois理论
L:代表正交表,L8(27)代表7为因子数,2为因子的水平数,8为此表行的数目(试验次数)
行数为mn型的正交表中,试验次数(行数)=∑(每列水平数-1)+1
例:5个3水平因子及一个2水平因子,表示为35*21,试验次数=5*(3-1)+1*(2-1)+1=12,即L12(35*2)
7.功能图法
(1) 程序功能说明的组成
动态说明:描述输入数据的次序或转移次序
静态说明:描述输入条件和输出条件之间的对应关系
(2) 功能图:由状态迁移图和布尔函数组成,状态迁移图用状态和迁移来表示。一个状态指出数据输入的位置(或时间),一个迁移指明状态的改变,同时要依靠判定表或因果图表示的逻辑功能
(3) 功能图法概述
用功能图形象地表示程序的功能说明,并机械地生成功能图的测试用例
功能图模型由状态迁移图和逻辑功能模型构成
状态迁移图:用于表示输入数据序列以及相应的输出数据;由输入数据和当前状态决定输出数据和后续状态
逻辑功能模型:用于表示在状态中输入条件和输出条件的对应关系。由输入数据决定输出数据。此模型只适用于描述静态说明
功能图测试用例由测试中经过的一系列状态和在每个状态中必须依靠输入/输出数据满中的一对条件组成
(4) 测试用例生成方法
从状态迁移图中选取测试用例,用节点代替状态,用弧线代替迁移,状态图就可转化成一个程序的控制流程图形式
(5) 测试用例生成规则
为了把状态迁移(测试路径)的测试用例与逻辑模型(局部测试用例)的测试用例组合起来,从功能图生成实用的测试用例,在一个结构化的状态迁移(SST)中,定义3种形式的循环:顺序,选择和重复
(6) 功能图生成测试用例步骤
生成局部测试用例:在每个状态中,从因果图生成局部测试用例。局部测试用例由原因值(输入数据)组合与对应的结果值(输出数据或状态)构成
测试路径生成:利用上面的规则生成从初始状态到最后状态的测试路径
测试用例合成:合成测试路径与功能图中每个状态的局部测试用例。结果是初始状态到最后状态的一个状态序列,以及每个状态中输入数据与对应输出数据的组合。
测试用例的合成算法:采用条件构造树
8.场景法
(1) 基本流和备选流
采用此方法进行设计时,需要进行场景的设计,在场景中采用基本流和备选流表示经过用例的每条路径
基本流:采用直黑线表示,是经过用例的最简单的路径(无任何差错,程序从开始直接执行到结束)
备选流:采用不同颜色表示,一个备选流可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中,也可以起源于另一个备选流,或终止用例,不在加入到基本流中;(各种错误情况)
(2) 设计步骤
根据说明,描述出程序的基本流及各项备选流
根据基本流和各项备选流生成不同的场景
对每一个场景生成相应的测试用例
对生成的所有测试用例重新复审,去掉多余的测试用例,测试用例确定后,对每一个测试用例确定测试数据值
三. 黑盒测试用例设计方法的选择策略
1. 首先进行等价类划分,包括输入条件和输出条件的等价类划分,将无限测试变成有限测试,这是减少测试量和提高测试效率的最有效办法
2. 在任何情况下都必须使用边界值分析方法。此方法设计的测试用例发现程序错误的能力最强
3. 可以用错误和推测法追加一些测试用例
4. 对照程序的逻辑,检查已设计的测试用例的逻辑覆盖度,如果没有达到要求,应在补充
5. 如果程序的功能说明中含有输入条件的组合情况,一开始就可以使用因果图法和判定表驱动法
6. 对于参数配置类的软件,要用正交试验法选择较少的组合方式达到最佳效果
7. 功能图法也是很好的测试用例设计方法,我们可以通过不同时期条件的有效性设计不同的数据
8. 对于业务流清晰的系统,可以利用场景法贯空整个测试案例过程,在案例中综合使用各种方法
四. 测试用例的编写
1. 测试用例概述
(1) 定义
将测试行为具体量化的方法之一
设计一种情况,软件程序在这种情况下,必须能够正常运行并且达到程序所设计的执行结果
为达到最佳的测试效果或高效的揭露隐藏的错误而精心设计的少量测试数据,
一个好的测试用例是在于它能发现至今未发现的错误
(2) 优点:
在开始实施测试之前设计好测试用例,可以避免盲目测试并提高测试效率
测试用例的使用令软件测试的实施重点突出、目的明确
在软件版本更新后只需修正少部分的测试用例便可展开测试工作,降低工作强度,缩短项目周期
功能模块的通用化和复用化使软件易于开发,而测试用例的通用化和复用化使软件测试易于开展,并随着测试用例的不断精化其效率也不断攀升
2.计划测试用例的目的
(3) 计划测试用例,是达成测试目标的必由之路
(4) 组织性:使测试用例具有组织性,便于全体测试员和其他项目小组人员有效地审查和使用
(5) 重复性和跟踪,可以明确测试过程中测试用例的执行情况,保证测试的全面性
(6) 计划测试用例,可以避免发布忽略某些测试用例的软件
(7) 测试证实,正确的测试用例计划和跟踪提供了一种证实测试的手段
3.测试设计说明
(1) 定义:在测试计划中提炼测试方法,要明确指出设计包含的特性以及相关的测试用例和测试程序,并指定判断通过/失败的规则
(2) 目的;组织和描述针对具体特性需要进行的测试,注:不给出具体的测试用例或执行测试的步骤
(3) 包含的部分内容(来自ANSI/IEEE829 ANSI 美国国家标准化组织)
标识符:用于引用和定位测试设计说明的惟一标识符
要测试的特性:对测试设计说明所包含的软件特性的描述。还将明确出要间接测试的特性
方法:描述测试的通用方法。如果方法在测试计划中描述,在测试设计说明中要详细描述要使用的技术,并给出如何验证测试结果的方法
测试用例信息:用于描述所引用的测试用例的相关信息。如测试用例编号
通过/失败规则:描述用什么规则来判定某项特性的测试结果是通过还是失败。
4.测试用例说明
(1) 定义(ANSI/IEEE829):编写用于输入的实际数据和预期结果,并明确指出使用具体测试用例产生的测试程序的任何限制
(2) 包含的内容
标识符:由测试设计过程说明和测试程序说明引用的唯一标识符
测试项:描述被测试的详细特性、代码模块等
输入说明:列举执行测试用例的所有输入内容或者条件
输出说明:描述进行测试用例预期的结果
环境要求:执行测试用例的软件、硬件、测试工具及人员等要求
特殊要求:描述执行测试用例的特殊要求
用例之间的依赖性:注明与其分用例的依赖关系或受其他用例的影响
5. 测试程序说明
(1) 定义:明确指出为实现相关测试设计而执行具体测试用例和操作软件系统的全部步骤,有时也称为‘测试脚本说明’,即详细定义了执行测试用例的每一步操作
(2) 包含的内容
标识符:把测试程序与相关测试用例和测试设计相联系的惟一标识
目的:本程序描述的目的以及将要执行的测试用例的引用信息
特殊要求:执行测试所需的其他程、特殊测试技术或者特殊设备
程序步骤:执行测试用例的详细描述,包括
日志:指出记录测试结果和现象的方式
设置:如何准备测试
启动:启动测试的步骤
程序:运行测试的步骤
衡量标准:描述如何判断结果
关闭:描述因意外原因页推迟测试的步骤
终止:描述正常停止测试的步骤
重置:说明如何把环境恢复到测试前的状态
偶然事件:说明如何处理计划之外的情况