1. 定义

软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。

在软件投入使用前,要经过一系列的严格测试,才能保证交付质量。

2. QC & QA & QM

对于软件质量而言,QC、QA、QM是三个常见且易混淆的概念。

名词概念备注
QCQuality Control(质量控制)测试人员负责,通过验证的方法保证质量达到要求
QAQuality Assurance(质量保证)过程保证人员负责,通过过程的方法保证质量达到要求
QMQuality Management(质量管理)质量管理人员负责,一般为负责质量的管理者,通过制定过程、协调资源等一系列的手段为QA、QC工作创造良好的环境和条件

下图可以更清晰的解释QC、QA和QM三者的区别:

从QC到QA再到QM是一个循序渐进的变革过程,体现了质量管理理论的发展脉络。

在日常工作当中,我们最需要厘清的是QA和软件测试的关系。QA是质量保证,而软件测试是质量保证的一种手段。QA不仅包括软件测试,还包括流程和产品方面的规范化管理措施等。大部分公司QA等价于软件测试,这种理念其实还停留在QC阶段,是针对编码结果的检验,忽略了需求分析和系统设计阶段的质量验证。

3. 测试模型

随着软件测试理论和技术的发展,测试人员通过大量实践,总结出了若干测试模型,如常见的V模型和W模型。这些模型对测试活动进行抽象处理,并与开发工作紧密结合,是测试过程管理的重要参考依据。

3.1 V模型

  • 单元测试,主要是由开发人员自己对编写的代码进行自测或相互进行交叉测试,用以检查代码是否符合编码规范,是否存在逻辑错误。
  • 集成测试,将经过单元测试的模块组装成完整的程序。工作任务包括制定集成测试策略,确定集成测试步骤,设计集成测试用例,然后逐一添加模块进行测试。集成测试由测试人员负责,应该在概要设计完成后进行设计工作,并在单元测试完成后执行。
  • 系统测试,是为了验证需求分析确定的功能是否齐全并被正确实现,同时还要对安装、部署、适应性、安全性、界面等非功能性需求进行测试。系统测试也由测试人员负责,应该在需求分析完成后进行设计,在集成测试完成后进行实施。
  • 性能测试,用来检查系统是否满足规定的性能要求。性能测试通常选择一些典型的功能,检查这些功能在大量用户同时使用时系统是否稳定。性能测试由测试人员负责,可以在系统测试完成后进行,也可以对重要模块先进行性能测试,可以贯穿整个测试周期,目的是尽早发现系统的性能瓶颈并提早解决。
  • 验收测试,(User Acceptance Test, UAT), 目的是验证系统与需求的匹配性,以及界面的友好性、时间响应速度等。验收测试由实际的使用者负责完成,测试人员配合进行。

每种测试都有自己的目的和针对性。单元测试针对程序的规范和逻辑,集成测试重点是模块之间的连接,系统测试侧重系统功能的实现,性能测试验证系统的稳定性和效率,验收测试检验系统是否实现业务需求,相互之间不可替代。

V模型的缺陷在于仅仅把测试过程作为编码后的一个阶段,忽略了测试对需求分析、系统设计的验证,因此需求阶段的缺陷很可能一直到后期的验收测试才被发现,那时进行弥补将耗费大量的人力物力。

3.2 W模型

相较于V模型,W模型在软件开发的各个阶段都同步进行质量验证活动,W模型由两个V模型组成,分别代表开发过程和测试过程。

W模型认为测试应伴随着整个软件的开发周期,而且测试的对象不仅仅是编码的程序,需求和设计阶段的交付物同样需要进行测试和验收。

4. 测试流程

通用的测试流程包括计划、设计、实现、执行和完成几个步骤:

  • 测试计划,开展测试工作首先就是要制定一个测试计划,需要确定这次测试的目标和策略,估计测试用例、测试实现的工作量,确定所需要的人力资源和测试环境资源。这些内容都写在测试计划中,测试计划需通过评审才可以执行。
  • 测试设计,制定测试计划之后第一步就是测试设计,需要确定测试需求,设计测试用例,对测试用例进行评审等。
  • 测试实现,设计完成以后就是测试实现的过程,任务包括搭建测试环境、编写测试脚本、编写驱动程序和准备测试数据。根据需要尝试测试部分程序,然后修改测试用例和驱动程序等。
  • 测试执行,根据计划将测试任务分配给测试的执行人员,测试执行人员根据测试用例输入测试数据、记录测试结果。发现问题后需要记录和跟踪缺陷,缺陷修改完成后要进行验证。执行中还要对测试环境进行管理和监控。
  • 测试完成,主要工作完成之后要对测试的情况进行分析、总结,确认是否达成了目标,给出测试结论和建议。具体的工作包括评估测试活动、分析测试结果、编写测试报告,最后对测试的整体情况进行评审并形成结论。

5. 测试的主要角色和职责

测试不是测试组一个团队的事情,需要整个项目的所有同事一起参与,测试工作所涉及的主要角色和职责大致如下:

角色职责
项目经理与测试团队共同制定测试的质量目标,并跟踪目标的达成情况;
总体管理测试的进度和缺陷修改工作的进展;
提供测试活动所需的文档;
参加测试计划、测试用例、测试报告的评审
测试组织者制定测试计划、组织和实施测试工作,包括组织、监控和管理测试活动,确保达成测试的质量目标,任务包括:
1. 组织搭建测试环境、准备测试数据、编写测试用例;
2. 组织测试人员编写测试脚本(如果能自动化测试);
3. 组织测试人员建立执行流程并进行联调;
4. 组织维护测试用例和测试脚本;
5. 对缺陷的提交和验证进行追踪。
负责编写测试报告,参加测试计划、测试用例、测试报告的评审
测试设计者分析测试需求、设计测试用例;
编写测试脚本,建立和联调测试的执行流;
参加测试计划、测试用例、测试报告的评审;
负责测试环境的搭建
测试执行者负责测试用例的执行、记录测试结果和缺陷;
参加测试计划、测试用例、测试报告的评审;
负责缺陷修改后的重新测试和验证
缺陷修改者负责修改测试发现的缺陷;
参加测试计划、测试用例、测试报告的评审
缺陷分配者负责审核和分配测试缺陷;
对测试中发现的问题进行定位并协助解决;
参加测试计划、测试用例、测试报告的评审
质量保证者组织评审测试相关的测试计划、测试用例、测试报告;
负责审计测试过程,确保测试按照规范和流程进行
配置管理员负责测试过程中版本的集成和发布;
负责测试中各类交付物的配置管理;
参加测试计划、测试用例、测试报告的评审