目录
什么是等价类划分法:从大量数据中选择一部分数据用于测试,尽可能使用最少的用例覆盖更多的数据
一个程序有多个输入,将这些输入按照需求划分为若干子集,这些子集就是等价类,在每个等价类中选择有代表性的数据设置测试用例
1. 划分等价类
等价类可以分为:
- 有效等价类:有效值的合集,符合程序要求,合理,且有意义的输入数据
- 无效等价类:无效值的合集,不符合程序要求,不合理,无意义的输入数据
了解了有效等价类与无效等价类,那么如何划分等价类呢?一般在划分等价类时需要遵守以下原则。
- 如果程序要求输入一个[有限区间的值],可以将数据划分为一个有效等价类和两个无效等价类,例如:要求值为1-100之间的正整数,则有效等价类为[1≤x≤100],无效等价类分为x<1和x>100。
- 如果程序要求输入一个[必须成立的值],则可以将输入数据划分为1个有效等价类和1个无效等价类,例如要求密码正确,则有效等价类为正确密码,无效等价类为错误密码
- 如果程序要求输入一个[符合某个条件的值],则可以将输入数据划分为1个有效等价类和1个无效等价类,例如密码必须以字母开头,则有效等价类为以字母开头,无效等价类为以非字母开头
- 如果在某一个等价类中,每个输入数据在程序中的处理方式都不相同,则应将该等价类划分成更小的等价类,并建立等价表。
同一个等价类中的数据发现程序缺陷的能力是相同的,如果使用等价类中的一个数据不能捕获缺陷,那么使用等价类中的其他数据也不能捕获缺陷;同样,如果等价类中的一个数据能够捕获缺陷,那么该等价类中的其他数据也能捕获缺陷,即等价类中的所有输入数据都是等效的。
正确地划分等价类可以极大地降低测试用例的数量,测试会更准确有效。划分等价类时不但要考虑有效等价类,还要考虑无效等价类,对于等价类要认真分析、审查划分,过于粗略的划分可能会漏掉软件缺陷,如果错误地将两个不同的等价类当作一个等价类,则会遗漏测试情况。例如,某程序要求输入取值范围在1~100之间的整数,若一个测试用例输入了数据0.6,则在测试中很可能只检测出非整数错误,而检测不出取值范围的错误。
2..设计测试用例
确定等价类后,建立等价类表,划分所有等价类 用来设计测试用例,
- 确定测试对象,保证非测试对象的正确性
- 为每个等价类规定唯一编号
- 设计有效等价类的测试用例,尽可能多的覆盖尚未覆盖的有效等价类,直到测试用例覆盖了所有等价类
- 设计无效等价类的测试用例,覆盖所有无效等价类
边界值分析法是对软件的输入或输出边界进行测试的一种方法,通常为等价类的补充,对于软件来说,错误经常发生在符合和不符合需求之间,因此边界值分析法是在等价类的边界上执行测试.
在等价类中,无论是输入输出值 都会有边界,在选择边界值时,如果输入条件规定了取值范围和个数,则可选区5个或7个测试值,
- 选取5个测试数据:最小值、略大于最小值、正常值、略小于最大值、最大值,规定取值范围为1-100,则可选取数据:1,1.1,50,99.9,100
- 如果选取7个测试值,分别是略小于最小值、最小值、略大于最小值、正常值、略小于最大值、最大值、略大于最大值,可选取0.9、1、1.1、50、99.9、100、100.1
等价类划分法与边界值分析法主要侧重于输入条件,却没有考虑这些输入之间的关系,如组合、约束等。如果程序输入之间有作用关系,等价类划分法与边界值分析法很难描述这些输入之间的作用关系,无法保证测试效果。
因果图
因果图使用一些简单的逻辑符号和直线将程序的因(输入)与果(输出)连接起来,一般原因用ci表示,结果用ei表示,c与e可以取值“0”或“1”,其中“0”表示状态不出现,“1”表示状态出现
- 恒等:在恒等关系中,要求程序有1个输入和1个输出,输出与输入保持一致。若c1为1,则e1也为1;若c1为0,则e1也为0。
- 非:非使用符号“~”表示,在这种关系中,要求程序有1个输入和1个输出,输出是输入的取反。若c1为1,则e1为0;若c1为0,则e1为1。
- 或:或使用符号“∨”表示,或关系可以有任意个输入,只要这些输入中有一个为1,则输出为1,否则输出为0。
- 与:与使用符号“∧”表示,与关系也可以有任意个输入,但只有这些输入全部为1,输出才能为1,否则输出为0。
因果图的4种关系
在软件测试中,如果程序有多个输入,那么除了输入与输出之间的作用关系之外,这些输入之间往往也会存在某些依赖关系,某些输入条件本身不能同时出现,某一种输入可能会影响其他输入。例如,某一软件用于统计体检信息,在输入个人信息时,性别只能输入男或女,这两种输入不能同时存在,而且如果输入性别为女,那么体检项就会受到限制。这些依赖关系在软件测试中称为“约束”,约束的类别可分为4种:E(Exclusive,异)、I(at least one,或)、O(one and only one,唯一)、R(Requires,要求),在因果图中,用特定的符号表明这些约束关系,如图所示。
- E(异):a和b中最多只能有一个为1,即a和b不能同时为1。
- I(或):a、b和c中至少有一个必须是1,即a、b、c不能同时为0。
- O(唯一):a和b有且仅有一个为1。
- R(要求):a和b必须保持一致,即a为1时,b也必须为1;a为0时,b也必须为0
上面这4种都是关于输入条件的约束。除了输入条件,输出条件也会相互约束,输出条件的约束只有一种——M(Mask,强制),在因果图中,使用特定的符号表示输出条件之间的强制约束关系,如图下所示
在输出条件的强制约束关系中,如果a为1,则b强制为0;如果a为0,则b强制为1。
使用因果图法设计测试用例需要经过以下几个步骤。
(1)分析程序规格说明书描述内容,确定程序的输入与输出,即确定“原因”和“结果”。
(2)分析得出输入与输入之间、输入与输出之间的对应关系,将这些输入与输出之间的关系使用因果图表示出来。
(3)由于语法与环境的限制,有些输入与输入之间、输入与输出之间的组合情况是不可能出现的,对于这种情况,使用符号标记它们之间的限制或约束关系。
(4)将因果图转换为决策表。
(5)根据决策表设计测试用例。
因果图法考虑了输入情况的各种组合以及各种输入情况之间的相互制约关系,可以帮助测试人员按照一定的步骤高效率地开发测试用例。此外,因果图是由自然语言规格说明转化成形式语言规格说明的一种严格方法,它能够发现规格说明书中存在的不完整性和二义性,帮助开发人员完善产品的规格说明。
决策表
决策表通常由4个部分组成,具体如下。
(1)条件桩:列出问题的所有条件,除了某些问题对条件的先后次序有要求之外,通常决策表中所列条件的先后次序都无关紧要。
(2)条件项:条件项就是条件桩的所有可能取值。
(3)动作桩:动作桩就是问题可能采取的操作,这些操作一般没有先后次序之分。
(4)动作项:指出在条件项的各组取值情况下应采取的动作。
第1条规则取值为:Y、Y、Y,执行结果为“停止阅读并休息”;第2条规则取值为:Y、Y、N,执行结果也为“停止阅读并休息”。对于这两条规则来说,前两个问题的取值相同,执行结果一样,因此第3个问题的取值对结果并无影响,这个问题就称为无关条件项,使用“-”表示。忽略无关条件项,可以将这两条规则进行合并
将规则进行合并,可以减少重复的规则,相应地减少测试用例的设计,这样可以大大降低软件测试的工作量。
正交实验设计法(Orthogonal Experimental Design)是指从大量的实验点中挑选出适量的、有代表性的点,依据Glois理论导出“正交表”,从而合理地安排实验的一种实验设计方法。
根据实际需要可以在用正交试验法设计用例的基础上补充一些测试用例。
4个测试用例与8个测试用例相比测试用例个数是减少了。因素数和水平数越大越能体现用正交表的好处。例如:对于一个四因素且每个因素均为三水平的试验,如果按照全面试验需要进行3*3*3*3=81次。但是如果用正交试验法选择L9(34)正交表,n=4*(3-1)+1=9次试验就可以覆盖。从这点可以说明用正交试验法能有效地、合理地减少测试用例和工时,节约测试成本。