测试用例的设计的方法,没有哪一种方法是单独使用的。
- 因为某种操作才会导致一定的结果——因果图法;
- 文本框——等价类、边界值法;
等价类划分法
介绍:
把程序的输入域划分成若干部分,然后从每个部分中选取少数任代表数据作为测试用例。
每一类的代表性数据在测试中的作用等价于这一类中的其他值,如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发现同样的错误。
反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误。
设计步骤:
- 确定等价类的原则
- 在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类;
- 在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类;
- 在输入条件是一个布尔量的情况下,可确定一个有效行等价类和一个无效等价类;
- 在规定了输入数据的一组值(n个)并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类;
- 在规定了输入数据必须遵守规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)
- 在确知已划分的等价类中,各元素在程序处理中的方式不同情况下,则应再将该等价类进一步地划分为更小的等价类。
- 划分等价类和列出等价类表
- 有效等价类;
- 确定测试用例
- 为每个等价类规定一个唯一的编号;
- 设计一个新的测试用例,使其尽可能多覆盖尚未覆盖的有效等价类,重复这一步,使所有有效等价类均被测试用例所覆盖;
- 设计一个新的测试用例,使其只覆盖一个无效等价类,重复这一步,使所有无效等价类均被覆盖;
边界值分析法
介绍:
如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据;
如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少1、比最大个数多1的数作为测试数据;
分析规格说明,找出其他可能的边界条件
设计步骤:
- 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据;
- 如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少1、比最大个数多1的数作为测试数据;
- 根据规格说明的每个输出条件,使用前面的原则1;
- 根据规格说明的每个输出条件,应用前面的原则2;
- 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例;
- 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构边界上的值作为测试用例;
- 设计测试用例。
因果图法
介绍:
因果图法是一种适合于描述对于多种输入条件组合的测试方法
根据输入条件的组合、约束关系的输出条件的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法;
它适合于检查程序输入条件涉及的各种组合情况。
设计步骤:
- 根据功能说明书中规定的原因和结果之间的关系确定因果并画出因果图:
- 恒等:a成立,b一定成立
- 非:a成立,b一定不成立
- 或:a、b、c只要有一个成立,d就成立
- 与:a、b、c都成立,d才成立
- 根据功能说明在因果图是加上约束条件:互斥、包含、唯一、要求是对原因的约束;屏蔽是对结果的约束。下面1表示成立;0表示不成立。
- 互斥(Exclusive):表示不同时为1,即a、b、c中至多只有一个1
- 包含(Include):表示至少有一个1,即a、b、c中不同时为0
- 唯一(Only):表示a、b、c中有且仅有一个1
- 要求(Request):表示若a = 1,则b必须为1;即不可能a = 1且b = 0
- 屏蔽(Mask):表示若a = 1,则b必须为0
- 根据需求文档分析出原因和结果的关系,并进行关系的连接;
- 将画好的因果图用表格列出来;
- 进行用例设计;
当原因和结果很多的时候,因果图中的关系连线就会有很多,导致因果图的可读性变差。因此因果图建议用在分析一些原因和结果不是很多的小功能的时候。
因果图的优势在于能够发现设计中存在的不足。
判定表驱动法
介绍:
判定表法是分析和表达多逻辑条件下执行不同操作的情况的工具。它由以下内容组成:
- 条件桩(ConditionStub):列出了问题的所有条件,通常认为列出条件的次序无关紧要;
- 动作桩(ActionStub):列出了问题规定可能采取的操作,这些操作的排序没有约束;
- 条件项(ConditionEntry):列出针对它左列条件的取值,在所有可能情况下的真假值;
- 动作项(ActionEntry):列出在条件项的各种取值情况下应该采取的动作。
适合判定表使用的条件:
- 规格说明以判定表的形势给出,或很容易转换成判定表;
- 条件的排列顺序不影响执行操作;
- 规则的排列顺序不影响执行操作;
- 当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则;
- 如果某一规则要执行多个操作,这些操作的执行顺序无关紧要。
设计步骤:
- 确定规则个数: 识别出操作条件和对应的动作;
- 列出所有条件桩和动作桩:分析条件的条件项(组合数量),如果有n个条件,每个条件有成立和不成立两种情况,那么最后一共会有2^n个数量;
- 简化,合并相似规则或相同动作: 简化和优化结果,排除一些不可能的存在的情况;
- 将表格每一列设计成测试用例。
场景法
介绍:
场景法适用于解决业务流程清晰的系统或功能 ;
现在的软件几乎都是用事件触发来控制流程的;测试时,可以生动地描绘出事件触发时的情景,有利于设计测试用例,同时使测试用例更容易理解和执行。
基本流:软件功能按照正确的事件流实现的一条正确流程。通常一个业务仅存在一个基本流,且基本流仅有一个起点和一个终点;
备选流:除了基本流之外的各支流,包含多种不同的情况。
设计步骤:
- 根据说明,描述出程序的基本流及各项备选流;
- 根据基本流和各项备选流生成不同的场景;
- 对每一个场景生成相应的测试用例;
- 对生成的所有测试用例重新复审,去掉多余的测试用例;
- 测试用例确定后,对每一个测试用例确定测试数据值。
正交试验法
介绍:
正交实验法就是利用排列整齐的正交表来对试验进行整体设计、综合比较、统计分析、实现通过少数的实验次数找到较好的生产条件,以达到最好效果;
这种试验设计法是从大量的试验点中挑选适量的具有代表性的点,利用已经造好的正交表来安排试验并进行数据分析的方法。
因素:影响试验结果的;
水平:每一个因素的不同取值;
正交表:每列中,同一个水平,出现的次数相等、任意两列组成的水平对相同的表。
设计步骤:
- 确定因素:确定因素的取值范围或集合同,这里的因素是指对软件运行结果有影响的软件;
- 确定每个因素的水平:根据因素的取值范围或集合,采用等价类划分、边界值分析以及其他软件测试技术,在每个因素的取值范围或集合内挑选出有效等价类、无效等价类、正好等于、刚刚大于或刚刚小于边界值等有代表性的测试值;
- 选择正交表:根据确定的因素和水平,选择适合的正交表;如果没有合适的正交表可用或需要的测试用例个数太多,要对因素和水平进行调整;
- 正交表的数字关系:N代表实验次数,m代表水平数,k代表因素的数量;
- 仅适合用于每一个因素的水平数都相同的正交表。
功能图法
介绍:
又叫状态迁徙图,在遇到有事务流或由于某种条件成立导致状态改变的软件时,如何进行测试用例的设计就比较麻烦。
功能图的目标是设计足够多的测试用例达到对系统状态的覆盖、状态-条件覆盖以及状态迁移路径的覆盖。
设计步骤:
- 列出所有可能的输入事件,以ip N的方式命名(N为1,2,3,4,……);
- 把软件的打开的初始状态,定义为“空闲”状态;
- 在“空闲”状态上只加一次所有可能的输入;
- 为上一步产生的所有新状态,分别只加一次所有可能的输入;
- 循环执行上一步,直到再没有任何新状态产生,列出的状态,生成状态表;
- 组合任意可能的状态组合,写出相应的测试用例;
其他设计方法
- 测试大纲法:一种着眼于需求的方法,列出各种测试条件,将需求转换为大纲(思维导图)的形式,一般用于快速测试和过程记录;从根节点开始分析,直到叶节点,每条路径就是一条测试用例。
- 探索性测试法:基于测试人员经验与直觉的测试方法,是对测试用例设计的有效补充。
- 猴子测试:又叫随意测试,是一种没有书面测试用例、记录期望结果、检查列表、脚本或指令的测试;但测试往往不太真实,不能达到一定的覆盖率,甚至许多测试都是冗余的。