如果没有测试计划会带来哪些问题:
** 测试范围 **
测试范围描述的是被测对象以及主要的测试内容。测试范围的确定通常是在测试需求分析完成后进行,所以确定测试范围的过程在一定程度上也是对测试需求分析的进一步检验,这将有助于在早期阶段就发现潜在的测试遗漏。同时,由于不可能进行穷尽测试,而且测试的时间和资源都是有限的,所以必须有所取舍,进行有针对性的测试。因此,测试范围中需要明确 “测什么” 和 “不测什么”。
** 测试策略 **
测试策略简单来讲就是需要明确 “先测什么后测什么” 和 “如何来测” 这两个问题。病有轻重缓急,测试也是一样的道理,重要的项先测,而不重要的项要后测。测试策略会要求我们明确测试的重点,以及各项测试的先后顺序。
测试策略还需要说明,采用什么样的测试类型和测试方法。这里需要注意的是,不仅要给出为什么要选用这个测试类型,还要详细说明具体的实施方法。
功能测试,特别是主干业务流程的测试优先级最高。
兼容性测试,Web 测试需要确定覆盖的浏览器类型和版本,移动设备测试需要确定覆盖的设备类型和具体 iOS/Android 的版本等。
性能测试,需要在明确了性能需求(并发用户数、响应时间、事务吞吐量等)的前提下,结合被测系统的特点,设计性能测试场景并确定性能测试框架。
** 测试资源 **
测试资源通常包括测试人员和测试环境,这两类资源都是有限的。测试计划的目的就是,保证在有限资源下的产出最大化。所以,测试资源就是需要明确 “谁来测” 和 “在哪里测” 这两个问题。
测试人员,测试人员的资源通常有两个维度:一是,测试工程师的数量;二是,测试工程师的个人经验和能力。
测试环境和设备,不同的项目,可能会使用共享的测试环境,也可能使用专用的测试环境,甚至还会直接使用生产环境。
** 测试进度 **
测试进度主要描述各类测试的开始时间,所需工作量,预计完成时间,并以此为依据来建议最终产品的上线发布时间。
比如,版本接受测试(Build Acceptance Test)的工作量,冒烟测试(Smoke Test)的工作量,自动化脚本开发的工作量,缺陷修复的验证工作量,需要几轮回归测试、每一轮回归测试的工作量等等。
** 测试风险 **
通常需求变更、开发延期、发现重大缺陷和人员变动是引入项目测试风险的主要原因。
互联网产品的研发流程和传统软件产品的研发流程的不同决定了其对应的测试策略的不同。发布周期的巨大差异决定了,传统软件产品的测试策略必然不适用于互联网产品的测试,二者的测试策略必然在测试执行时间和测试执行环境上有巨大差异。对互联网产品来说,通常 24 小时就会有一到两次的发布,发布流程通常包含了代码静态扫描、单元测试、编译、打包、上传、下载、部署和测试的全流程。留给测试执行的时间就非常有限,通常情况下,互联网产品要求全回归测试的执行时间不能超过 4 小时。
如何在保证测试质量和测试覆盖率的前提下,有效缩短测试执行时间呢?
** 传统软件产品的测试策略设计 **
传统软件产品的测试策略,通常采用下图中的金字塔模型。
第一层,单元测试,属于白盒测试的范畴,通常由开发工程师自己完成,由于越早发现缺陷其修复成本越低,所以传统软件产品的测试策略提倡对单元测试的高投入,单元测试这一层通常都会做得比较 “厚”。
第二层,API 测试,金字塔中间部分是 API 测试,主要针对的是各模块暴露的接口,通常采用灰盒测试方法。灰盒测试方法是介于白盒测试和黑盒测试之间的一种测试技术,其核心思想是利用测试执行的代码覆盖率来指导测试用例的设计。
第三层,GUI 测试,金字塔最上层的是 GUI 测试,也称为端到端(E2E,End-to-end)测试,是最接近软件真实用户使用行为的测试类型。通常是模拟真实用户使用软件的行为,即模拟用户在软件界面上的各种操作,并验证这些操作对应的结果是否正确。GUI 测试的优点是,能够实际模拟真实用户的行为,直接验证软件的商业价值;缺点是执行的代价比较大,就算是采用 GUI 自动化测试技术,用例的维护和执行代价依然很大。
** 互联网产品的测试策略设计 **
互联网产品通常采用菱形的测试策略,遵循 “重量级 API 测试,轻量级 GUI 测试,轻量级单元测试” 的原则。
第一层,单元测试,互联网产品追求的是最快速的功能实现并上线,基本不会给你时间去做全面的单元测试。即使给你预留了单元测试的时间,频繁的迭代也会让单元测试处于不断重写的状态。因此,单元测试原本的价值,很难在实际操作层面得到体现。那么,互联网产品真的可以不用做单元测试么?答案是否定的,只不是这里的单元测试策略要采用 “分而治之” 的思想。
互联网产品通常会分为应用层和后端服务,后端服务又可以进一步细分为应用服务和基础服务。后端基础服务和一些公共应用服务相对稳定,而且对于系统全局来说是 “牵一发而动全身”,所以后端服务很有必要开展全面的单元测试;而对于变动非常频繁的客户端应用和非公用的后端应用服务,一般很少会去做单元测试。另外,对于一些核心算法和关键应用,比如银行网关接口,第三方支付集成接口等,也要做比较全面的单元测试。
总结来讲,互联网产品的全面单元测试只会应用在那些相对稳定和最核心的模块和服务上,而应用层或者上层业务服务很少会大规模开展单元测试。
第二层,API 测试,对于互联网产品来说,把测试重点放在 API 测试上,才是最明智的选择。原因如下:
第三层,GUI 测试,互联网产品的上线周期,决定了 GUI 测试不可能大范围开展:
传统软件通常采用金字塔模型的测试策略,而现今的互联网产品往往采用菱形模型。菱形模型有以下四个关键点: