软件测试流程八环节实战:需求评审、用例设计到缺陷跟踪
做测试这行待久了你会发现一个挺有意思的现象几乎所有人都能背出软件测试流程的那八个环节需求分析评审、测试计划、测试用例、用例评审、执行测试、跟踪定位bug、测试报告、缺陷报告顺序一个不差。但真到了项目里版本一压缩、需求一变更、开发一延期这套流程立刻就被拧成麻花用例只写主流程评审开成读稿会缺陷单写得像谜语测试报告变成一堆数字罗列。事后复盘问题往往不在技术能力而在流程的颗粒度和执行节奏上。这篇内容我想把这八个环节拆开揉碎讲一遍重点不是复述流程定义而是讲清楚每个环节到底要产出什么、卡点在哪、哪些地方最容易糊弄过去然后就出事。适合刚入行的测试新人建立完整认知也适合做了两三年但一直是接需求—点页面—提bug这一条线走下来的同学把流程里的空白补上。文中的方法、模板、参数估算都是我自己在项目里反复用过的有些踩过坑有些是被逼出来的土办法能直接拿去改改就用。1. 需求分析评审测试动作的真正起点1.1 评审会之前测试该做的功课很多人把需求评审当成听产品讲一遍需求然后会上问两个无关痛痒的问题就结束了。这个习惯很要命。评审会本质上是信息同步会一两个小时里产品不可能把每个细节讲透你要做的是在会前把该读的东西读完带着问题进场而不是空着手等着被投喂。拿到需求文档PRD 或需求卡片之后我一般会读两遍。第一遍不做笔记纯业务视角把自己当成一个真实用户从头到尾走一遍主流程先搞清楚这个功能解决的是谁的什么问题。第二遍才动笔边读边标三类东西看不懂的地方、前后矛盾的地方、没有写清楚异常处理的地方。第二遍读完手里至少应该有十几条待确认项这时候再去开会你问出来的问题质量完全不一样。需要提醒的是PRD 里没写的部分往往比写了的更重要。比如一个提交订单功能文档大概率会写清楚提交成功后跳转哪里、订单状态怎么变但大概率不会写网络超时重试怎么处理、重复提交怎么防、库存扣减失败怎么回滚、金额精度保留几位、并发下单会不会超卖。这些空白就是测试要补的坑评审会上问出来比等测出来再吵要省事得多。1.2 从需求里拆出可测试的点一张清单管住遗漏我习惯把需求拆成七个维度去过一遍每过一遍就在清单上打钩这个动作看起来机械但能挡住大部分漏测尤其是那种测到后期才发现这个场景根本没人想过的尴尬。维度要确认的问题典型遗漏点用户角色有几种角色各自权限边界在哪越权访问、角色切换后状态残留主流程正常路径有几条分支在哪分支条件边界、多路径并存异常流程失败、超时、中断、取消如何处理失败后数据是否回滚输入校验各字段类型、长度、格式、必填特殊字符、emoji、前后空格数据精度金额、比例、时间的单位与精度小数点进位、时区差异依赖与集成上下游系统、第三方接口对方服务不可用时的降级非功能性能、兼容、安全、易用性并发上限、老版本兼容这张表不需要交付给谁就是自己的检查工具。项目做多了你会发现真正出生产事故的八成落在异常流程和依赖与集成这两行里。1.3 需求评审会上我通常这样提问评审会上贸然开炮容易得罪人尤其是新人容易给产品留下这人在找茬的印象。我的做法是把问题包装成确认场景而不是你这里写错了。举个实际例子文档里写用户下单后 30 分钟内未支付自动取消订单我不会直接说异常流程没写而是问如果用户在第 29 分 50 秒点了支付支付成功回调在第 31 分才到这单是取消还是保留——这是场景化提问产品必须给出答案而且不伤和气。几个高频高价值的提问方向可以直接抄幂等性同一个请求重复提交两次系统是产生两笔数据还是只有一笔状态机这个状态有哪些前置状态可以进入能跳到哪些后继状态有没有死状态数据量级这个列表页正常情况下会有多少条数据极端情况呢分页还是全量导出时间与时区所有时间字段存的是 UTC 还是本地时间跨时区展示怎么处理权限矩阵这个操作对 A 角色开放对 B 角色呢超管绕过权限算不算预期行为灰度与回滚上线出问题能不能快速关掉这个功能历史数据怎么处理1.4 需求追溯矩阵给漏测上一道保险需求评审结束之后我会顺手做一件事把每条需求编号然后建一张需求追溯矩阵RTM。这张表就三列——需求编号、对应用例编号、当前状态。看起来简陋但它的价值在后期会集中爆发版本中期产品改了某条需求你翻一下表就知道哪些用例要作废、哪些要改、哪些需要重新执行版本结束时做覆盖度检查一眼就能看出哪条需求压根没有用例对应。注意需求追溯矩阵不要做成形式主义的大表颗粒度控制在一条需求对应一到多条用例就够。写得太细维护成本会超过收益最后没人更新反而误导判断。需求变更这件事说实话大部分团队都管得不严。我的建议是所有口头变更都要求落到文档或工单上哪怕只是一行字的评论。测试的依据必须是可以引用的文字而不是昨天群里聊过。2. 测试计划把不确定性提前摁下去2.1 测试计划到底该写什么不少团队把测试计划写成给领导看的文档二十页篇幅真正有用的信息三行。我觉得测试计划的核心就四件事做什么、不做什么、什么时候做完、做不完怎么办。围绕这四件事展开其他都是辅助说明。一份能落地的测试计划我一般会包含下面这些块项目背景与目标版本这次要交付什么交付时间点是什么测试范围明确列出纳入测试的模块和明确排除的模块测试策略功能、接口、性能、兼容、安全各自用什么手段手工还是自动化环境与资源需要几套环境、什么数据、是否需要真机、是否需要压测资源进度排期按阶段拆到天标注里程碑和依赖准入准出标准什么条件下开始测什么条件下算测完风险与应对识别风险并给出预案交付物用例、缺陷库、测试报告等其中最容易被写空的是明确排除那一栏。写清楚不测什么比写清楚测什么更能避免后期扯皮。比如本次不覆盖 IE 浏览器兼容本次不覆盖历史脏数据的迁移校验白纸黑字写在计划里评审时大家确认过后面就没人能拿这个来追责。2.2 测试策略不是所有功能都值得同样力度测试策略这一步考验的是取舍能力。资源永远是紧的把所有模块平均用力等于所有模块都没测好。我通常按业务重要度 × 变更影响面 × 历史缺陷密度三个因素给模块打一个粗分然后决定投入力度。举个真实场景一个电商 App 的迭代版本里改了购物车结算逻辑、调了商品详情页的推荐位样式、升级了底层的图片缓存库。三者重要度完全不同——结算逻辑是资损高发区推荐位样式属于展示层图片缓存升级影响面极大但业务逻辑不变。对应的策略就是结算逻辑全路径覆盖加上金额精度的专项校验推荐位做展示和点击的抽查图片缓存升级做一轮全局回归重点看弱网和老机型。排期估算这块我个人不太相信拍脑袋。经验类比法找历史上相似模块的实际耗时做参照比直接估要靠谱更严谨一点可以用三点估算把乐观值、最可能值、悲观值加权期望工时 (乐观值 4 × 最可能值 悲观值) / 6比如某个模块用例执行乐观 3 天最可能 5 天悲观 9 天算出来是 (3 20 9) / 6 ≈ 5.33 天。然后我还会乘一个 1.2 到 1.5 的缓冲系数因为环境故障、构建失败、需求变更这些计划外的事情几乎必然发生。这个缓冲不是给自己摸鱼用的是给意外留的。2.3 进度排期里的三个关键里程碑排期表上节点很多但真正需要盯住的只有三个。第一个是用例完成并通过评审的时间点。这个点一旦后延后面所有环节都会连锁后延而且执行期压缩会直接导致漏测。所以这个节点我会往前留宁可自己加班提前也不占执行期的时间。第二个是准入测试通过的时间点也就是开发提测后冒烟通过、可以正式进入系统测试的那一刻。这个点经常被开发拖我的经验是把提测标准写进计划并抄送项目负责人明确不满足提测标准的构建测试有权退回且不占用测试工期。这句话写在计划里比事后吵架有用一百倍。第三个是回归验证完成的时间点也就是所有 P0、P1 缺陷验证关闭、遗留缺陷明确记录的时间点。这个点决定了上线窗口能不能守住。2.4 计划是活的但变更要留痕测试计划写完不是供起来的。项目推进过程中需求变了、人走了、环境挂了、第三方接口延期了计划必须跟着调。但我有一个原则调整要留痕。每次调整在计划文档里记一行写明调整原因、影响范围、由谁确认。这样到了项目末期回顾工时偏差的时候能说清楚偏差来自哪里而不是一句当时比较忙糊过去。提示如果项目节奏非常快没有时间写完整测试计划至少把范围、策略、准入准出、风险这四项用一页纸写出来发给相关人确认。这四项是测试工作的护身符缺了它们测试的边界就完全由别人说了算。3. 测试用例把需求翻译成可执行的检查清单3.1 用例设计方法的组合拳只靠想到哪测到哪写用例覆盖率全凭运气。几种经典设计方法要组合使用各自解决不同的问题。等价类划分解决的是数量太多测不完。把所有可能的输入分成若干类每类挑一个代表值。比如年龄输入框允许 18 到 60那有效等价类是 18-60 之间的任意值无效等价类是小于 18 和大于 60。边界值分析解决的是错误往往发生在边缘。上面那个例子重点测 17、18、19、59、60、61而不是去测 35。实测下来绝大多数输入校验的缺陷都卡在边界上尤其是大于等于写成大于这种低级但高频的问题。判定表解决的是多条件组合。当业务规则由多个条件共同决定时用判定表把条件组合列全能避免拍脑袋只测了主路径。比如一个优惠券使用规则涉及会员等级、订单金额、券类型、是否叠加四个条件两两组合就有十几条规则靠脑子想很容易漏。场景法解决的是业务链路。从用户视角串起完整流程覆盖基本流和备选流。基本流是全部顺利的路径备选流是中途出现分支或异常的路径。这一步能发现很多单点功能都正常、串起来就不对的问题。错误推测法解决的是经验盲区。根据历史缺陷、已知的系统脆弱点去猜测哪里容易出错比如并发场景、缓存未过期场景、跨天跨月的定时任务、时区切换。这方法不系统但实战命中率很高。方法主要解决适用场景常见产出量等价类划分输入空间过大表单、参数校验中等边界值分析边缘条件缺陷数值、长度、时间少而精判定表多条件组合规则引擎、权限、优惠多场景法业务流程完整性端到端主流程中等错误推测经验盲区并发、缓存、定时任务少而准3.2 一条好用例的结构长什么样用例写得好不好判断标准很简单换一个人拿着它能不能在不知道需求的情况下把测试做出来。如果能就是好用例。一条完整的用例至少包含这些字段用例编号、用例标题、所属模块、关联需求、前置条件、操作步骤、预期结果、优先级、用例类型、是否可自动化。其中最容易写烂的是操作步骤和预期结果。步骤必须带具体数据。写输入合法的用户名和密码点击登录是无效用例因为别人不知道什么叫合法。正确的写法是用户名输入 tester_01密码输入 Abc12345点击登录按钮。预期结果必须唯一可判定写登录成功不够要写页面跳转到首页右上角展示用户名 tester_01本地存储中写入 token。预期结果含糊执行时就会有争议。# 一个接口用例的断言示例体现预期结果唯一可判定 import requests def test_login_success(): payload {username: tester_01, password: Abc12345} resp requests.post(http://test-env/api/login, jsonpayload) body resp.json() assert resp.status_code 200 assert body[code] 0 assert body[data][userId] 0 assert len(body[data][token]) 32这段断言里状态码、业务码、用户 ID、token 长度都是明确可判定的没有任何看起来正常这种主观描述。用例评审的时候这类断言基本不会引发争论。3.3 功能用例和接口用例思路差别在哪功能用例从界面出发接口用例从契约出发两者的设计思路差别不小。功能用例关注用户看到什么接口用例关注数据怎么流转。接口用例设计我会重点覆盖这几类参数维度必填缺失、类型错误、长度越界、特殊字符、多余字段鉴权维度无 token、过期 token、他人 token、越权访问其他用户数据业务维度正常返回、业务失败码、重复请求幂等、并发请求异常维度超时、下游服务不可用、返回体结构异常、大数据量返回顺序维度状态未就绪时调用、重复回调、乱序到达接口用例有个天然优势容易自动化、执行快、不受界面影响。所以在排期紧张的时候我会优先把 P0 接口的用例补全并自动化这样每次回归的时间成本极低把省下来的时间投到界面和场景测试上。3.4 用例粒度与数量控制新人常见两个极端要么一条用例恨不得把所有检查点塞进去执行失败时不知道是哪里挂了要么拆得极碎一个输入框的每种字符都单写一条用例库膨胀到几千条回归根本跑不完。我的经验是一条用例聚焦一个验证目标但可以包含一组相关的检查点。比如登录成功这条用例可以同时校验跳转、用户名展示、token 写入因为它们属于同一个验证目标下的多个观察点。但登录成功和登录失败提示必须分开因为这是两个独立目标。优先级分布我一般按 2:4:3:1 来分P0 占两成是核心主流程和资损风险点每次回归必跑P1 占四成是重要功能和主要异常分支P2 占三成是次要分支和边界P3 占一成是极端场景和兼容性细节。这个比例能让时间不够时砍什么变成一个提前想好的决策而不是临场慌乱。4. 用例评审在写代码的人之前先过一遍脑子4.1 评审之前先做自检用例评审会最怕的情况是会上大家逐条读用例读到一半发现格式不统一、错别字一堆、需求都对不上号。这会把评审会变成校对会。所以评审之前我一定会做一轮自检用下面这张清单过一遍需求覆盖每条需求是否都能找到对应用例有没有需求完全没被覆盖方法覆盖边界值、等价类、判定表该用的地方是否都用了优先级合理P0 是不是真的都是核心路径有没有把边角料标成 P0步骤可执行步骤是否带具体数据是否存在输入合法数据这种废话预期唯一预期结果是否能明确判定通过或失败无重复无矛盾有没有两条用例实质上在测同一个东西或者预期互相打架数据可构造前置数据能不能造出来有没有依赖生产数据这种不可行的前提这份自检做完能砍掉评审会上至少一半的低效时间。4.2 评审会怎么开才不流于形式我的做法是评审会只精读 P0 和 P1 用例P2、P3 抽查。原因很实际评审会的成本是所有人的时间而 P0、P1 决定了这次迭代的质量下限值得逐条过P2、P3 数量大、争议小抽查加异步评审就够了。会议节奏上控制在 60 到 90 分钟超过这个时长注意力会断崖式下降。我会提前一天把用例发出去要求参会人带着问题来。会上按模块过每个模块先由用例作者讲设计思路和覆盖点然后大家提问。产品关注业务覆盖开发关注实现细节和边界我关注的是有没有人提出我没想到的场景。有一点值得强调评审会的产出必须落到记录上。谁提了什么问题、结论是什么、用例要不要改、谁来改、什么时候改完这些都要写进评审记录表会后跟到底。不然评审开完意见随风散了跟没开一样。注意评审会上如果出现这个需求本身有争议的情况不要在现场争论需求怎么改先记下来转给产品单独确认会议继续推进。评审会的主题是用例不是需求二次评审混在一起效率极低。4.3 用例库的维护与复用用例库是资产不是一次性消耗品。我维护用例库有几个习惯一是按模块分层模块下再按功能点分组命名统一用模块_功能点_场景的格式方便搜索二是给用例打标签比如回归必跑冒烟需真机依赖第三方这样挑选回归范围时可以直接按标签筛三是版本化管理需求变更导致用例调整时保留变更记录不要直接覆盖。复用的关键在于裁剪而不是复制。新版本来了先拉出上一个版本的相关用例逐条判断这条还适用吗预期结果变了吗前置数据变了没有。经验数据是迭代版本里真正需要新增的用例通常只占总量的一到两成剩下的都能复用或小改。掌握这个节奏用例维护的成本能降下来一大半。5. 执行测试从冒烟到回归的节奏把控5.1 冒烟测试与准入准出开发说提测了不等于可以开始测了。这个环节我坚持做一个冒烟测试也就是用最核心的十几条用例快速过一遍主流程通常半小时到一小时能跑完。冒烟不通过构建直接退回不消耗正式测试工期。冒烟用例的选取标准就一条任何一条失败这个版本都没有继续测的价值。比如登录、核心下单、核心支付、核心查询这几条链路。冒烟用例不宜多二三十条以内跑完能给出明确的可以测或不可以测结论。准入标准我在计划里会写清楚一般是这几项构建可正常安装启动、冒烟用例全部通过、数据库脚本已执行、配置项已同步、接口文档已更新。准出标准则是P0、P1 缺陷全部关闭、P2 缺陷有明确处理结论、回归测试通过、遗留问题已记录并获得产品确认。5.2 执行顺序与优先级安排执行顺序安排得好能显著缓解时间压力。我的默认顺序是先跑 P0 主流程再跑核心模块的 P1然后按模块推进 P1 和 P2最后处理 P3 和兼容性。这样做的理由是如果版本后期时间不够至少核心链路是被完整覆盖的风险可控。缺陷的发现节奏也会影响执行。前期缺陷多开发修复需要时间如果一开始就把所有用例跑完然后干等修复中间会有一段空窗期。我的做法是前几轮执行集中在核心模块等开发修完一批缺陷后立刻做一轮针对性的回归把发现—修复—验证的循环压得更紧凑避免最后几天集中爆发式回归。5.3 环境与数据准备测试环境出问题是执行阶段最大的隐性时间黑洞。我见过太多团队一个上午跑了三条用例剩下时间都在排查环境。所以执行前必须做几件事确认版本号与构建号对应确认数据库状态与预期一致确认第三方服务的 mock 或测试通道可用确认测试账号可登录且权限正确。测试数据准备同样重要。前置数据造不出来用例就是废的。我的经验是把常用的测试数据做成脚本或接口调用一键生成比手工在界面点半天靠谱得多。数据要带标识比如手机号段、订单号前缀方便测试结束后统一清理避免脏数据影响下一轮执行。5.4 探索式测试与自动化怎么搭配着用用例是有边界的它只能验证你想到的东西。所以每轮执行里我会留出固定比例的时间做探索式测试通常占本模块执行时间的 20% 左右用时间盒的方式约束比如接下来 30 分钟只在这一个模块里随便点目标是找出用例没覆盖的问题。探索式测试有几个好用的思路一是做破坏性操作连续快速点击、中途返回、切后台再切回来、多端同时操作同一账号二是做数据投毒输入超长文本、特殊字符、负数、极大值三是做时序错乱在请求发出后立刻断网、在下单和支付之间来回跳。自动化这块要有清醒认知。接口自动化投入产出比高尤其是回归场景稳定、快、易维护优先级应该排在最前。UI 自动化的维护成本高界面一改就要改脚本更适合放在冒烟和核心流程上不要贪多。至于 Python 版本兼容、依赖安装这类环境问题实际项目里也确实常遇到我的习惯是把依赖锁在 requirements 文件里用虚拟环境隔离避免不同项目的包互相干扰。6. 缺陷跟踪与定位从现象到根因6.1 一个合格缺陷单的要素缺陷单写得好不好直接决定这个 bug 的修复速度。写得含糊开发来回追问一来一回半天就没了。我写缺陷单有一个模板化的结构标题模块 触发条件 操作 实际现象例如结算页 优惠券已过期 点击使用 提示语未出现且金额未恢复环境与版本环境地址、构建版本号、浏览器或设备型号、系统版本前置条件账号、数据状态、必要配置复现步骤编号列出尽量精简到能复现的最短路径预期结果与实际结果分开写不要混在一句里附件日志、截图、请求响应、录屏关键证据一个不少严重程度与优先级按统一标准判定不要凭情绪指派人与关联需求方便追踪严重程度和优先级经常被混为一谈其实两者不同。严重程度描述缺陷本身对业务的影响优先级描述修复的紧急程度。一个错别字严重程度很低但如果出现在支付页面标题上优先级可能很高。等级严重程度判断典型例子致命数据丢失、资损、系统不可用重复扣款、订单金额计算错误严重主流程阻断、核心功能不可用无法提交订单、登录失败一般次要功能异常、有绕行方案筛选条件失效、导出字段缺失轻微界面、文案、体验问题文案错别字、对齐偏差6.2 从现象到根因分层排查法缺陷定位能力是测试和点点点的分水岭。同样一个提交按钮点了没反应有人只能提交一个模糊的 bug有人能直接告诉开发请求发出去了返回 500后端日志里看到空指针。后者在团队里的价值完全不同。我常用的排查思路是分层往下走先确认现象在哪一层出现第一层界面层。打开浏览器开发者工具或抓包工具看点击后有没有发出请求。如果没有请求问题可能在前端事件绑定、按钮禁用状态、表单校验拦截。如果请求发了进入下一层。第二层网络与接口层。看请求参数是否正确、请求头是否带齐尤其是鉴权信息、返回状态码是多少、返回体结构是否符合预期。这一步能快速区分是前端传错了参数还是后端返回有问题。第三层服务逻辑层。拿到接口返回的错误信息或 trace id去日志平台定位。重点看抛出的异常类型、出错的方法名、涉及的参数值。第四层数据与缓存层。如果逻辑层看起来正常就要看数据。缓存里的数据和数据库里的数据是否一致是不是缓存没失效导致读到了旧值。第五层环境与依赖层。配置项、依赖服务、中间件、网络策略这些是最容易被忽略但经常是真凶的地方。用二分法缩小范围也很有效。比如怀疑是某个参数导致的问题就固定其他参数只改这一个看现象是否变化怀疑是数据问题就换一个账号或换一批数据再试如果换了就好基本可以锁定数据。6.3 那些疑似 bug其实是伪 bug实际工作中相当一部分报出来的问题最后被判定不是缺陷。提前识别这些情况能省下大量沟通成本。常见的伪 bug 有这么几类一是缓存未刷新改了配置或数据但页面还是旧的清缓存或等过期后正常二是测试数据脏上一轮测试残留的数据导致状态异常三是环境配置差异测试环境和开发环境某个开关不一致四是时序问题操作太快导致前后请求顺序异常慢一点就正常五是浏览器或设备差异某个老版本内核渲染异常换一个就正常六是理解偏差开发按另一种需求理解实现的实际和产品确认后是需求文档本身表述不清。遇到这类情况我的处理方式不是直接关掉而是在缺陷单里补充说明经排查为 XX 原因非缺陷并把证据附上。这样既保留了记录也避免了后续重复讨论。提示和开发沟通缺陷时给证据不给情绪。把复现步骤、日志、请求响应一次性给全比说十句这个功能有问题有用得多。如果确实复现不了就注明偶现复现概率约 1/10并附上当时的完整环境信息方便开发后续追踪。7. 测试报告与缺陷报告把结论说清楚7.1 测试报告结论先行的写法测试报告最忌讳的写法是流水账先写背景再写范围再写执行过程最后才说结论。读报告的人通常是项目负责人、产品、开发负责人最关心的只有几件事能不能上线、有什么风险、还需要做什么。所以我把结论放在最前面。一份实用的测试报告我按这个顺序组织开头直接给结论和建议用两三句话说明本次测试覆盖了什么范围P0、P1 缺陷已全部关闭剩余若干遗留问题不影响核心功能建议可以上线但需要注意 XX。后面才是详细的执行统计、缺陷分布、遗留问题清单。执行统计部分用表格呈现更清晰计划用例数、执行用例数、通过数、失败数、阻塞数、未执行数以及对应的通过率。通过率这个数字要谨慎使用因为它容易被误读。比如通过率 95% 看起来很好但如果剩下 5% 全在核心链路上风险就很高。所以我通常会在通过率后面补一句未通过用例集中在 XX 模块其中 X 条为 P0。缺陷统计部分我一般放三个维度按模块分布、按严重程度分布、按状态分布。这三个维度能回答不同的问题——按模块看哪块质量最差按严重程度看整体风险有多大按状态看还有多少没修。7.2 缺陷报告和测试报告不是一回事测试报告是阶段性的整体总结缺陷报告是针对缺陷的整体分析。很多人把这两个混在一起结果报告里既有版本结论又有缺陷清单读起来很乱。缺陷报告我更关注几个趋势性指标缺陷密度缺陷数除以用例数或功能点数用来横向比较模块质量缺陷收敛趋势按天统计新增缺陷数正常情况应该随着版本推进逐渐下降如果一直在高位甚至上升说明质量还没稳定首次修复率开发第一次修复就成功的比例这个指标反映开发对缺陷的理解程度和自测质量缺陷重开率验证不通过被打回的缺陷占比偏高说明修复质量或沟通有问题缺陷发现阶段分布如果大量缺陷在系统测试后期甚至上线后才发现说明前期评审和单元测试环节薄弱这些指标不需要每次报告都全放挑两三个能说明当期问题的就够。指标的价值在于引出行动不在于展示。7.3 遗留问题怎么描述才算清楚版本末期总有那么几个来不及修的缺陷怎么描述遗留问题直接影响上线决策的质量。我坚持每条遗留问题都要写清楚四件事现象是什么、影响范围有多大、有没有绕行方案、如果不修的最坏后果是什么。举个例子一条遗留缺陷可以这样写商品列表页在弱网环境下图片加载超时后不显示占位图仅影响展示体验不影响下单链路用户下拉刷新后可恢复。建议下个版本修复本期可上线。这样写决策者一眼就能判断风险是否可接受。反过来如果写成列表页图片偶现不显示待修复决策者完全无法判断严重性要么盲目上线承担风险要么一刀切延迟发布浪费资源。8. 常见问题速查与踩坑记录8.1 高频问题速查表下面这些问题都是我在项目里反复遇到的整理成表格方便对照。问题现象常见原因处理思路执行到一半需求变更需求管理流程不严评估影响面重新确认优先用例变更留痕开发说这不是缺陷需求表述不清或理解偏差拉上产品确认以需求文档为准结论归档缺陷复现不了数据、时序或环境差异记录环境和操作路径观察复现概率暂缓不要硬关时间不够用排期估算过乐观按优先级砍 P2、P3明确记录未覆盖范围并同步风险环境频繁不可用环境缺少专人维护建立环境状态群问题公开同步影响工期时同步项目负责人回归范围定不下来缺少变更影响分析让开发给出改动点清单按改动点推导影响面上线后才发现漏测覆盖度检查缺失复盘时对着需求追溯矩阵一条条核对补进用例库用例库越来越臃肿缺少裁剪机制每个版本后清理失效用例打标签管理回归集8.2 几个我想单独强调的经验第一测试流程的价值不在流程本身而在于它逼你把不确定性提前暴露。需求评审逼你想清楚异常场景用例评审逼你去掉模糊表述缺陷报告逼你把现象翻译成可定位的信息。任何一个环节偷懒成本都会在后期以更大的形式还回来。第二证据意识比技术能力更早决定你的上限。一条缺陷单里有日志、有请求响应、有复现步骤开发处理起来快你也省事。反过来一条没有证据的缺陷单往往要经历开发说复现不了—你重新试—开发说不是问题—你找产品确认的漫长循环。第三别把自动化当成万能药。自动化的收益来自重复执行如果某个用例只跑一次写脚本的时间远超过手工执行。判断标准很简单这条用例在后续版本里会被重复执行三次以上就值得自动化只是临时验证一次的逻辑手工更快。第四给自己留复盘时间。每个版本结束后花一个小时对着需求追溯矩阵和缺陷库过一遍这个版本漏测了什么为什么漏用例库该怎么补。这个动作看起来不产出任何交付物但它是测试能力增长最快的方式。我自己的用例设计能力基本都是靠一次次复盘堆出来的而不是靠看多少教程。流程这东西说到底是一套让团队在对的时间做对的事的约定。八个环节里任何一个环节的产出质量都会顺着链条往下传。需求拆得粗用例就写不细用例写得糊执行就全靠感觉执行没证据缺陷定位就变成扯皮缺陷统计不准报告就失去参考价值。把每个环节的颗粒度守住测试这件事才算真正做得踏实。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →