ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

测试计划书怎么写才不被评审挑战?从范围到准出的完整指南

测试计划书怎么写才不被评审挑战?从范围到准出的完整指南

前几年我接手了一个后台管理系统的测试任务,项目组让我牵头写一份测试计划书。我当时没太当回事,照着网上的模板拼了一份,测试目标、测试范围、进度计划、资源安排、风险分析全都有,自己觉得已经很完整了。结果评审会开了不到半小时,我就被问住了:"范围里为什么包含登录页的性能测试?""回归测试排7天,依据是什么?""准出条件里的'主要功能通过',这个主要功能是怎么定义的?"那一场评审下来,我最大的收获就是意识到:测试计划书不是用来撑场面的一张表,每一个字都得经得起追问。

这份经验在今天看来尤其值得分享。很多测试新人甚至带过几年项目的人,写计划书时还是习惯性填模板,最后要么被领导打回重写,要么就是写完锁进共享文档,项目推进过程中完全没人看。这篇文章我想把测试计划书从"怎么写"到"怎么不被评审挑战"完整拆一遍,结合我自己踩过的坑和后来沉淀下来的方法,适合刚接手测试任务的工程师、测试组长,也适合被项目经理追着要文档的朋友参考。

1. 先想清楚给谁看:测试计划书不是写给自己爽的

我见过太多计划书的第一章是"项目背景",第二章是"测试目标",第三章开始列范围。信息都有,但读起来像流水账,原因就是写的时候根本没想过读者是谁。

1.1 一份计划书至少要服务三类人

我把项目里的相关角色做过一次梳理,大家看计划书的视角完全不一样。项目经理关心的是进度和资源,开发关心的是提测门槛,测试团队自己关心的是执行路径。用一张表说明会比较直观:

读者最关心的问题计划书里对应的重点
项目经理 / 产品负责人测试还要多久?投入几个人?会不会延期?哪些风险需要我出面协调?进度计划、资源安排、里程碑、风险清单
开发团队提测前你们能接受什么状态?缺陷怎么流转?哪些模块会被重点测?准入条件、缺陷流程、测试范围、重点模块
测试团队自己每天具体干什么?用例写得完吗?环境谁准备?数据哪里来?任务分解、环境与数据清单、检查点

如果你写计划书之前先问自己一句"这一段是写给谁看的",内容组织就会完全不一样。比如"希望各部门大力配合"这种话写在风险应对里毫无意义,因为没有人看到这句话会知道自己该做什么。换成"运维部需要在7月10日前完成测试环境部署,负责人张三"才叫有效信息。

1.2 计划书是承诺书,不是说明书

描述性的语言是计划书最常犯的毛病。什么叫"验证系统功能是否符合需求"?什么叫"保证产品质量,降低线上缺陷率"?这些话单独看都没错,但都没法验证,评审的时候别人根本没法判断你写没写对。

我自己后来定了一个标准,计划书里每一条结论都必须是可检查的。同样是测试目标,与其写"保证支付功能质量",不如写"支付模块的核心用例执行率达到100%,致命与严重级别缺陷清零,遗留缺陷全部经过产品确认"。一个是口号,一个是承诺。

承诺书性质还有一个隐含意义:你写出来的每一项承诺都要有依据。说"7天能测完",就得讲清楚这7天是按什么算出来的;说"不做性能测试",就得写明为什么不做、当前预期并发量是多少、如果超出预期的兜底方案是什么。这就是为什么后来我写计划书的时间是填模板的好几倍,但评审一次过的概率也高了很多。

1.3 别忽略间接读者

计划书偶尔还有第四类读者:运维、DBA、外部验收方。你要搭一套测试环境,可能涉及运维帮忙申请服务器;你要构造几千万数据的性能测试场景,可能得找DBA协助;如果是项目交付,客户或监理也会看测试计划。对于这些间接读者,计划书里最好单独列一个"外部依赖与配合事项"小节,写明谁在什么时间点提供什么支持。我在一个项目里就干过这种事:上线前一周才发现压测环境还没申请,运维那边资源排期已经满了,最后压缩了功能测试时间才把压测做完。如果计划书里早把环境申请时间点和责任人写清楚,这种事完全可以避免。

