一、概述
(一)依据
- 《软件需求规格说明书》以及对应的模型或用户需求。
(二)特点
- 不考虑内部结构和内部特征
(三)测试用例满足的标准
- 利用黑盒测试技术导出测试用例
(四)测试技术(GB/T38634.4-2020)
1、等价类划分
(1)概念
- 依据**《需求规格说明书》的描述,找出程序所有的输入**形成一个集合(输入域)
- 依据程序的输入域划分出若干个子集,从每个子集中选出一个或者少数的测试数据代表对这个区域进行测试。
(2)原因
- 通过较少的测试用例达到尽量多的测试覆盖,解决不能穷举测试的问题
(3)价值
- 能够有效减少工作量,提高工作效率,保证测试覆盖强度。
(4)相关概念
-
等价类
指某个输入域的子集。 -
有效等价类
对于程序的规格说明来说是合理的、有意义的输入数据构成的集合
用户输入的有效数据,并得到预期的或正常的结果 -
无效等价类
指对程序的规格说明来说是不合理的、或无意义的输入数据所构成的集合。
异常的或不符合规定的输入,相应的也会得到异常的输出或提示信息。
(5)等价类划分法步骤
- 先从程序规格说明书中找出各个输入条件
- 再为每个输入条件划分等价类,形成若干互不相交的子集
- 列出等价表
(6)等价类划分原则
- 在输入条件规定了取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类(原则1)
- 在输入条件规定了输入值的集合或者规定了“必须如何的条件的情况下,可以确立一个有效等价类和一个无效等价类(原则2)
- 在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类(原则3)
- 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确定n个有效等价类和一个无效等价类(原则4)
- 在规定了输入数据必须遵守的规则的情况下,可确定一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)(原则5)
- 在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类(原则6)
(7)测试用例的设计步骤
- 为每个等价类规定一个唯一的编号
- 设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖
- 设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步使所有无效等价类均被覆盖
(8)规格说明
- 一个软件中要求用户输入以年月表示的日期,假定日期的输入范围限定在2000年1月至2100年12月之间,并且规定日期由6位数字字符组成,前4位表示年,后2位表示月,那么对应的“日期输入格式检查”这一功能的等价类
2、语法测试
(1)概述
- 很多程序设计的说明书是采用形式化的方法进行描述
- 形式化的描述方法是巴克斯范式(递归思想表达计算机语言符号集)
(2)基于两个目标设计测试用例
- 正面测试
- 负面测试
(3)设计原则
- 每当语法强制选择时,就为该选择的每个备选方案导出一个“选项”
- 每当语法强制执行迭代时,为此迭代导出至少两个“选项,一个包含了最小重复次数,另一个则大于最小重复次数
- 每当迭代被要求具有最大重复次数时,为此选代导出至少两个“选项”,一个具有最大重复次数,另一个则超过最大重复次数。
- 对于任何输入,可以对定义的语法改变以导出无效输入(变异”)
(4)巴克斯范式(BNF)
- 一种上下文无关的语法表示方法
单词=一个字母或多个字母
- 单词::=<字母>|<字母><单词>
email的语法
- 名字@名字.域名
3、因果图
(1)概念
- 简化了的逻辑图,直观表明输入条件和输出动作之间的因果关系。
- 需考虑输入条件的相互制约及组合关系;考虑输出条件对输入条件的依赖关系。
- 从用自然语言书写的程序规格说明的描述中找出因和果,检查软件的输入条件涉及的各种组合情况,最终生成判定表。
(2)原因
- 梳理条件之间的制约关系和动作之间的关系。
(3)价值
- 适合描述多种输入条件的组合,帮助测试人员把注意力集中到与软件功能有关的输入组合。
(4)基本符号
- 各结点表示状态,可取0或1;
- 0表示某状态不出现,1表示某状态出现
恒等
- 有因必有果,无因必无果
- C=1,则E=1;C=0,则E=0
非
- 有因无果,无因有果
与
- 多因才有果,缺一不可
或
- 多因中有一因出现,则必有果
与非
- 多因有1个或多个不出现,则有果;若多因全有,则无果
或非
- 多因全不出现,则有果;有至少1个因出现,则无果
(5)约束条件
互斥 E
- a、b不会同时出现,最多只有一个出现。
包含 I
- a、b、c三个原因至少有一个出现。
唯一 O
- a、b两个原因必须有一个出现,且仅有一个出现。
要求 R
- a出现时b必定出现。
屏蔽 M(结果方面)
- a出现时,b必定不出现;a不出现时,b则不确定。
(6)导出测试用例的步骤
- 分析程序规格说明的描述中:原因和结果
- 分析程序规格说明描述中语义的内容,并将其表示成连接各个原因与各个结果的“因果图”
- 标明约束条件
- 把因果图转换成判定表
- 为判定表中每一列表示的情况设计测试用例
实例
题目:
程序的规格说明要求:
输入的第一个字符必须是“#”或“”
第二个字符必须是个数字,在此情况下进行文件的修改;
如果第一个字符不是“#”或“”,则给出信息M1;
如果第二个字符不是数字,则给出信息M2。
解题
(1)明确要求后,明确分开因与果
原因:C1----第一个符号是“#”
C2----第一个字符是“*”
C3----第二个字符是一个数字
结果:a1----给出信息M1
a2----修改文件
a3----给出信息M2
(2)生成因果图
(3)将因果图转换成判定表
(4)设计测试用例
最左边两列,原因C1和C2同时为1不可能,排除掉,根据表设计6个测试用例
4、分类树
(1)概念
- 另一种将程序的输入划分子集的方法。
- 机器学习
(2)与等价类的区别
- 主要是看子集之间是否存在重叠
- 按等价类分,可能存在重叠
- 按分类树分,不存在重叠
(3)设计测试用例的步骤
- 识别出测试对象并分析输入域
- 对测试对象的输入域进行分类
- 画出分类树、组合成测试用例
组合测试用例注意
注意逻辑兼容性(交集不能为空)
识别测试特征集
测试条件
- TCOND1:目的地
- TCOND2:舱位
- TCOND3:座位
- TCOND4:食物偏好
测试条件的输入:
导出测试用例
5、组合测试
(1)概述
- 目的是在组合爆炸时提供一种相对合理的测试解决方案,在保证错误检出率的前提下,采用较少测试用例进行测试。
- 是指将软件抽象成一个或多个参数影响的系统,并通过参数和参数的取值,按照一定组合策略来规划的测试。
(2)组合测试输入数据要求
- 参数取值范围必须是可离散的
- 连续的参数或过多的取值需进行划分子集
(可采用等价类、边界值、分类树等)
(3)组合测试的实施步骤(key)
- ①识别出所需测试的软件功能,以及影响被测软件功能的参数
- ②依据①的结果,识别每个参数的取值范围
- ③依据①的结果,识别出参数间的约束,依据约束的强度设定组合强度
- ④依据③中设定的组合强度,选择对应的组合测试方法,生成与组合测试强度相符的测试覆盖项
- ⑤依据④中的测试覆盖项生成测试用例,直到每个测试覆盖项都包含在至少一个测试用例中
(4)组合强度(key)
- 测试条件项:目的地、舱位、座位
- 测试条件的覆盖项:可选值
单一选择
- 所选参数取值范围的任意可能取值至少被一个测试用例覆盖
- 设计测试用例
基本选择
- 对于任意一个参数的两个取值,存在两个测试用例覆盖这两个取值,且其它参数的取值相同
- 设计测试用例
成对组合
- 被测软件中的任意两个参数的取值范围的任意一对有效取值至少被一个测试用例覆盖
全组合
- 所有参数取值范围的任意有效取值的组合至少被一个测试用例所覆盖
K强度组合
- 在组合要求为K的组合中,任意K个参数取值范围的任意有效的组合至少被一个测试用例覆盖
6、边界值
(1)概述
- 对输入或输出的边界值进行测试的一种黑盒测试方法。
- 通常边界值分析法是作为等价类划分法的补充
- 思路:先做等价类分析,再等价类选择数据时选择边界数据作为测试的输入数据。
- 分类:二值边界、三值边界
(2)二值基本边界值分析
- 二值基本边界值分析是指测试用例在等价类中挑选输入数据时,挑正边界及边界外的值,再加一个正常值。
(3)三值基本边界值分析
(4)最坏情况边界分析
- “多缺陷”假设
- 健壮性测试:程序只考虑输入值x、输入值y的取值
- 健壮性最坏情况测试:程序同时考虑输入值x、y的取值情况
(5)边界值的获取
7、判定表测试
(1)判定表组成
- 概念:由于输入条件间会存在制约关系,不同条件组合会产生不同操作结果
- 与因果图的关系
测试中直接用判定表,但是所测功能逻辑特别复杂时,可以先构建因果图,再生成判定表
通过因果图生成执行条件的组合到结果之间的关系,再转成判定表。 - 条件桩
列出问题所有条件
次序没有什么关系 - 动作桩
列出问题规定可能采取的操作
顺序没有约束 - 条件项
列出针对它左列条件的取值,在所有可能情况下的真假值。 - 动作项
列出在条件项的各种取值情况下应该采取的动作。 - 规则
任何一个条件组合的特点取值及其相应要执行的操作成为规则。
判定表中贯穿条件项和动作项的一列就是一条规则。
(2)判定表建立
- 确定规则个数(依据软件规格说明)
- 列出所有的条件桩和动作桩
- 填入条件项
- 填入动作项。制定初始判定表
- 简化。合并相似规则或者相同动作
(3)适合使用判定表设计测试用例的条件
- 规格说明以判定表的形式给出,或很容易转换成判定表
- 条件的排列顺序不影响执行哪些操作
- 规则的排列顺序不影响执行哪些操作
- 当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则
- 如果某一规则要执行多个操作,这些操作的执行顺序无关紧要
8、状态转移测试
(1)概述
- 把软件若干种状态之间的转换条件和转换路径抽象出来,从覆盖所有状态转移路径的角度去设计测试用例,关注状态的转移是否正确。
(2)步骤
- 画出状态转移图
- 根据转移图,列出状态–事件表
- 根据转移图,画出状态转换树
- 根据状态转换树,按照单步转移覆盖的要求,推导测试路径
- 根据测试路径逐一编写测试用例
(3)状态覆盖
- 状态覆盖
使状态模型中所有状态都要被访问过 - 单步转移
覆盖状态模型中所有有效的单步 - 全转移
覆盖状态模型中所有有效的转移和无效的转移 - 多步转移
覆盖状态模型中N+1步转移的有效序列
(4)规格说明
- 客户在线向公司预定产品,此时产品的信息处于“预定”状态
- 客户支付了产品费用后,产品信息变为“已支付”状态
- 当客户到公司提取产品后,产品信息变为“已出货”状态
- 当产品完成交付后,产品信息变为“已交付”状态
- 当客户在完成交付前,取消自己的订购,如果支付了产品费用,则可以退款,取消后,产品信息处于“已取消”状态
(5)状态转移图
(6)状态转移状态-事件表
(7)状态转移树
(8)状态转移路径
- 路径1:预定→已支付→已出货→已交付
- 路径2:预定→已支付→已出货→已取消
- 路径3:预定→已支付→已取消
- 路径4:预定→已取消
9、场景测试
(1)概念
- 从一个流程开始,描述所经过路径的过程,达到遍历所有可能的基本流和备选流的场景,完成对系统功能的测试。
- 基本流:最简单的路径(直黑线表示)
- 备选流:可能从基本流开始,在某特定条件下执行,然后重新加入基本流中,或者终止用例而不再重新加入到某个流;备选流也可以起源于另一个备选流
(2)设计步骤
- 根据说明,描述程序的基本流及各项备选流
- 根据基本流和各项备选流生成不同的场景
- 对每一个场景生成相应的测试用例
- 对生成的所有测试用例重新复审,去掉多余测试用例,确定测试用例后,确定每一个测试用例的测试数据值
(3)规格说明
前置条件,用户已成功登录自己账户,具体结算流程如下:
- 发起结算,结算选择,验证用户密码,结算完成
- 发起结算失败时,提示发起结算失败原因,返回发起结算界面
- 结算失败时,提示结算失败,返回结算界面
- 验证用户密码失败小于3次时,提示验证失败,返回验证密码界面
- 验证用户密码失败3次时,提示验证失败3次,结算失败返回发起结算界面
(4)基本场景
结算成功:成功进行结算
(5)可选场景
- 发起结算失败:不具备发起结算条件,返回发起结算界面
- 结算选择错误:结算选择设置错误,返回结算界面
- 验证用户密码失败:验证用户密码错误(小于3次),返回输入密码界面
- 验证用户密码失败:验证用户密码错误(3次),锁定用户,并返回发起结算界面
(6)场景条件流图
(7)场景测试路径
(8)测试覆盖项
- 测试覆盖项和测试条件一样都是基本场景和可选场景
- TCOVERI=TCOND1
- TCOVER2=TCOND2
- TCOVER3=TCOND3
- TCOVER4=TCOND4
- TCOVER5=TCOND5
(9)测试用例
10、随机测试
(1)概述
- 不需要对测试的输入域进行划分,仅要求输入值是从输入域中随机选择。
(2)应用场景
- 用在测试用例自动化生成和执行中,按照预先定义好的输入分布模型,计算机随机选择分布值并执行,反复执行直至满足时先定义好的停止条件为止。
二、测试设计方法选择策略
(一)测试设计方法
- 如何测试功能的有效性
- 何种类型的输入会产生好的测试用例
- 软件是否对特定的输入值敏感
- 如何分隔数据类的边界
- 软件能够承受何种数据率和数据量
- 特定类型的数据组合会对软件产生何种影响
(二)测试设计方法选择策略
- 首先采用分类树或等价类对函数的输入域进行划分
- 在任何情况下都必须使用边界值分析方法
- 对于参数配置类的软件,要用组合测试技术选择较少的组合方式达到最佳效果
- 如果程序的功能说明中含有输入条件的组合情况,则可选用因果图法绘制判定表,然后采用判定表法继续进行测试
- 对于业务流清晰的系统,可选择场景测试
- 对于明确存在不同状态转移的软件,可选择状态转移测试
- 对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度
- 如测试用例自动生成和使用中可以结合被测软件实际,考虑选用分类树、状态转移测试、随机测试等多种方式
- 对于形式化方式定义的规格说明,可选择语法测试
三、测试用例的编写
(一)概述
- 编写测试用例,在整个软件测试过程当中属于动态测试过程的测试设计和实现过程的工作
- 最终工作产品:测试设计规格说明、测试用例规格说明、测试规程规格说明
(二)编写
- 分析被测软件的相关测试依据,将待测的特征组合成特征集,记录在测试设计规格说明中
- 根据测试计划中规定的测试完成准则,确定每个特征的测试条件,并记录在测试设计规格说明中
- 根据测试条件,导出测试覆盖项,记录在测试用例规格说明中
- 根据测试覆盖项,导出测试用例,并记录在测试用例规格说明中
- 根据执行的约束将测试用例汇集到一个或多个测试集中,记录在测试规程规格说明中
- 根据前置条件和后置条件,以及其他测试要求所描述的依赖性,对测试集中的各测试用例进行排序,导出测试规程,并将其记录在测试规程规格说明中
(三)测试设计规格说明
1、特征集
- 概念:特征集市测试项需被测试的特征的逻辑分组。
- 内容:唯一标识符、测试条件描述、测试目标、测试优先级、测试策略、可追溯性
2、测试条件
- 总结完特征值后,需对对应的测试依据指定的项或事件梳理成测试条件。
- 唯一标识符、测试条件描述、测试优先级、可追溯性
(四)测试用例规格说明
1、测试覆盖项
- 使用测试设计技术从测试条件中导出,预计未来的测试用例将覆盖的内容
- 唯一标识符、测试覆盖项的描述、测试优先级、可追溯性(每个覆盖性追溯到其所属的测试条件、特征集或引用的测试依据)
2、测试用例
- 唯一标识符、测试目标、测试优先级、可追溯性、测试的前置条件、输入、预期结果、评价判定结果的准则
(五)测试规程规格说明
1、测试集
- 测试集选择
- 唯一标识符、测试目标、测试优先级、测试集内容
2、测试规程
- 对测试集中的测试用例如何按照前置条件、后置条件以及其他测试所需的依赖关系执行的顺序操作
- 唯一标识、启动操作、待执行的测试用例、与其他规程的关系、如何停止及结束测试
六、历年真题
(一)考点
- 等价类划分法
- 边界值分析法
- 场景法
- 因果图法
- 黑盒测试的方法
(二)题
1、说明
某航空公司进行促销活动,会员在指定日期范围内搭乘航班将获得一定奖励,奖励分为4个档次,由乘机次数和点数共同决定,如表2-1所示。
其中点数跟票面价格和购票渠道有关,规则如表2-2所示。
航空公司开发了一个程序来计算会员在该促销活动后的奖励,程序的输入包括会员在活动期间的乘机次数C、官网购票金额A(单位:元)和手机客户端购票金额B(单位:元),程序的输出为本次活动奖励档次L。其中,C、A、B为非负整数,L为0~5之间的整数(0表示无奖励)
【问题1】(4分)采用等价类划分法对该程序进行测试(同时对输入输出进行等价类划分),等价类表如表2-3所示,请补充表2-3中的空(1)~(4)。
答案:(1)非负整数 (2)4 (3)0 (4)负整数
【问题2】(9分)
根据以上等价类表设计的测试用例如表2-4所示,请补充表2-4中的空(1)~(9)
答案:(1)1、2、3、8 (2)0
(3)20(大于等于20的等价答案)
(4)15000(大于等于15000的等价答案)
(5)10(大于等于10且小于15的等价答案)
(6)7000(大于等于7000的答案)
(7)1、2、3、7
(8)1.1(非整数的等价答案)
(9)N/A
【问题3】(2分)对于本案例的黑盒测试来说,以上测试方法有哪些不足?
答案:(1)无法体现出C、A/B之间的制约关系,比如当满足A/B(转换后对应的点数满足),但不满足C(乘机次数)的情况
(2)没有考虑手机端的情况,题干中B的数值都为0
2、第二题
某商店为购买不同数量商品的顾客报出不同的价格,其报价规则如表2-1所示:
如买11件需要支付1030+127=327元,买35件需要支付:1030+1027+1025+522=930元
现在该商家开发一个软件,输入为商品数C(1<=C<=100),输出为因付的价钱P
【问题1】(6分)请采用等价类划分法为该软件设计测试用例(不考虑C为非整数的情况)
答案:测试用例1:31~100中任意一个数
测试用例2:101
测试用例3:0
测试用例4:1~10中任意一个数
测试用例5:11~20中任意一个数
测试用例6:21~30中任意一个数
【问题2】(6分)
请采用边界值分析法为该软件设计测试用例(不考虑健壮性测试,即不考虑C不在1到100之间或者是非整数的情况)
答案:(题干中不要求考虑健壮性,和1~100以外的情况)1、5、10、11、15、20、21、25、30、31、35、100
【问题3】(3分)
列举除了等价类划分法和边界值分析法以外的三种常见的黑盒测试用例测试方法。
答案:错误推测法、因果图法、判断表法、正交试验法、功能图法、场景法