前言:
虽然网上有很多关于这方面的文章和文档,笔者也曾经在百度分享过《系统测试用例设计》的PPT,但我认为包括原来我发的PPT都有一些地方存在缺失。因此这个专题,我将从零开始系统介绍怎么进行系统测试用例的设计。希望对测试员或其它测试相关人员起一个指引作用。
一、测试用例的基本概念
对于基本理论、基本概念的重要性,我已经在反复在各类测试文章或内部培训会上提到过。所以在开篇之前,我还是先从测试用例的基本概念谈起。
1、什么是测试用例?
测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实某个功能是否满足某个特定需求。通俗来讲,测试用例就是通过说明测试执行的前置条件,执行的操作步骤,以及每个步骤对应的预期结果,来验证某个程序或者某个功能是否满足某个指定的测试需求。
2、测试用例里面包含哪些内容?
强调下,这里说的测试用例主要指软件(系统)功能测试用例。通常用例的内容包括测试目标(目的),需求标示(一般同需求文档中的需求编号对应),预置条件(如需要的网络配置、环境配置等),输入数据(如测试用到的账号等数据),测试步骤,预期结果,通过标准(什么情况下该用例执行成功)等。
3、不同的测试类型,用例内容也不同
根据测试的类型不同,用例的内容往往也不一样。如:界面测试一般为内容检查清单(也是我们说的checklist),单元测试为依据Junit等框架编写的特定代码。
4、设计测试用例的用途?
我相信大家都比较清楚测试用例的设计用途,但我认为还是有必要把它的用途尽可能详细的列出来:
- 帮助我们科学有序的执行测试,尽可能发现软件(系统)中的缺陷;
- 便于重复执行测试,以便重现缺陷(在向开发描述bug时非常重要);
- 回归测试时,验证缺陷是否被修复;
- 避免无序的测试,提高测试执行效率;
- 便于计算工作量,使测试更能按照时间计划进行;
- 使得测试过程更方便管理,包括跟踪测试进度,执行情况等;
- 方便测试结束后提取基本测试用例,以便后面进行复用,提高工作效率。
正因为测试用例有上面这么多用途,所以科学合理的设计测试用例,对我们的软件测试质量起到至关重要的作用。
二、测试用例的依据有哪些?
测试用例的设计的依据主要为用户(或市场)需求说明、软件(系统)需求规格说明书、以及各种规范(如行业规范、通用规范(标准)等)等。在设计具体测试执行步骤时,还要加入概要设计、详细设计、数据库设计等文档(前提是这些文档能正确满足用户的需求,可能情况下做好这些文档的测试和评审)。
测试用例设计的首要任务是分解测试需求点,针对每个需求点设计相应的用例,以确保覆盖到每一条需求。
对于测试依据,往往一些测试员可能会受相当一部分敏捷开发或开发流程不规范的公司影响,从而造成一些错误的理解:
- 测试用例设计的依据决不是软件的本身。即用完成后的软件来设计用例是错误的做法,这样可能会导致测试得出的结果与用户期望的结果有较大的出入。
- 软件需求规格说明书不能保证都是正确的,往往因为每个人对用户需求的不同理解造成不同的结果。所以如果有需求评审这个环节,那认真对待它,当理解有出入时大胆提出来。
- 用户和软件需求只是测试依据的一部分(也是最重要的部分),依据还应该包括行业标准(如金融、银行、通信的业内标准规范)、通用标准规范(如ISO规范、国家法律法规)等。
- 在敏捷开发情况下,可能你的依据只会是UI设计原型,功能说明文档等,这种情况下,如果可能,应该尽可能的从需求设计人员口中了解更多的细节。
三、测试用例常用的设计方法介绍
要使自己的测试用例尽可能科学合理,发现更多的缺陷,离不开方法的使用。下面我讲对常用的测试方法做下介绍。
1、等价类划分法
等价划分某个输入域的集合,在这个集合中每个输入条件都是等效的,如果其中一个的输入不会导致问题发生,那么我们假定集合中其它输入条件进行测试也不可能发现错误,这就是等价类划分法。
通常等价类划分法,分为有效等价类和无效等价类:有效等价类,即对于程序的需求说明来说是合理的,有意义的输入数据所构成的集合,利用它可以检验程序是否实现了预期的功能和性能;无效等价类,则是对于程序的需求说明来说是不合理的,没有意义的输入数据所构成的集合,利用它可以检验程序对于无效数据的处理能力。
确立等价类的原则有:
- 如果输入条件规定了取值范围,或者值的个数,则可以确立一个有效等价类和两个无效等价类。例如,用户名输入规定长度在6~12个字符之间,那有效等价类应为大于等于6,小于等于12的字符长度的字符串;两个无效等价为小于6个字符和大于12个字符的字符串。
- 如果输入条件是一个布尔量(即条件为输入布尔值true,或者1),则可以确立一个有效等价类和一个无效等价类。
- 如果规定了输入数据的一组值,而且程序要对每一个输入值分别进行处理,这时要对每一个规定的输入值确立一个有效等价类,而对于这组值之外的所有值确立一个无效等价类 。如ATM机只支持100、300、500、1000、2000的正整数取款,那么这些数字都是一个有效等价类,而(-∞,100)、(100,300)、(300,500)、(500,1000)、(1000,2000)、(2000, +∞)这些都是无效等价类。当然,现实中的取款机还支持手动输入100的整数取款,这里我们不作讨论。
- 如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(即遵守规则的数据)和若干无效等价类(从不同角度违反规则的数据)。如: 注册时输入用户密码,要求密码必须是由数字或字母组成,那有效等价类为“密码是数字和字母的组合” ,无效等价类为“密码包括中文”、“密码包括其它符号”等。
- 如果确知已划分的等价类中的各元素在程序中的处理方式不同,则应进一步划分成更小的等价类 。
2、边界值分析法
边值分析方法的理论基础,是假定大多数的错误是发生在各种输入条件的边界上,如果在边界附近的取值不会导致程序出错,那么其它的取值导致程序错误的可能性也很小。边界值使用条件包括:输入条件明确了一个值的取值范围,或是规定了值的个数,或输入条件明确了一个有序集合。
确立边界值也有一些原则:
- 如果输入条件或输出条件规定了值的范围并且有效条件包括了值的边界,可分别对边界和略超出边界取值,例如,用户名输入字符串规定长度在6~12个字符之间,假如输入字符的长度用X表示,那字符串可输入长度范围是6<=X<=12,边界值取为:5、6、12、13。
- 如果输入条件或输出条件规定了值的范围并且有效条件不包括值的边界,可分别对边界和略处于边界内取值,如用户名可输入字符串长度X范围为6
- 如果输入或输出域是个有序的集合(如顺序文件、表格等),应注意选取有序集的第一个和最后一个元素以及集合外但靠近集合的元素作为边界,例如:输入文件名介于fname0101~fname0120之间,边界值取为fname0100,fname0101,fname0120,fname0121。
3、因果图判定表法