摘要
测试是以评价一个程序或者系统属性为目标的任何一种活动,是衡量软件质量的度量。什么是软件测试?软件测试种类的划分?如何进行测试用例设计?如何评价测试用例设计的好坏?这些都是测试工程师入门必知的知识点。
软件测试
软件测试(Software Testing):描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
软件测试种类划分
从不同角度看软件测试的种类有很多,我们简单按照测试类型、测试阶段、是否关注代码逻辑、是否执行代码等方面划分,如图1所示:
图1
测试用例设计
测试用例要包括测试的功能、应输入的数据和预期的输出结果。测试数据应该选用少量、高效的测试数据进行尽可能完备的测试,基本目标是设计一组发现某个错误或某类错误的测试数据。测试用例应覆盖有效合理的输入,也要包括不合理、失效的输入。
测试用例是为某个特定目标而设计的,它是测试操作过程序列、条件、期望结果及相关数据的一个特定的集合,那么如何构造这个集合呢?测试用例的设计,类似于软件产品的设计,可以考虑面向对象、面向结构或面向方法来实现其框架,然后在这框架下细化测试用例——设计具体的测试用例。软件测试用例的设计遵守4部曲,如图2所示:
图2
为什么需要测试用例?
图3
测试用例设计考虑哪些因素?
测试用例的设计,就是围绕软件质量需求,分析质量需求的每一个剖面,使测试用例能覆盖各个剖面及测试点。另一方面,它会试图找出系统的薄弱环节、边界点等,因为这些特殊区域有必要得到更多的测试,尽力降低测试的风险,达到所设定的测试目标。测试用例设计的主要影响因素如图4所示:
图4
测试用例设计的基本思想是?
1. 设计测试用例时,要寻求系统设计、功能设计的弱点。测试用例需要确切地反映功能设计中可能存在的各种问题,而不要简单拷贝产品规格设计说明书的内容。
2. 设计正面的测试用例,应该参照设计规格说明书,根据关联的功能、操作路径等设计。而对孤立的功能则直接按功能设计测试用例。基本事件的测试用例应包含所有需要实现的需求功能,覆盖率达100%。
3. 设计负面的、异常的测试用例,如考虑错误的或者异常的输入,往往可以发现更多的软件缺陷,这显得更为重要。
例如: 登录功能,在进行用户校验的时候,考虑错误的、不合法的(如没有@.&*等特殊符号的输入)或者带有异常字符(单引号、斜杠、双引号等)的名称输入,尤其是在做Web页面测试的时候,通常会出现因一些字符转义问题而造成异常情况。
如何进行测试用例的架构设计?
在测试用例设计过程中,首先将焦点集中在其框架的设计上,通过框架的建立,可以更有效地完成所需要的测试用例设计工作,如图5所示:
图5
测试用例分为多个层次是很明显的,例如,在“登录”功能模块中,可以分为3个层次:
图6
如何评价测试用例?
一般良好的测试用例都具备以下特征:
1. 可以最大程度找出软件隐藏的缺陷;
2. 可以最高效率地找出软件缺陷;
3. 可以最大程度地满足测试覆盖要求;
4. 既不过分复杂、也不能过分简单;
5. 使软件缺陷的表现可以清楚的判定;
5.1. 测试用例包含期望的正确的结果。
5.2. 待查的输出结果或文件必须尽量简单明了。
6. 不包含重复的测试用例。
如何着手分配测试用例优先级?
随意分配
如果你没有足够的时间测试却又至少要保证所有的产品需求已经被确认,可以设想良好状况下像它们被期望的那样工作,前面步骤将让你任意的分组测试用例,如果你也停下来思考每个测试用例的测试的内容,它们都将变的很重要。因此只需要遵循以下原则:
1. 把你所有功能性验证的测试标注为高优先级别;
2. 把你所有错误和边界值或确认测试标注为中优先级别;
3. 把你所有非功能性的测试(例如性能和可用性)标注为低优先级别。
提升和降级
并非所有的功能性测试都一样的重要,并且与边界、非功能性测试一样的重要。思考一下测试的重要性及相对于其他同等优先级别的测试,你想要检查这个功能的频率-考虑质量目标和项目的需求。
1. 把功能性验证测试分为两组:重要和不是十分重要;
2. 将“不是十分重要”的功能性验证测试降级为中优先级别;
3. 把错误和边界测试分成两组:重要和不是十分重要;
4. 将“重要”的错误和边界测试升级为高优先级别;
5. 把非功能性测试分成两组:重要和不是十分重要;
6. 把“重要”的非功能性测试升级为中优先级别;
7. 针对每组高、中和低优先级别的测试用例,重复划分和升级/降级流程达到一个点,可以在不同优先级别之间移动的测试用例的数量到最小。
测试用例设计时应遵循哪些原则?
1. 基于测试需求的原则。应按照测试类别的不同要求,设计测试用例。如单元测试依据详细设计说明、集成测试依据概要设计说明、配置项测试依据软件需求规格说明、系统测试依据用户需求;
2. 基于测试方法的原则。应明确所采用的测试用例设计方法。为达到不同的测试充分性要求,应采用相应的测试方法,如等价类划分、边界值分析、猜错法、因果图等方法;
3. 兼顾测试充分性和效率的原则。测试用例集应该兼顾测试的充分性和测试的效率;每个测试用例的内容也应完整,具有可操作性;
4. 测试执行的可再现性原则。应保证测试用例执行的可再现性。
测试用例包含哪些元素?
测试用例是对测试场景和操作的描述,所以必须给出测试目标、测试对象、测试环境要求、输入数据和操作步骤,概括为5W1H。
总结
本文从什么是软件测试开始介绍,根据不同角度划分软件测试的种类,接着详细阐述了用例设计原因、考虑因素、基本思想及用例架构设计等知识要点。后续会继续分享关于测试用例编写所使用的常用方法,大家可以继续关注【测试用例编写方法论】。