2. 写范围之前,先回答三个问题:测什么、不测什么、为什么

测试范围是评审会上被挑战最多的部分,通常是因为写得太泛。很多人直接把整个系统模块列表贴进来,美其名曰"全量回归更稳",实际上既没重点也没说服力。

2.1 测试范围不是"整个系统",而是"这次变更的交付面"

正确的做法是围绕本次需求或版本变更来圈范围。我习惯在计划书里附一张范围分析表,把每个需求点都过一遍:

模块需求编号变更类型受影响模块建议测试类型优先级
订单管理REQ-101新增接口支付、库存接口测试、功能测试高
登录页REQ-102文案修改无冒烟测试低
报表导出REQ-103查询逻辑调整权限、定时任务功能测试、兼容性测试中

这一步做完,范围自然就立体了。比如登录页这次只是改了个提示文案,你把它写成"登录功能全量测试",负责人肯定要追问为什么;如果改成"冒烟覆盖登录跳转即可",理由就站得住。

比"测什么"更重要的是"不测什么"。我强烈建议在计划书里单写一小节"不测范围与原因"。比如"本次不做压力测试,原因:系统当前用户量峰值约200人,现有架构已验证支持500并发;若上线前运营活动导致预期并发超过500,需启动性能测试并另行排期"。这个写法能把项目组的隐性期望钉死,避免上线后有人回马枪问你"为什么没做压测"。现实中测试背锅,很多就是死在"你没说不测,我默认你测了"。

2.2 提测准入:一门朝里开,质量往下走

准入条件定义的是"开发把版本交到测试手里之前,必须满足什么状态"。这块写不清楚,测试很容易接到一个根本没法开工的半成品,第一天浪费在环境排查和基础功能冒烟失败上。

我常用的准入条件清单长这样:

  • 开发自测完成,提交自测记录,覆盖本次需求主流程和改动点
  • 冒烟测试用例全部通过,冒烟范围附在计划书附录
  • 测试环境部署完成,提测版本号与提测单一致
  • 需求文档、接口文档、数据库变更脚本已同步提交

每一项都不是形式主义。自测记录是为了防止开发说"我觉得没问题";冒烟用例前置是为了把最基本的环境问题挡在正式测试前面;版本号一致是为了避免测了半天发现测的是旧包。注意冒烟用例的挑选原则:覆盖主流程、关键改动点、核心登录链路,数量控制在20条以内,执行时间不超过30分钟。冒烟都不该在一轮功能测试里做,而是提测前由测试快速验证,通过了才正式接收。

2.3 测试准出:怎么证明"测完了"

如果准入是入口,准出就是出口。很多项目走到测试尾声,需求方问"到底能不能上线",测试支支吾吾说"应该可以",就是因为准出条件写得不够硬。

我建议准出条件量化到可以打勾:

  • 致命、严重级别缺陷为0,高优先级缺陷全部修复并复验通过
  • 中低优先级缺陷有明确的处理结论:修复、延期到下一版本或永久关闭,且经过产品负责人确认
  • 核心用例执行率100%,整体用例执行率不低于95%
  • 遗留缺陷列表经过产品、开发、测试三方确认
  • 用户验收测试(UAT)关键业务流程通过

这套准出条件看起来苛刻,但它给测试团队提供了"拒绝上线"的底气。我后来遇到过业务方强行要求带缺陷上线的情况,因为准出条件写在计划书里并且评审过,我只需要把未达标项逐条列出来,让决策人在风险确认单上签字即可。责任界面干净,测试不用背锅。

2.4 需求的可测试性评审:动笔前最值得做的事

