软件测试原则
- 所有测试的标准都是建立在用户需求之上
- 软件测试必须基于"质量第一"的思想去开展各项工作,当时间和质量冲突时,时间要服从质量
- 事先定义好产品的质量标准,只有有了质量标准,才嫩如果根据测试的结果,对产品的质量进行分析和评估
- 软件项目一启动,软件测试也就是开始,而不是等程序写完,才开始进行测试
- 穷举测试是不可能的
- 第三方进行测试会更客观,更有效
- 软件测试计划是做好软件测试工作的前提
- 测试用例是设计出来的,不是写出来的,所以要根据测试的目的,采用相应的方法去设计测试用例,从而提高测试的效率,更多的发现错误,提高程序的可靠性。
- 对发现错误较多的程序段,应进行更深入的测试。一般来说,一段程序中已发现的错误数较多,其中存在的错误概率也就越大
- 重视文档,妥善保护一切测试过程文档(测试计划、测试用例、测试报告等)
- 应当把“尽早和不断地测试”作为测试人员的座右铭
- 回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误出现的现象并不少见
- 测试应从“小规模”开始,逐步转向“大规模”
- 不可将测试用例置之度外,排除随意性
- 必须彻底检查每一个测试结果
- 一定要注意测试中的错误集中发现现象,这和程序员的编程水平和习惯有很大的关系
- 对测试错误结果一定要有一个确认的过程
什么是测试用例
- 简单地说,测试用例就是:
- 设计一个情况,软件程序在这种情况下,必须能够正常运行并且达到程序所设计的预期结果
- 如果程序在这种情况下不能正常运行,而且这种问题会重复发生,那就表现软件程序人员已经测出了软件有缺陷,这时候就必须将这个问题标示出来,并且通知软件开发人员。软件开发人员接获通知后,将这个问题修改完成于下一个测试版本内
- 软件测试工程师取得新的测试版本后,必须利用同一个用例来测试这个问题,确保该问题已修复完成
- 测试用例应该包含以下内容:
- 标识符:由测试设计过程说明和测试程序说明引用的唯一标识符
- 测试项:描述被测试的详细特性、代码模块等,应该比测试设计说明中所列的特性更加具体。还要指出引用的产品说明书或者测试用例所依据的其他设计文档。
- 输入说明:该说明列举执行测试用例的所有输入内容或者条件。
- 输出说明:描述进行测试用例预期的结果。
- 环境要求:是指执行测试用例必须要的硬件、软件、测试工具、人员等。
- 特殊要求:描述执行测试必须的特殊要求。
- 用例之间的依赖性:如果一个测试用例依赖于其他用例,或者受其他用例的影响,就应该再次注明。
- 用例设计和编写的作用
- 有效性:测试用例是测试人员测试过程中重要参考依据。
- 可复用性:良好的测试用例具有重复使用的功能,使得测试过程事半功倍,提高测试效率。
- 易组织性:即使是小的项目,也可能会有几千甚至更多的测试用例,测试用例可能在数月甚至几年的测试过程中被创建和使用。
- 可评估性:从测试的项目管理角度来说,测试用例的通过率是检验代码质量的保证。
- 可管理性:测试用例也可以作为检验测试人员的进度、工作量以及跟踪/管理测试人员的工作效率的标准。
- 测试用例编写注意事项
- 不要设计“穷举测试用例”
- 在详细测试用例与有效测试时间中找到平衡点
- 好的测试用例应该多关注“反向测试问题”
- 测试用例库应该不断更新和维护
- 测试用例可以复用,但要注意测试数据有效性与环境变化
- 测试用例是设计出来的,不是写出来的
- 多去学习测试丰富的测试工程师所设计的测试用例
- 针对不同的需求类型和测试对象,灵活采用不同的测试用例设计方法
黑盒测试用例设计方法
-
测试数据选择
-
等价类划分法
-
等价类划分法原理(言之有理即可)
- 把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据作为测试用例
- 每一类的代表性数据在测试中的作用等价于这一类中的其他值,如果某一类中的一个例子发现了错误,这一等价类中的其他例子也可能发生同样的错误
- 反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误
-
等价类划分法设计步骤
-
确认等价类的原则
-
在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类
-
在输入条件规定的输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类
-
在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类
-
在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类
例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。
-
在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)
-
在确知已划分的等价类中,各元素在程序处理中的分类不同的情况下,则应再将该等价类进一步地划分为更小的等价类
-
-
-
划分等价类和列出等价类表
- 有效等价类
- 无效等价类
-
确认测试用例
- 为每个等价类规定一个唯一的编号
- 设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖
- 设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步使所有无效等价类被覆盖
-
-
边缘值分析法
-
如果输入条件规定了值的范围,则应曲刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据
-
如果输入条件规定值的个数,则用最大个数、最小个数、比最小个数少1、比最大个数多1的数作为测试数据
-
分析规格说明,找出其他可能的边界条件
-
如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例
-
如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构边界上的值作为测试用例
举例:
1)6<=x<=12,请问测试中x的边界值要选取哪几个进行测试?
答案:5,6,7,11,12,13
2)6<x<12,请问测试中x的边界值要选取哪几个进行测试?
答案:6,7,8,10,11,12
-
-
测试步骤设计
因果图法
-
因果图法是一种适合于描述对于多种输入条件组合的测试方法
-
根据输入条件的组合、约束关系和输出条件的因果关系,分析输入条件的各种组合情况,从而设计测试用例和方法
-
它适合于检查程序输入条件涉及的各种组合情况
-
画图方法如下:
-
第一步:根据功能说明书中规定的原因和结果之间的关系画出因果图
- 恒等。原因a成立,结果b一定成立。
- 非。原因a成立,结果b一定不成立。
- 或。原因a、b、c三者其中之一成立,结果d就成立。
- 与。原因a、b、c三者都成立,结果d才成立。
-
第二步:根据功能说明在因果图中加上约束条件
- 其中互斥、包含、唯一、要求是对原因之间的约束(假如原因成立为1,不成立为0),屏蔽是对结果的约束(假如结果成立为1,不成立为0)。他们的含义如下:
- 互斥(exclusive):表示不同时为1,即a,b,c中至多有一个为1。例:a+b+c<=1。
- 包含(include):表示至少有一个1,即a,b,c中不同时为0。例:3=>a+b+c>=1。
- 唯一(only):表示a,b,c中有且仅有一个为1。例:a+b+c==1。
- 要求(require):表示若a=1,则b必须为1。即不可能a=1且b=0。原因b成立,要求a一定先成立
- 屏蔽(mask):表示若a=1,则b必须为0。
- 其中互斥、包含、唯一、要求是对原因之间的约束(假如原因成立为1,不成立为0),屏蔽是对结果的约束(假如结果成立为1,不成立为0)。他们的含义如下:
-
-
-
因果图法示例
- 阅读和分析功能说明书,识别出“原因”和“结果”,并加以编号
- 案例:有一个饮料自动售后机(处理单价为5角钱)的控制处理软件,它的软件规格说明如下。
- 若投入5角钱的硬币,按下“橙汁”或“啤酒”的按钮,则相应的饮料就会出来。
- 若投入1元钱的硬币,同样也会是按下“橙汁”或“啤酒”的按钮,则自动售货机在送出相应饮料的同时推出5角钱的硬币
-
判定表法
-
正交实验法
-
功能图法
-
场景法