测试计划

5.1 测试计划

子曰:凡事预则立,不预则废,预即是计划。要想成功完成软件测试这项工作,必须首先建立测试计划。软件测试是一个有组织有计划的活动,应当给予充分的时间和资源进行测试计划,这样软件测试才能在合理的控制下正常进行。

《GB/T 9386 软件的测试文件编制标准》将测试计划(Test Planning)定义为:“用来描述测试活动的范围、方法、资源及进度的文档。它确认了测试项、被测特征、测试任务、人员安排,以及与该计划相关的风险。”

测试计划是:

  • 项目计划的组成部分
  • 依赖于软件组织过程、质量文化和方针
  • 指导今后一系列测试活动的文件
  • 是一个过程,是动态的,随着项目的进展不断更新

测试计划的制定可以帮助预见将会出现的问题,明确意图,软件测试内容、方法和过程,为有组织地完成测试任务提供保障。


测试计划的两种制定方式

第一种方式:主计划 + 详细计划

制定一个主计划和若干个详细计划,详细计划是对瀑布式开发生命周期中某个特定阶段的测试计划,包括:

  • 单元测试计划
  • 集成测试计划
  • 系统测试计划
  • 验收测试计划等

第二种方式:单一测试计划

只有一个测试计划,这种方式在一个测试计划中包含了所有的测试类型。


测试计划的内容

根据需求分析文档,了解项目需要解决的实际问题,制定相应的测试计划,测试计划的内容应包括:

  1. 确认测试目标、范围和需求
  2. 识别测试风险,制订相应的测试策略
  3. 对测试任务和工作量进行估算
  4. 测试用例和资源配置
  5. 进度安排和资源分派,包括团队角色、责任和培训
  6. 测试阶段划分,包括阶段性任务和成果
  7. 测试结果分析和度量以及测试风险评估
  8. 跟踪和控制机制

借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。因此一份好的测试计划需要综合考虑各种影响测试的因素。


测试计划模板

一个正规的测试计划应该包含以下项目:

项目内容
测试的基本信息包括测试目的、背景、测试范围等
测试的具体目标列出软件需要进行的测试部分和不需要进行的测试部分
测试的策略测试人员采用的测试方法,如回归测试、功能测试、自动测试等
测试的通过标准测试是否通过的界定标准以及没有通过情况的处理方法
停测标准给出每个测试阶段停止测试的标准
测试用例详细描述测试用例,包括测试值、测试操作过程、测试期待值等
测试的基本支持测试所需硬件支持、自动测试软件等
部门责任分工明确所有参与软件管理、开发、测试、技术支持等部门的责任细则
测试人力资源分配列出测试所需人力资源以及软件测试人员的培训计划
测试进度安排制定每一个阶段的详细测试进度安排表
风险估计和危机处理估计测试过程中潜在的风险以及面临危机时的解决办法

测试策略

测试策略描述当前测试项目的目标和所采用的测试方法,描述不同测试阶段的测试对象、范围和方法以及每个阶段内所要进行的测试类型,或者说是在一定的软件测试标准、测试规范的指导下,依据测试项目的特定环境约束而规定的软件测试的原则、方式、方法的集合。

测试策略的主要任务

  • 针对风险(工作量、时间等压力)采取对策
  • 包括遵照的标准取舍、测试任务的优先级等
  • 如何更好地执行测试用例以及如何执行后续的回归测试
  • 选定使用测试技术和工具
  • 考虑影响资源分配的特殊情况等

测试策略的基本要素

  1. 输入:作为制定测试策略的依据,包括限制条件和已具有的资源
  2. 输出:制定策略的成果,即最终对所制定策略的定义或说明
  3. 制定策略的过程:测试组分析需求,参与设计的讨论,要求开发、编写针对所有测试级别的测试策略,并和项目组一起复审测试策略和计划

测试策略的实施

测试策略的实施是通过测试的执行满足测试需求,这就需要分析测试的范围、任务和其他条件,从而估算工作量和测试时间,安排测试进度和配置资源。

  • 功能测试范围:可以借助流程图和框图按功能层次分解,也可以按功能区域、功能逻辑进行分解
  • 非功能性测试范围:可以分别从性能测试、兼容性测试、适用性测试和安全性测试等各个方面进行分析

测试工作量估算

测试工作量是根据测试范围、策划任务和开发阶段来确定的,测试范围和测试任务是测试工作量估算的主要依据。

影响因素

  • 质量需求:代码质量越低,测试越要充分,回归测试次数与频率加大
  • 开发阶段:处在不同的开发阶段测试工作量不同
  • 自动化程度:自动化程度高,测试工作量就越低

估算方法

测试工作量的估算依赖于测试任务的细化,对每项测试任务进行分解,然后根据分解的子任务进行估算。通常分解粒度越小,估算精度越高。

工作分解结构表(WBS)

  1. 列出本项目需要完成的各项任务:测试计划、需求和设计评审、测试设计、脚本开发、测试执行等
  2. 对每个任务进一步细分,可进行多层次的细分,直到不能细分为止
  3. 列出需要完成的所有任务之后,根据任务的层次进行编号,形成完整的工作分解结构表
  4. 根据工作分解结构表逐项估算工作量,一般以人月为单位

功能点估算法

功能点估算法是一个比较可靠的工作量估算方法之一,它先估算每个功能点所需要的工作量,然后进行累加获得总的工作量。

功能点的主要参数有:

  • 外部输入数
  • 外部输出数
  • 内部逻辑文件
  • 外部接口文件
  • 外部查询数

测试用例估算法

还可以采用测试用例估算法,依据测试用例数来估算测试工作量,例如用功能模块所有要执行的测试用例总数,除以每个人日所能执行的测试用例平均数,就得出人日数工作量估算。

估算假设
  • 效率假设:即测试队伍的工作效率
  • 测试假设:为了验证一个测试需求所需测试动作的数目,可能包括每个测试用例的估算时间
  • 风险假定:考虑增加10%~20%的工作量来处理风险产生的不确定性

相对比例估算法

如果确实没有任何可行的办法,就可以按照测试人员和开发人员的比例来确定。大致可以分为3类,其比例分别是:

  • 1:2
  • 1:1
  • 2:1

总工作量计算公式

其中:

  • W为总工作量
  • 为一轮测试所需的工作量
  • 表示每轮的递减系数

受代码质量、开发流程和测试周期等影响,的值是不同的。


总结

制定一份有效的软件测试计划,需要:

  1. 在确定测试项目的任务之前,应清楚测试的范围和目标
  2. 让所有合适的相关人员参与测试项目的计划制定,特别是在测试计划早期
  3. 对测试的各阶段所需要的时间、人力及其它资源进行预估
  4. 测试范围能分解应尽量分解,针对每个测试任务仔细分析到位,尽量做到客观、准确、留有余地
  5. 制定人员要确保制定测试项目的输入、输出和质量标准,并和有关方面达成一致
  6. 建立变化处理的流程规则,识别出在整个测试阶段中哪些是内在的、不可避免的变化因素,如何进行控制