写计划书之前,最好把需求文档逐条过一遍,看每一条需求是不是能写出明确的验证步骤。遇到"界面友好""操作顺畅""响应及时"这类模糊描述,要主动找产品和开发澄清。"响应及时"到底是3秒还是300毫秒?"界面友好"是按钮位置正确还是颜色搭配合理?不可测试的需求如果直接放进测试范围,最后一定会变成扯皮现场。

实际操作中,我会把不可测试项单独列成一个清单,发给产品和开发,约半小时的评审会专门敲定。这个动作表面上是在较真,其实是在做测试左移:提前把模糊需求暴露出来,减少设计和开发阶段的返工成本。如果你在计划书阶段就推动这事儿,评审会上、项目组对你的专业度评价会明显不一样。

3. 测试策略:风险驱动远比"全覆盖"靠谱

策略是计划书里最能体现测试设计水平的部分,也是最容易被人忽略的部分。很多人写测试策略就是把手工测试、自动化测试、性能测试各写一段,最后再加一句"结合项目实际情况选择合适方法",等于什么都没说。

3.1 测试分层:不是所有东西都要自动化

测试金字塔讲的是单元、接口、UI三层,比例从下往上递减。在项目实操里,单元测试的活主要在开发手里,测试团队真正能控制的是接口测试和UI测试。我通常建议把自动化重点放在接口层,因为接口用例的维护成本低、反馈速度快、稳定性高。

举个例子,一个订单系统本次改动有12个接口,我可能给其中8个核心接口写接口自动化用例,覆盖正常链路、异常参数、鉴权失败、边界值;UI自动化只挑2到3条主流程写,比如"创建订单→支付→查询订单状态"。原因很简单:UI自动化对前端页面结构太敏感,稍微改个样式或文案脚本就挂了,维护成本几倍于接口用例。盲目追求UI自动化覆盖率,看起来先进,实际上是在给自己挖坑。

3.2 从风险列表倒推测试深度

我写测试策略的时候,习惯先拉一张风险分析表,再根据风险等级分配测试深度和资源比例。模板如下:

模块 / 功能点风险等级风险依据测试重点资源投入占比
用户权限控制高涉及越权与数据隔离,安全影响大越权访问、多角色切换、黑白名单25%
支付回调高涉及资金,异步逻辑复杂幂等性、超时重试、异常报文25%
报表导出中涉及大数据量,易出格式问题数据量边界、导出格式、大文件超时15%
基础信息维护低CRUD逻辑简单,历史稳定正常增删改查、必填校验10%

风险等级怎么定?两维:影响程度和发生概率。资金损失、数据泄露算高影响;逻辑分支多、接口依赖复杂算高概率。两者相乘就是风险排序。测试资源自然向高风险模块倾斜,低风险模块用冒烟和探索性测试覆盖即可。

这里顺带说一句:登录页性能测试那个问题,我后来理解为,登录虽然是核心功能,但如果当前系统的并发瓶颈根本不在登录认证接口,又没有针对登录的专门活动场景,那它就不该占用宝贵的压测时间。风险驱动的逻辑不是"核心功能必须做性能测试",而是"有真实高风险场景的功能才需要做性能测试"。

3.3 回归范围:从变更影响分析开始

回归测试范围是计划书里另一个容易拍脑袋的地方。有人一提到回归就"全部测一遍",既不现实也经不起追问。我的做法是三个来源合并:

第一,从本次改动点出发,梳理接口调用链和依赖关系。订单状态流转改了,支付回调、售后查询、对账报表这些直接依赖订单状态的模块必须纳入回归。第二,检查是否涉及公共组件和公共数据。权限拦截、登录态、消息中心这类公共模块,只要底层有改动,影响面往往不止一个业务模块。第三,回顾历史缺陷高发区。缺陷密度高的模块通常藏着隐性逻辑,哪怕这轮没改也要回归一轮。

