一、软件测试流程
- 获取测试需求
- 编写测试计划
- 指定测试方案
- 开发与设计测试用例
- 执行测试
- 提交缺陷报告
- 测试分析与评审
- 提交测试报告
- 准备下一版本测试
二、软件测试过程模型
1、V模型
揭示了开发过程与测试过程中各阶段的对应关系
缺点与不足:
- 线性工作方式,忽视了测试对于需求分析、系统设计的验证。
- 需求的满足情况一直到后期的验收测试才被验证。
- 没有体现出“尽早地和不断地进行软件测试”的原则。
2、W模型
两个V模型组成,分别代表测试与开发过程,明确表示出了测试与开发的并行关系。
优点:
- 测试的活动与软件开发并行进行
- 测试对象不仅仅是程序,包括需求和设计
- 尽早发现软件缺陷,可降低软件开发成本
局限性:
- 在W模型中,需求、设计、编码等活动被视为串行的,无法支持灵活的迭代。
3、H模型
- H模型将测试活动完全独立出来,形成了一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来。
- H模型揭示了一个原理:软件测试是一个独立的过程。
- H模型指出软件测试要尽早准备,尽早执行;只要某个测试达到准备就绪点,测试执行活动就可以开展,并且不同的测试活动可按照某个次序先后进行,也可以反复进行。
4、X模型
X模型是对V模型的改进,提出针对单独的程序片断进行相互分离的编码和测试,此后通过频繁的交接,通过集成最终合称为可执行的程序。
X模型还定位了探索性测试,这是不进行事先计划的特殊类型的测试,这一方式可以帮助有经验的人员在测试计划之外发现更多的软件错误。
三、软件测试过程理念
- 尽早测试
- 全面测试
- 全过程测试
- 独立的、迭代的测试
四、软件测试技术
1、按照开发阶段划分
a.单元测试
模块测试,针对软件设计的最小单位–程序模块进行正确性检验的测试工作。
目的在于检查每个程序单元能否正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求,发现各模块内部可能存在的各种错误。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。
b.集成测试
集成测试也叫组装测试,比较多的涉及到接口测试(接口测试工具和方法),是个持续不断的过程。
通常在单元测试的基础上,将所有的程序模块进行有序的、递增的测试。集成测试是检验程序单元或部件的接口关系、逐步集成为符合概要设计要求的程序部件或整个系统。
c.确认测试
确认测试也叫有效性测试,测试功能是否实现,一般都是正向的测试。有时候也称为冒烟测试,不算正式的测试阶段。
d.系统测试
系统测试是在真实的系统运行环境下,检查完整的程序系统能否和系统(包括硬件、外设、网络和系统软件、支持平台)正确配置、连接、并最终满足用户的所有需求。
系统测试是全面的,包括了系统的所有功能,模拟所有的用户进行操作。系统测试是全方位的:和硬件系统的联系,和系统软件的联系,和其他软件的关系。
e.验收测试
供求双方。
一般有三种验收测试主体:
- α测试:软件的开发商自己进行的交付前的测试。
- β测试:软件的需求方自己做的测试。
- γ测试:第三方的软件测试。
2、按照代码运行划分
a.静态测试
不运行被测对象,检查代码是否符合规范、界面是否符合需求、文档是否符合用户实际需求。
b.动态测试
实际运行被测对象,输入相应的测试数据,检查实际的输出结果和预期结果是否相符的过程。
3、按照软件特性划分
a.功能测试
黑盒测试的一部分,检查实际软件的功能是否符合用户的需求
- 逻辑功能测试
- 界面测试
- 易用性测试
- 安装/卸载测试
- 兼容性测试
b.性能测试
- 时间性能
- 空间性能
c.安全性测试
验证安装在系统内的保护机制能否在实际应用中对系统进行保护,使之不被非法入侵,不受各种因素的干扰。
4、按照测试技术划分
a.黑盒测试
通过软件的外部表现来发现其缺陷和错误。
b.白盒测试
通过对程序内部结构的分析、检测来寻找问题。
c.灰盒测试
介于白盒和黑盒测试之间的测试。灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但不像白盒测试那样详尽。
5、其他测试
a.回归测试
对软件的新版本进行测试时,重复执行之前的某一个重要版本的所有测试用例
目的:
- 验证之前版本产生的缺陷是否都被修复
- 确认修复这些缺陷没有引发新的缺陷
b.冒烟测试
在对一个新版本大规模测试前,测试基本功能是否实现。
c.随机测试
指测试人员基于经验和直觉的测试,发现一些边缘性错误。
d.猴子测试
没有任何主观意识和想法参与进来,随便乱点,让一些意想不到的操作造成错误的结果。
6、按照测试运行主体划分
a.手工测试
b.自动化测试
五、软件测试的原则
- 所有测试的标准都是建立在用户需求之上。
- 软件测试必须基于“质量第一”的思想去开展各项工作,当时间和质量冲突时,时间要服从质量。
- 实现定义好产品的质量标准,只有有了质量标准,才能根据测试的结果,对产品的质量进行分析和评估。
- 软件项目一启动,软件测试也就是开始,而不是等程序写完,才开始进行测试。
- 穷举测试是不可能的。
- 第三方进行测试会更客观,更有效。
- 软件测试计划是做好软件测试工作的前提。
- 测试用例是设计出来的,不是写出来的,所以要根据测试的目的,采用相应的方法去设计测试用例,从而提高测试的效率,更多地发现错误,提高程序的可靠性。
- 对发现错误较多的程序段,应进行更深入的测试。一般来说,一段程序中已发现的错误数越多,其中存在的错误概率也就越大。
- 重视文档,妥善保存一切测试过程文档(测试计划,测试用例,测试报告等)。
- 应当把“尽早和不断地测试”作为测试人员的座右铭。
- 回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误出现的现象并不少。
- 测试应从“小规模”开始,逐步转向”大规模“。
- 不可将测试用例置之度外,排除随意性。
- 必须彻底检查每一个测试结果。
- 一定要注意测试中的错误集中发生现象,这和程序员的变成水平和习惯有很大关系。
- 对测试错误结果一定要有一个确认的过程。