
前几年我接手了一个后台管理系统的测试任务项目组让我牵头写一份测试计划书。我当时没太当回事照着网上的模板拼了一份测试目标、测试范围、进度计划、资源安排、风险分析全都有自己觉得已经很完整了。结果评审会开了不到半小时我就被问住了范围里为什么包含登录页的性能测试回归测试排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。别小看这个习惯它能避免很多协同灾难。我个人这几年写测试计划书的体会是最重要的转变其实就一句话别再把自己当成写文档的人要把自己当成排计划的人。计划书里的每一个日期、每一条准入准出条件、每一个风险应对动作后面都跟着项目组真金白银的资源和时间。你写得越具体、越量化执行阶段就越有抓手评审会上腰杆就越硬。最后分享一个小经验计划书不只是给领导看的更是给自己加班时看的。项目压力大的时候不要凭感觉调整测试方案回到计划书里看看当初的估算依据和优先级排序你会发现很多临时拍脑袋的决策其实都有更合理的替代方案。把这份文档用起来它就是你测试工作中最值钱的一张地图。