回归用例我还会分三层:核心用例全量回归,保证主流程不炸;受影响模块用例全量回归,验证改动配套关系;其余模块抽冒烟用例,确认没有大范围破坏。范围定完之后,对应的工作量才算得出来,也才能在进度计划里说服别人。

4. 进度计划、环境清单和交付物:可落地全靠这三项

测试策略再漂亮,排期和资源跟不上就是空中楼阁。这一章节讲讲计划书里那些"实操时最容易翻车"的部分。

4.1 进度计划要拆到"阶段-任务-检查点"三层

不要只写一个"测试阶段:6月1日—6月15日"这种粗粒度计划。我通常拆成三层:阶段、任务、检查点。阶段是大的时间块,任务是阶段内要完成的具体事项,检查点用来卡阶段出口。

阶段任务负责人预估工作日前置依赖输出物
计划阶段需求梳理、范围确认、策略评审测试组长2需求基线冻结测试计划书
设计阶段测试用例设计、用例评审测试工程师5计划书评审通过测试用例集
执行阶段第一轮功能测试、缺陷跟踪测试工程师5提测版本通过准入缺陷记录、测试日志
回归阶段缺陷复验、回归测试测试工程师3开发修复完成回归测试报告
报告阶段测试数据汇总、准出评估测试组长1准出条件满足测试总结报告

每个阶段末尾设检查点,检查点不过不进入下一阶段。比如"设计阶段"的检查点是"用例评审通过,且用例对需求的覆盖率100%"。这样做的好处是问题早暴露,不用等到执行阶段才发现用例设计遗漏。

4.2 排期要留缓冲,里程碑要设触发动作

我见过不少测试排期把自己排到一天不差,最后被环境故障、需求变更折腾得天天加班。合理的排期应该按"估算工作量的70%排任务,30%作为缓冲"来设计。估算下来需要15个工作日,就在进度表里排10到11天的具体任务,剩余4到5天作为缓冲期,而不是把15天全部排满。

缓冲期对应到里程碑管理上,还要写明延期的触发动作。比如"若第一轮功能测试执行时间超过计划用时的80%,测试组长需要向项目经理预警,并给出裁剪低风险场景或增加资源的建议"。有了这个机制,延期不再是测试单方面背锅,而是项目组的共同决策。

4.3 环境、数据和设备清单要前置确认

环境准备是最容易被低估的工作。我见过一个真实的延期:测试环境里缺少指定月份的日期数据,导致周期任务模块连续两天无法测试,整个计划顺延两天。从那以后,我写计划书必带环境清单和数据清单。

环境清单至少包含:测试服务器配置与数量、预发布环境、数据库版本、中间件版本、依赖的第三方服务地址、移动端测试设备型号与系统版本。数据清单至少包含:基础主数据、业务组合数据、异常边界数据、脱敏要求与生成方式。数据准备要落到具体负责人和时间点,不能笼统写"测试数据准备由测试组完成",否则执行阶段一定会手忙脚乱。

这块还有一个容易忽略的维度:测试数据的安全性。用生产数据做测试时,要明确脱敏规则,身份证号、手机号、银行卡这类字段必须做变形处理。我在计划书里会专门加一句"禁止使用未脱敏生产数据",看起来多此一举,实际上是对测试团队自己的保护。

5. 评审会上被追问的"为什么":这些才是计划书的试金石

计划书写得好不好,评审会是最直接的检验。我可以负责任地说,凡是评审一次通过的计划书,不是因为运气好,而是因为写的人提前把"为什么"都想了一遍。

5.1 被挑战最多的五个问题

我梳理了一下,评审时的高频追问基本集中在五个方向:

第一,"测试时间为什么这么长/这么短?"——这类问题最需要数据支撑。有人回答"凭经验估的",基本等于送人头;有人说"之前同类项目都差不多"还稍微好一点,但仍然不够。最稳妥的是用用例数乘以执行单价再乘以轮次来推算。

