一、软件测试概述
1.软件测试技术的定义
①贯穿整个软件开发生命周期
②对软件产品(包括阶段性产品)进行验证和确认
③尽快尽早地发现在软件产品中所存在的各种问题 的技术
2.软件测试的目的
①软件测试是为了发现错误而执行程序的过程
②测试是为了证明程序有错,而不是证明程序无错
③一个好的测试用例在于它发现至今未发现的错误
④一个成功的测试是发现了至今未发现的错误的测试
3.软件测试的对象
①程序
②数据
③文档 文档分为 阶段性文档(需求文档、概要设计文档以及详细设计文档) 以及 用户文档(帮助文档、用户手册)
4.软件测试分类
(1)按测试技术划分
①黑盒测试(数据驱动测试、功能测试):主要测功能
②白盒测试(逻辑驱动测试、结构测试):主要测逻辑
③灰盒测试:
(2)按测试执行方式划分
①静态测试:不运行程序本身,仅通过源程序的语法、结构、过程、接口等来检查程序的正确性
②动态测试:运行程序本身,通过检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能
(3)按测试阶段划分
①单元测试:主要测代码,由 程序员 采用 白盒技术
②集成测试:主要测接口、功能,由 程序员+测试员 采用 灰盒测试+黑盒测试
③验收测试:主要测功能、性能,由 测试员 采用 黑盒测试
④系统测试:主要测功能,由 用户 采用 α测试(公司内部人员模拟用户) 或 β测试(真实用户)
(4)按测试质量特性划分
①功能测试 ②性能测试 ③压力测试 ④GUI测试 ⑤安全测试 ⑥可靠性测试 ⑦安装测试 ⑧兼容性测试
(5)按执行人员划分
①开发方测试 ②用户方测试 ③第三方测试
5.软件测试的原则
①应当把“尽早地不断地进行软件测试“作为软件开发者的座右铭
②测试用例应由测试数据和与之对应的预期输出结果这两部分组成
③程序员应避免检查自己的程序
④在设计测试用例时,应当包括合理的输入条件和不合理的输入条件
⑤充分注意测试中的群集现象
⑥严格执行测试计划,排除测试的随意性
⑦应当对每一个测试结果做全面的检查
⑧妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便
6.测试模型
①V模型
优点:测试区分阶段、测试与开发一一对应
缺点:没有体现尽快尽早、没有贯穿整个软件周期、没有体现两个过程的并行
②W模型
优点:贯穿了整个软件周期、体现了两个过程的并行
缺点:没有体现迭代开发
③H模型
第一段结束 名词解释
测试用例:由编号、名词、预置条件、测试步骤、预期结果、实际结果组成
测试环境:由硬件、软件、网络、数据组成
软件缺陷:随开发时间变长而修复成本上升、测试由于某些限制不可能彻底,也不能完全找出
二、黑盒测试技术
1.定义
2.分类
(1)等价类法
确定等价类的一些原则
①如果输入条件规定了一个取值范围,则设计一个有效等价类和两个无效等价类
②如果输入条件规定了取值的个数,则设计一个有效等价类和两个无效等价类
③如果输入条件规定了一个输入值集合,则设计n个有效等价类和一个无效等价类
④如果输入条件规定了必须是的情况,则设计一个有效等价类和一个无效等价类
⑤如果有理由认为程序并未等同的处理等价类中的元素,则可划分为更小的等价类
设计测试用例的基本步骤
①在确定等价类后,建立对应的等价类表
②设计一个测试用例,尽可能多的覆盖有效等价类
③设计一个测试用例,仅覆盖一个尚未被覆盖的无效等价类
(2)边界值法
确定等价类的一些原则
①若是左闭右闭区间,则取左边界-精确度、左边界、中间值、右边界、右边界+精确度
②若是左闭右开(左开右闭相反)区间,则取左边界-精确度、左边界、中间值、右边界、右边界-精确度
③如实左开右开区间,则取左边界+精确度、左边界、中间值、右边界、右边界-精确度
设计测试用例的基本步骤
在确定边界值后,建立对应的边界值表 即可
(3)判定表法
基本概念明晰
条件桩:列出的所有条件
动作桩:列出的所有操作
条件项:列出的所有条件组合
动作项:列出的所有条件组合对应的操作
规则:任何一个条件组合的特定取值及其他相应要执行的操作
设计测试用例的基本步骤
①根据说明,确定所有条件和动作
②确定规则的个数
③建立判定表
④简化判定表
(4)因果图法
基本概念明晰
输入与输出间的关系:恒等、非、与、或
输入与输入间的关系:异、或、唯一、要求
测试用例的设计
①根据说明,确定原因和结果
②根据①,画因果图
③根据②,画判定表
④结合其他设计方法,细化测试用例
(5)场景法
基本概念明晰
基本流:软件功能按照正确的事件流实现的一条正确流程
备选流:凡是出现故障或缺陷的过程
测试用例的设计
①根据说明,分离出基本流与备选流
②根据①,生成不同的场景
③根据②,生成相应的测试用例
④复查测试用例,取出多余的,最后确定测试数据
(6)错误推断法
定义:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例的方法
(7)正交表法
定义:根据正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具备了“均匀分散,齐整可比”的特点
三、白盒测试技术
1.定义
2.分类
(1)静态白盒测试
定义:在不执行软件的条件下条理地仔细审查软件设计、体系结构和代码,从而找出软甲缺陷的过程,又称为结构化测试,包括同事审查、走查、检验三种不同方式
(2)侵入式白盒测试
定义:在软件测试过程中需要对软系统的代码进行修改的过程,包括程序插桩、断言测试、种子缺陷种植三种方式
(3)基本路径测试
基本概念明晰
控制流图:将流程图中执行语句、判定语句、开始、结束等退化成节点,将流程线退化成一个节点到另一个节点的带箭头的弧线的流程图
圈复杂度:一种为程序逻辑复杂性提供定量测试的软件度量,该度量用于计算程序的基本的独立路径数,为确保所有语句至少执行一次的测试数量的上界,它的计算方式有如下3种:
V(G) = 区域数量 - 1
V(G) = E - N + 2(E为边数、N为节点数)
V(G) = P + 1(P为判定节点数)
测试用例的设计
①根据程序源代码,画控制流图
②根据①,计算圈复杂度
③根据①,列出基本路径
④根据③,设计基本用例
(4)逻辑覆盖
分类
①语句覆盖:所有的语句执行一次
②判定覆盖:所有的判断执行一次
③条件覆盖:所有的判断中条件执行一次
④判定/条件覆盖:在所有判断执行一次的基础上,所有条件执行一次
⑤条件组合覆盖:所有条件的真假都执行一次
⑥路径覆盖:所有路径执行一次
测试用例的设计
只可意会不可言传@$@
(5)Junit测试
四、测试流程
1.软件测试流程
包括测试需求阶段、测试计划阶段、测试设计阶段、测试执行阶段、测试评估阶段
2.需求分析方法
包括范围分析、数据分析、流程分析、用户场景分析、隐式需求分析、功能交互分析
3.测试计划
包括目标制定、文档参考、进度安排、风险控制
4.测试用例
包括用例ID、用例名称、测试目的、测试级别、前提条件、测试步骤、预期结果等
5.软件缺陷
基本概念明晰
回归测试:修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误
优先级和严重程度的关系
一般地,严重性程度高的软件缺陷具有较高的优先级。严重性高说明缺陷对软件造成的质量危害性大,需要优先处理,而严重性低的缺陷可能只是软件不太尽善尽美,可以稍后处理。 但是,严重性和优先级并不总是一一对应。有时候严重性高的软件缺陷,优先级不一定高,甚至不需要处理,而一些严重性低的缺陷却需要及时处理,具有较高的优先级
常见的缺陷管理工具
BugFree、Mantis、TestDrector、禅道、华为软开云
缺陷报告组成
缺陷ID、缺陷标题、缺陷发现者、缺陷发现期、缺陷所属模块、发现的缺陷版块、指派给谁处理
五、自动化测试
1.定义
把以人为驱动的测试行为转化为机器执行的一种过程
2.性能测试要求
验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的
3.性能测试指标
注册用户数、在线用户数、并发用户数、请求的响应时间、事务的响应时间、吞吐率、资源利用率、TPS等
4.常见的自动化测试工具
LoadRunner、AutoRunner、Junit、Jmeter