一、为什么要写测试用例
写测试用例可以让测试的需求覆盖更加全面,让测试工作进行得条理有序,且方便移交和交流, 好的测试用例要做到:结构设置合理,case覆盖全面,且具有可执行性,可重复等特点。
二、软件测试文档
1、测试范围列表:需求编号、需求类型,所属模块、需求名称、复杂度、复用性、自测充分性、是否公用模块、使用频率、优先级
2、测试用例一般包含的要素:用例编号、测试项目、用例标题、优先级(致命、严重、一般、微小、建议)、预置条件、输入参数、执行步骤、预期结果
3、 缺陷报告要素:缺陷编号、缺陷标题、严重级别、重现步骤、缺陷状态、提交人、时间、附件
三、测试用例的常用方法
1、等价类
方法:根据需求列出输入,并对每一个输入的规则进行分析,然后对每一条规则进行正确和错误的罗列,最后将的所有的输入进行正确和错误用例的组合,一条正确的用例尽可能多的覆盖每个输入的不同有效数据,一条错误的用例只能含有一个无效数据(控制变量)。 对于一个输入应考虑它的:数据类型、长度、取值范围、是否可重复,是否为空(为空可分为不输入和输入空格),组成规则等内容 。
优点:简单高效,能快速评估测试用例数量;
缺点:只考虑了输入的有效和无效,对数据的组合比较随机,边界缺陷不容易发现 ;
适用范围:只在存在输入的需求都适用。
2、边界值
边界值分析方法的理论基础是假定大多数的错误是发生在各种输入条件的边界上,如果在边界附近的取值不会导致程序出错,那么其他取值导致程序错误的可能性也很小。
方法:对于存在边界的输入取边界的上点、内点、离点进行测试。
上点:边界上的点
内点:边界内的点
离点:闭区间间靠近上点但在区间外的一点,开区间则是在区间内的一点 主要是用于对等价类的补充
优点:能更容易发现边界,更全面系统的测试边界上可能存在的问题;
缺点:只能做为一个对其他设计方法的补充;
适用范围:有输入参数且存在取值边界或长度边界时。
3、判定表
方法:确定输入和输出,列出所有的条件桩和动作桩;填入条件项;针对每个条件项计算并填入动作项;化简,合并相似的规则。
优点:能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏;
缺点:条件桩过多时,用例呈指数增长,且在合并相似的项时存在漏测的风险;
适用范围:多个输入判断条件存在逻辑关系,且不分先后的情况。
4、正交实验法
从大量的测试点中挑选出适量的有代表性的点,应用依据迦罗瓦理念导出的正交表,合理安排测试数据的方法 。
优点:用于考虑到所有的组合又使例数量最少 ;
适用范围:输入的参数之间是独立的,不存在相互依赖的关系。
5、流程分析法
流程分析法是将软件系统的某个流程看成路径,根据流程的顺序依次进行组合,使得各个分支都能走到;。
方法:画出流程图,确定测试路径,选择测试数据;构造测试用例;
优点:覆盖了输入,处理和输入;
缺点:覆盖的输入取值不多,需要对业务比较了解 ;
适用范围:流程比较复杂的情况。
6、状态迁移法
即有深度和广度的状态树 。
方法:画出状态迁移图;通过迁移图画出状态转换树;从转换枝推导出测试路径;编写测试用例 。
优点:保证每一个节点的所有可达状态都被测试到;
缺点:没有对不可达的状态进行测试的覆盖;
适用范围:从一个操作可以到达多个可能的操作或从一个状态可以到达多个可能的规定状态 且状态取值或输入变化有固定的要求顺序。
7、因果图
因果图提供了一个把规格转化为判定表的系统方法,且它最终生成的就是判定表。
方法:把大的系统规格划分成可以测试的规格片段;分析哪些是原因、哪些是结果;画出因为图;把因果图转换成判定表;简化判定表;
优点:能帮助我们按照一定步骤,高效的选择测试用例,设计多个输入条件组合用例;能考虑到多个条件组合起来可能出错的情况;
缺点:输入条件与输出条件的因果关系有时很难从SRS中得到,即便得到了也会因为因果关系复杂导致因果图非常庞大,从而使测试用例数目非常多;
8、输入域覆盖法
是一种综合的方法,综合了等价类和边界值等方法
9、输出域覆盖法
从输入结果倒推输入的测试方法
10、异常分析法 主要是构造环境异常来看测试结果
11、错误猜测法
方法选择(打油诗,仅供参考):
所有输入选等价
给定范围加边界
条件孤立想判定
指定常量取正交
跨界操作流程法
多种状态迁移图
条件组合出因果
测试充分全覆盖
多种方法不唯一
附:
软件质量: 一个实体的所有特性,基于这些特性可以满足显式或隐式的需求的程度
软件质量模型:功能性、效率、可靠性、易用性、可移植性、可维护性
非功能:效率、可靠性、易用性、可维护性、可移植性
功能性:适用性、准确性、保密安全性、互操作性、依存性
效率:时间特性、资源利用率
易用性:易理解性、易学性、易操作性、吸引性
可靠性:成熟性、容错性、易恢复性
可移植性:适应性、易安装性、共存性、易替换性
可维护性:易分析性、易改变性、稳定性、易测试性
双V模型:即测试工作并不是在开发完成之后才开始进行,而是开发阶段与测试设计阶段同步进行,在编码完成后继续执行UT、IT、ST。