第二,"这个需求为什么不在测试范围里?"——如果你写了不测范围与原因,这个问题就很好回答;如果没写,那只能现场编理由,场面很尴尬。

第三,"准出条件里的'主要功能'是什么意思?"——模糊词在评审会上会被无限放大。标准的处理方式是自己先把模糊词全部消除,要么量化,要么列举。没什么"主要功能""基本可用"这类可以自由裁量的词。

第四,"风险应对措施写是写了,但到底谁执行?"——风险清单里的每一条都要有责任人、触发条件、应对动作。比如"核心人员离职风险"如果应对策略只写"加强知识沉淀",跟没写一样。要落到"关键模块至少两人熟悉,A角离职时B角可在一周内接手"。

第五,"自动化用例数量为什么这么少/这么多?"——自动化不是越多越好。回答的逻辑应该是ROI:高稳定接口写自动化划算,频繁迭代的UI页面写自动化容易返工;本次项目周期才两个月,堆200条UI自动化不如写60条接口自动化来得实在。

5.2 用数据而不是感觉来估算测试时间

分享一个我常用的估时推演方式,不一定精确,但起码能讲出道理。假设本次需求有22个功能点,其中核心功能4个,常规功能18个。常规功能点每个写3到5条用例,核心功能每个写8到10条,算下来用例规模在80到100条。

用例编写:每条平均20分钟,100条约33小时,按每人每天有效工作8小时算,需要4个工作日。用例执行:每条执行加记录10到15分钟,100条约25小时,约3个工作日。第一轮下来因为环境不稳定、缺陷阻塞,实际执行效率按80%算,再加0.5天。回归:核心用例50条跑2轮,每条约15分钟,共25小时,约3个工作日。缺陷复验:假设30个有效缺陷,每个复验加回归确认15分钟,约7.5小时,接近1天。再算上测试报告编写、用例评审会、跨部门沟通,至少要加2天。

把上面这些加起来:4天编写+3天执行+3天回归+1天复验+2天杂项≈13天,再乘以1.2的环境不稳定系数,大约16天。这个案例如果项目经理只给了10天,你就能拿着明细告诉他时间缺口在哪、如果要压缩可以砍哪些场景。这种对话方式的效果,远好过一句"时间不够"。

5.3 计划书不是一次定稿,版本管理要跟上

很多团队把计划书当成静态文档,写完评审完就再也不动了。实际上需求变更、提测延期、环境故障、人员调整,任何一个变化都可能让计划书失真。我的做法是给计划书维护一张修订记录表:

版本日期变更内容变更原因影响范围
1.06月1日初稿评审发布——
1.16月8日需求REQ-104新增导出模板,用例新增12条产品需求变更执行阶段增加1天
1.26月12日性能测试环境不可用,压测延后一周运维资源冲突里程碑后移并通报项目经理

版本更新的关键动作不是改文档,而是通知所有相关人。我在项目里吃过一次亏:计划书默默更新了,但项目经理不知道,最后他按旧版本时间规划上线,发现测试还没结束。从那以后,任何版本变更我都会在项目群里同步一句"测试计划书已更新至1.2版,变更点:XXX,影响:XXX"。别小看这个习惯,它能避免很多协同灾难。

我个人这几年写测试计划书的体会是,最重要的转变其实就一句话:别再把自己当成写文档的人,要把自己当成排计划的人。计划书里的每一个日期、每一条准入准出条件、每一个风险应对动作,后面都跟着项目组真金白银的资源和时间。你写得越具体、越量化,执行阶段就越有抓手,评审会上腰杆就越硬。

最后分享一个小经验:计划书不只是给领导看的,更是给自己加班时看的。项目压力大的时候,不要凭感觉调整测试方案,回到计划书里看看当初的估算依据和优先级排序,你会发现很多"临时拍脑袋"的决策其实都有更合理的替代方案。把这份文档用起来,它就是你测试工作中最值钱的一张地图。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进