知识点
应用等价类划分从给定的需求生成测试用例
应用边界值分析从给定的需求生成测试用例
应用判定表测试从给定的需求生成测试用例
应用状态转换测试从给定的需求生成测试用例
解释如何从用例生成测试用例
等价类划分技术的定义
等价类划分技术把所有可能的输入数据,即软件或者系统的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据作为测试用例的输入数据!
等价类划分技术可以应用在所有的测试级别中!
等价类的含义
等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类其它值的测试!
从测试人员的角度,等价类对揭露软件或者系统中的缺陷来说,集合中的每个输入条件是等效的!
等价类的类型
有效等价类
是指对于软件或者系统的规格说明来说,是合理的,有意义的输入数据构成的集合!
无效等价类
是指对于软件或者系统的规格说明来说,是不合理的,无意义的输入数据构成的集合!
在设计测试用例时,要同时考虑有效等价类和无效等价类的设计!
等价类划分的原则1
如果输入条件规定了连续的取值范围,则可以创建一个有效等价类和两个无效等价类;
等价类划分的例子1
月工资参数x的取值范围是到;
有效等价类:≤x≤;
无效等价类:x或者x;
等价类划分的原则2
假如描述的是允许数值的范围(离散的数字),则可以创建一个有效等价类(所有可能的有效值),和两个无效等价类(少于和多于有效的个数);
等价类划分的例子2
注册的用户名的组成应该是6至12位的字符串:
有效等价类:6≤用户名长度≤12;
无效等价类:用户名长度大于12或者小于6;
等价类划分的原则3
假如输入数据规定的是一组值(假定n个),并且软件对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类;
等价类划分的例子3
根据学历来定岗位工资,学历可为:专科、本科、硕士、博士四种之一。
有效等价类:专科、本科、硕士、博士四个等价类;
无效等价类:其他的学历;
等价类划分的原则4
假如输入数据规定的是一组值(假定n个),并且软件对每个输入值都一样的处理,可确立一个有效等价类和一个无效等价类;
等价类划分的例子4
预订飞机票的人可以是:小孩、青少年、成人、学生、残疾人或者退休人员,软件处理方式一样;
有效等价类:列表中的任何一个;
无效等价类:不包含在列表中的其他类型;
等价类划分的原则5
在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);
等价类划分的例子5
函数变量名必须以字母开头,并且长度为8;
有效等价类:字母开头,长度为8;
无效等价类:不是以字母开头,或长度不是8;
等价类划分的原则6
在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类;
等价类划分的例子6
在论坛中注册用户的时候,需要判断是否接受用户协议;
有效等价类:接受协议;
无效等价类:不接受协议;
等价类划分的原则7
在输入条件规定了输入值的集合或者规定了"必须如何"的条件的情况下,可确立一个有效等价类和一个无效等价类;
等价类划分的例子7
变量标识必须是以字母开头的字符串;
有效等价类:以字母开头的字符串;
无效等价类:不是以字母开头的其他类型;
等价类划分的原则8
在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类;
等价类划分的例子8
比如:在ATM取款时,首先依据卡是否有效划分等价类,对于卡有效的情况再进一步划分子等价类,如依据提款金额是否在允许范围内,ATM机余额是否充足等再划分等价类;
等价类划分的测试用例
测试对象通常有不止一个输入参数,如何对这些参数等价类进行组合测试,来保证等价类的覆盖率,是我们测试用例设计首先需要考虑的问题!
等价类组合的原则
所有有效等价类的代表值都需要集成到测试用例中,即覆盖有效等价类的所有组合。任何一个组合都将设计成一个有效的测试用例,或者叫正面测试用例;
无效等价类的代表值只能和其他有效等价类的代表值(随意)进行组合。因此,每个无效等价类将产生一个额外的无效测试用例,或者叫负面测试用例;
等价类组合的数量
正面测试用例:即有效等价类的组合数量,是每个参数等价类数目的乘积;
负面测试用例:即无效等价类的组合数量,是每个无效等价类数目之和;
等价类的组合,将产生数以百计的测试用例,如何有效地减少测试用例的数目?
等价类测试用例的选择规则
由所有代表值组合而成的测试用例按使用频率(典型的使用特征)进行排序,并按照这个序列设置优先级。这样就能仅对相关的测试用例(典型的组合)进行测试;
优先考虑包含边界值或者边界值组合的测试用例;
将一个等价类的每个代表值和其他等价类的每个代表值进行组合来设计测试用例(即双向组合代替完全组合);
保证满足最小原则:一个等价类的每个代表值至少在一个测试用例中出现;
无效等价类的代表值不与其他无效等价类的代表值进行组合;
等价类划分的例子需求
汽车价格的起点为基准价(baseprice,范围$10K到K)减去经销商给的折扣(discount,范围为0到25%);
特殊设备(specialprice)的价格范围是$8K到35K;
如果选择了3个或更多的附加设备(extras)(这些设备不包括在特殊设备中),这些附加设备可以有10%的折扣。如果选择了5个或更多的附加设备,这些附加设备的折扣可以增加到15%。附加设备的个数范围为0到25个;
总的附加设备的价格范围为$50到;
附加设备的折扣和经销商的折扣不能重叠使用,附加设备的折扣是根据个数自动计算的;
例子的GUI格式
识别等价类输入域
细化等价类
根据详细的规格说明,对输入域进行等价类划分,得到7个有效等价类和15个无效等价类。根据前面描述的等价类组合原则,可以得到正面测试用例数目3个=1x1x3x1x1;得到的负面测试用例数目是15个=3+3+3+3+3!
即,从22个等价类中得到18个测试用例!
测试用例的组合
等价类划分覆盖率=(执行的等价类数量/总的等价类数量)×%
等价类划分的价值
等价类划分技术可以显著的减少测试用例的数量。因为它的假设条件是等价类范围的任何一个输入,都结果而言都是一样的;
等价类划分技术不仅仅用来确定方法和函数的输入和输出,也可以用来准备中间值、状态、与时间相关的值(如事件之前或之后的值)以及接口参数等;
等价类划分技术可以应用于任何测试级别:单元测试、集成测试、系统测试和验收测试;
练习的GUI
边界值分析的定义
边界值分析就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界!
边界值分析方法需要测试边界值以及离边界值最近的上下两个值(等价类里面的值和等价类外面的值)。因此,通常情况下,对于边界值,一般可以得到3个测试用例!
边界值分析的理由
长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界值上,而不是发生在输入输出范围的内部。出现这种现象的原因有:
需求文档或者规格说明中经常没有明确的定义边界值;
或者编程人员对边界值产生误解;
常见的边界值类型
对16-bit的整数而言和-是边界值;
屏幕上光标在最左上、最右下位置;
报表的第一行和最后一行;
数组元素的第一个和最后一个;
边界值的提示1
如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据;
边界值的例子1
如果软件的规格说明中规定:“重量在10公斤至50公斤范围内的邮件,其邮费计算公式为……”。假如设计基于边界值的测试用例,我们应取10及50,还应取10.01,49.99,9.99及50.01等;
边界值的提示2
如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少1,比最大个数多1的数作为测试数据;
边界值的例子2
一个输入文件应包括1~个记录,则测试用例可取1和,还应取0及等;
边界值的提示3
尽量选择非常庞大的数据结构、列表和表格等作为边界值分析的数据,比如,那些能使内存溢出、文件和数据存储到达边界的数据,来检查测试对象在这种极端情形下的行为;
边界值的提示4
对于列表和表格,空列表和满列表以及列表的第一个元素和最后一个元素都是应该作为分析的对象,因为测试它们常常可以发现由于编程错误而导致的失效;
边界值分析步骤
边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例;
将软件的输入或者输出参数进行等价类划分;
在等价类的基础之上进行边界值分析。一般情况下,假如边界值已经由等价类划分覆盖,则可以不予考虑;
将边界值进行组合,作为测试用例的输入数据;
边界值分析例子
边界值分析覆盖率=(执行的边界值数量/总的边界值数量)×%
边界值分析的价值
边界值分析技术可以显著的减少测试用例数量。边界值上是最容易发现缺陷的地方;
边界值分析技术应该和等价类划分技术紧密结合使用;
边界值分析技术可以应用于任何测试级别:单元测试、集成测试、系统测试和验收测试;
边界值
状态转换测试
状态转换测试定义
测试对象的输出和行为方式不仅受当前输入数据的影响,同时还与测试对象之前的执行情况,或者之前的事件或以前的输入数据等有关;
通过引入状态图(statediagram)来描述测试对象和测试数据、对象状态之间的关系;
状态图中的各个状态是通过不同的事件驱动的,比如函数的调用;
基于状态图开展的测试称之为状态转换测试;
状态转换测试之状态图
状态转换测试之状态
状态图到状态树的规则
初始状态或开始状态是树的根;
对于状态图内从开始状态出发到达一个任意可达状态的每个可能的转换,转换树都包含了从根出发到达一个代表此状态的下一后续状态的结点的分支;
对转换树的每个叶结点(新增加的结点)重复步骤2的过程,直到满足下面结束条件中的一个:
与叶结点相关的状态已经出现过一次从状态树的根到叶结点的连接上,这个结束条件对应于状态图中的一遍循环;
与叶结点相关的状态是一个结束状态,并且也没有更多的状态转换需要考虑;
状态图到状态树
状态树扩展
测试用例包含的信息
测试对象的初始状态(组件或系统);
测试对象的输入;
期望输出或者期望行为;
期望的结束状态;
状态转换测试的提示
开始写规格说明的时候,就从测试的角度来评估测试对象的状态转换图。假如测试对象有很多状态和状态转换,表明需要更多的测试工作量,可能的情况下应该寻找对策简化测试对象;
检查规格说明,确保测试对象状态容易识别,且这些状态不是由大量不同变量组合构成的;
检查规格说明,保证从外部可以比较容易地访问状态变量。在测试过程中如能使用设置状态/重设状态函数以及读取状态值函数等将会给测试带来很大益处;
定义状态需要考虑的信息
状态转换之前的状态;
触发状态转换的触发事件;
在状态转换时触发的期望反应;
接下来的期望状态;
状态转换测试强度定义1
状态转换测试强度定义2
状态转换测试强度定义3
状态转换测试强度定义4
状态转换测试覆盖率=(执行的状态转换数量/总的数量)×%
状态转换测试价值
状态转换测试适用于那些状态起着重要作用的测试对象,并且功能也会因为测试对象的状态不同而受到影响;
在面向对象的系统中,对象可以有不同的状态,操作对象的方法必须能根据不同的状态做出相应的反应。因此,状态转换测试对于面向对象测试非常重要;
状态转换测试:练习
练习输出:
列出状态图中包含的状态和事件;
设计测试用例覆盖所有的状态;
设计测试用例覆盖所有的事件;
设计测试用例覆盖所有的路径;
设计完整的状态转换表;
决策表测试
决策表测试的定义
决策表测试是分析和表达多逻辑条件下执行不同操作的情况的工具!
决策表能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用决策表能够设计出完整的测试用例集合;
在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。决策表很适合于处理这类问题;
决策表测试的组成
决策表组成的定义
条件桩(ConditionStub):列出了问题的所有条件。通常认为列出的条件的次序无关紧要;
动作桩(ActionStub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束;
条件项(ConditionEntry):列出针对它左列条件的取值。在所有可能情况下的真假值;
动作项(ActionEntry):列出在条件项的各种取值情况下应该采取的动作;
决策表测试规则
任何一个条件组合的特定取值及其相应要执行的动作就称为规则;
在决策表中贯穿条件项和动作项的一列就是一条规则;
决策表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列;
决策表测试步骤
确定规则的个数。假如有n个条件,每个条件有两个取值(0,1),故有2n种规则;
列出所有的条件桩和动作桩;
填入条件项;
填入动作项,得到初始的决策表;
简化合并相似的规则,比如相同动作,得到优化的决策表;
每列规则设计一个测试用例;
决策表测试例子
决策表测试规则合并
有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系;
决策表规则合并优化
决策表转化为概要测试用例
决策表测试应用
规格说明以决策表形式给出,或很容易转换成决策表;
条件的排列顺序不会也不影响执行哪些操作;
规则的排列顺序不会也不影响执行哪些操作;
每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则;
如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要;
决策表测试测试用例
从决策表的每一列可以清楚地看到条件及其输入的依赖关系,以及由这些输入组合得到的相应的输出动作和结果;
决策表定义了逻辑测试用例,为了执行这些测试用例,必须输入具体的数据值并且标识前置条件和后置条件;
决策表测试完成准则
同前面介绍的方法一样,可以简单地定义决策表测试完成的准则。最基本的要求是至少用一个测试用例来执行决策表中的每一列,这样就验证了所有关心的输入条件组合和相应的输出结果;
决策表测试价值
根据可能的输入条件组合来定义决策表是一种系统化而且非常正式的方法,它可以覆盖一些在其他测试用例设计技术中没有包含的输入组合。但是,在优化决策表时可能会引入错误,比如忽略了需要考虑的输入和条件的组合。
正如前面提到,在条件的数量和依赖关系增加时,决策表的规模增加得非常快,从而失去可读性。如果没有工具的支持,使用决策表技术就不太容易;
决策表测试:练习
练习输出
输出初始的三角形判定决策表;
根据前面的知识,将初始决策表进行合理的优化,得到简化的决策表;
根据简化的决策表,设计概要测试用例;
用例测试
用例测试定义
通过用例(UseCases)或业务场景来设计测试,用例描述了参与者(包括用户与系统)之间的相互作用,并从这些交互产生一个从用户的角度所期望和能观察到的结果;
每个用例都有测试前置条件,这是用例成功执行的必要条件。每个用例结束后都存在后置条件,这是在用例执行完成后能观察到的结果和系统的结束状态;
用例测试例子
测试用例必要信息
开始情况和前置条件;
其他可能的条件;
期望结果;
后置条件;
用例测试技术的价值
基于用例的测试技术适合于测试典型的用户系统交互。因此,将这种技术应用在验收测试和系统测试中是最好的;
另外,测试规格说明工具可以用于支持用例测试技术。其他测试技术(如边界值分析)可以在这方面做些辅助;
其他黑盒测试技术
随机测试
随机选择数据作为测试用例的值;
冒烟测试
冒烟测试通常被理解为“快速且脏”的测试,主要的目的是验证测试对象的最低要求的可靠性;
冒烟测试主要集中在测试对象的主要功能上,不会对测试的输出进行详细的评估;
黑盒测试技术讨论