ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

软件测试基本流程详解:从需求评审到线上验证的完整指南

软件测试基本流程详解:从需求评审到线上验证的完整指南 1. 从“会点点点”到“懂流程”这件事的分量刚入行那会儿带我的老测试递给我一张纸上面画着一条从上到下的流程线需求评审、测试计划、用例设计、测试执行、缺陷管理、测试报告。他跟我说“照着这个走别自己发挥。”我当时心里挺不屑的觉得这不就是走个过场吗用例写那么多最后不还是手工点点点bug该来的还是会来。直到后来我在一个项目里吃了大亏——因为跳过了需求评审、自己闷头设计用例结果上线前才发现我对某个模块的理解跟产品经理差了十万八千里整个测试方案推翻重来连续加了一周班。从那时候起我才真正意识到软件测试基本流程不是贴在墙上的装饰而是一套经过无数次教训沉淀下来的质量保障框架。这篇文章就是围绕“软件测试基本流程”这条主线展开的。不管你是准备转行测试的应届生还是刚入职场的初级测试工程师或者正在准备软件测试面试、刷“八股文”的求职者这套流程都是你绕不开的地基。它能让你明白测试项目从头到尾应该怎么推进每个阶段该做什么、不该做什么以及为什么很多公司把流程意识放在测试技能之前。我会结合自己带项目和面试候选人的经验把每个环节掰开揉碎了讲也会穿插一些面试题里高频考察的点读完你不仅能复述流程还能理解每个动作背后的逻辑。2. 测试流程全貌与需求分析阶段2.1 一套标准测试流程都有哪些环节先给第一次接触测试流程的读者一个整体的地图。在绝大多数软件公司里一个标准的测试流程大概包含这几个环节需求分析与评审、测试计划制定、测试设计与用例编写、测试环境准备、测试执行、缺陷跟踪与管理、测试报告与上线评审、回归测试与线上验证。有的公司用的是传统瀑布式流程需求全部确认完后测试才进场也有的公司是敏捷迭代式的测试从需求阶段就参与每一个迭代周期都跑一遍“计划—设计—执行—报告”的环路。但不管项目形态怎么变底层逻辑是一样的测试活动要贯穿整个开发生命周期而不是最后上线前的一锤子买卖。这背后的核心原因值得展开解释一下。软件缺陷有一个很经典的成本放大规律同一个bug如果在需求阶段发现修复成本可能只是一个小时的工作量但如果到了线上生产环境才被发现可能需要回滚、修复、发版、给用户道歉成本会放大几十倍甚至上百倍。所以流程的第一步永远不是写用例而是确保测试人员尽早介入在需求和设计阶段就开始投入质量活动。2.2 需求评审测试人员为什么要死磕需求很多刚入行的测试同学觉得需求评审是产品和开发的事自己坐在角落里听一听就算参与过了。这个观念必须改。需求评审是整个测试流程里投入产出比最高的质量活动没有之一。在需求评审阶段测试人员要做的事情不是被动听讲而是从测试视角审视需求的完整性、一致性、可测性和二义性。举个例子我曾经参与过一个后台管理系统的需求评审需求文档里写了“超级管理员可以配置所有角色的权限”但是没说清楚“所有角色”包不包括超级管理员自己。如果我们不做任何质疑就进入开发后面可能出现两种情况要么超级管理员把自己权限搞没了要么权限系统对超级管理员做了特殊的绕过处理结果跟需求描述完全不一致。这就是典型的需求二义性。在需求评审中测试人员应该重点问这几个问题这个功能的具体业务规则是什么输入输出的边界在哪里异常场景有多少种需求里是否考虑了网络中断、重复提交、数据不存在等异常路径非功能需求性能、安全性、兼容性是否明确比如并发用户数多少、支持哪些浏览器版本依赖关系是否清晰当前功能是否依赖其他系统或第三方接口这些依赖是否已就绪需求评审的产出物不是“通过评审”四个字而是一份评审意见记录。每一条意见都要有明确的处理和答复不能出现“会上聊了但没人记下来”的情况。因为漏掉的那一条到了测试执行阶段就会变成一个悬案你无法判断它到底是预期行为还是缺陷。2.3 需求分析怎么做能直接指导测试设计需求评审通过之后测试人员手里有了一份相对稳定的需求接下来要做的是需求分析——把需求文档转化为测试设计可以使用的输入。我常用的方法是画业务流程图和数据流图。比如一个电商下单功能需求文本可能有一万多字但真正指导测试设计的是那张业务流转图用户选择商品→加入购物车→提交订单→支付→系统回调→发货。每个节点是分支还是合并异常路径从哪里出去这些画清楚了后续的用例设计自然就有骨架了。还有一个很实用的小技巧把需求中的名词、动词、状态列成清单。名词往往对应测试数据比如“订单号”、“用户ID”、“商品库存”动词往往对应操作比如“提交”、“审核”、“取消”状态则对应业务状态机比如“待支付”、“已支付”、“已发货”、“已取消”。这一张清单做下来之后你几乎不用拍脑袋就能知道哪些地方最容易出bug状态的非法迁移、操作的前置条件不满足、数据的异常形态。在需求分析阶段还应该把每个需求点按照优先级维度做个简单的标注P0是核心主链路不实现或实现错误直接影响核心业务P1是重要功能异常但不影响主流程P2是边缘功能或体验优化。这个优先级标注会直接决定后面测试执行阶段用例执行的顺序和回归测试的范围越早想清楚越从容。3. 测试计划设计与用例编写方法3.1 测试计划包含哪些核心要素测试计划是测试流程中的“作战地图”。很多测试新手觉得计划就是写一个文档交差内容无非是“时间从周一到周五、资源是两个测试一个开发”这种认知是比较危险的。一份真正有用的测试计划至少要回答清楚这几个问题测试范围是什么、里程碑怎么排、资源怎么分配、风险有哪些、准入准出的标准是什么。首先说测试范围。一个项目往往有新增功能、修改功能和未变更模块三类范围。如果分不清楚这三者就会出现两种极端要么只测新增部分上线后老功能挂了要么全量回归测试时间不够用项目延期。合理的策略是新增功能全量测修改功能重点测未变更模块做冒烟验证。这个策略要写进计划里并且跟项目组达成一致。再说时间排期。这里有个实用的估算方法先把测试需求拆成功能点预估每个功能点需要的用例数再根据历史执行速度反推人力需求。比如某个功能点拆出来大约需要80条用例一个熟练测试人员一天能执行60到100条用例再加上缺陷验证和回归的损耗可以估算出大概需要1.5天。如果项目有多个人并行再考虑任务分配的合理性。这种估算方式比拍脑袋靠谱得多面试问到“你怎么评估测试工作量”时这也是一个比较完整的回答思路。3.2 用例设计的常用方法附登录功能实例测试用例设计是整个流程中技术含量最高的一环。业界常用的方法有等价类划分、边界值分析、场景法、判定表法、因果图法和正交试验法等。对于初学流程的人来说最先要掌握的是等价类划分和边界值分析这两个方法组合起来能覆盖到大约80%的功能测试场景。用一个最经典的登录功能来演示。假设需求是“用户名长度为6到18位由字母和数字组成密码为8到20位”。用等价类划分有效等价类6到18位字母数字组合的用户名、8到20位的密码无效等价类用户名小于6位、大于18位、包含特殊字符、包含空格密码小于8位、大于20位、纯数字、纯字母边界值分析的思路则是重点测试临界值附近的场景用户名长度为5、6、7、17、18、19位密码长度为7、8、9、19、20、21位。边界值用例往往能发现那些只在临界条件下才会出现的缺陷比如数据库字段长度限制导致的截断不报错问题。场景法用在业务流程性较强的模块上。比如下单流程可以拆出主成功场景正常下单并支付、备选成功场景使用优惠券下单、异常场景支付超时后重试、库存不足跳转、失败场景余额不足导致订单取消。场景法的核心是覆盖业务路径而不是每一条数据组合。再补充一个在工作中很有效的经验用例不仅要写正常步骤还要写前置条件和预期结果。很多新手写的用例“点登录按钮能登录成功”看起来没错但完全没有可执行性。合格的用例应该是“在用户名为合法账号、密码正确的前提下点击登录按钮页面跳转到首页右上角显示当前用户名同时本地存储包含token字段”。有了明确的前置条件和预期结果这条用例才具备可追溯性和可执行性执行的人才能做出明确的Pass或Fail判断。3.3 用例评审从“自己写爽”到“大家认可”用例写完之后不要直接进入执行先过一遍用例评审。在不少团队里用例评审是走形式评审会上没人说话散会后各干各的。但用例评审恰恰是发现测试盲区的好机会因为你一个人对业务的理解是有限的开发、产品、其他测试同事都可能捕捉到你没考虑到的场景。我的做法是评审前先把用例文档发出去让大家带着问题来开会而不是现场读文档。评审时重点过三类内容一类是P0核心链路的用例是否充分覆盖二类是异常和边界场景是否遗漏三类是跟其他模块的交互是否考虑到了。评审会上不要纠结用例的措辞和格式这种问题私聊解决就行了。一个比较常见的误区是用例评审后就“冻结”了不允许再修改。实际项目中需求变更是常态用例也应该跟着需求变更做迭代维护。但每一次变更最好做一次影响分析这个需求变化影响了哪些用例需要新增多少条用例原有用例中哪些已经无效需要删除只有在动态维护中的用例才有生命力写完就丢的用例文档最终会变成一纸空文。4. 测试执行与缺陷管理实录4.1 测试环境搭建与版本准入测试执行不是拿到代码就开始点点点首先要解决“在哪测”和“测什么版本”的问题。测试环境搭建看起来是运维和开发的活但测试人员必须亲自检查环境就绪状态否则测试执行中会出现大量“无效执行”。我踩过的一个经典坑是开发说代码已经提交测试环境了我上去一测发现功能完全没有变化折腾了半天才发现版本没有部署成功我测的是上一版。从那之后我坚持在测试执行前先检查三样东西测试环境部署的版本号或提交号是否跟提测单一致依赖的中间件和服务是否全部在线测试数据库是否有正确的初始化数据。这三点检查做完通常能避免一大半的环境类假bug。测试数据准备也是执行阶段的重头戏。在很多业务系统里测试数据不是随随便便造几条就能用的比如支付类项目需要准备不同状态的订单数据、退款数据、对账单数据权限系统需要准备不同角色不同数据范围的数据。我的习惯是建一个数据准备清单把每个功能模块需要用到的典型数据列出来并且配套对应的SQL脚本或造数工具。这样不仅自己执行效率高同事接手时也能快速上手不会出现“我这边缺这个状态的数据所以测不了”的尴尬。4.2 用例执行顺序与执行记录测试执行阶段用例执行的顺序是有讲究的不是拿到什么执行什么。我一般会先执行冒烟测试用例集——也就是最核心的主链路用例。冒烟测试的目的是确认“这个包基本能用值得继续投入人力去深入测试”。如果冒烟不过可以直接打回给开发根本不用往下执行这样能节省大量时间。冒烟测试通过后按优先级执行先P0后P1最后P2。P0用例通常对应核心业务主流程比如电商的下单支付链路、积分的到账链路、视频的上传转码链路。这些用例优先级最高因为它们决定了系统的基本可用性。P0执行过程中发现的bug一般也是最严重的需要第一时间通知开发和项目经理必要时甚至可以考虑暂停测试等待修复。执行记录是测试执行阶段最容易忽略的一块。有些测试同学习惯“心里有数”测完一条用例觉得没问题就直接翻到下一条这是很危险的。因为你当时觉得“没问题”的判断过几天就可能完全不记得了一旦线上出现问题你连“这个功能当时测过吗”都回答不上来。我建议用测试管理工具比如禅道、TestRail、Jira 插件逐条记录执行结果。每条用例执行后至少要更新状态、实际结果、失败原因涉及缺陷的要关联对应的缺陷编号。这不仅是合规要求更是后期写测试报告的数据基础。4.3 缺陷的生命周期与管理要点缺陷管理是测试执行阶段最核心的输出。一个标准的缺陷生命周期大概是这样New新建→ Open开发确认并修复中→ Fixed修复完成→ Closed测试验证通过关闭中间还会穿插Rejected开发拒绝、Duplicate重复缺陷、Not Reproducible无法复现、Deferred延后处理等状态。新手最容易犯的错误是缺陷描述写不清楚。我见过不少bug单写着“点击按钮没反应”然后下面就没有然后了。这种bug单开发根本没法处理来回问几次之后就会把你拉到不信任名单里。一条高质量的缺陷记录至少应该包含这些信息标题简明扼要地描述问题现象最好带上模块名和触发条件比如“登录模块-未注册手机号登录时提示信息不正确”前置条件测试数据的准备情况、系统权限设置、账号信息复现步骤从打开页面开始一步一步描述到问题出现为止越精确越好实际结果当前观察到的行为期望结果根据需求文档应该出现的行为附件佐证截图、录屏、日志文件、接口返回报文等关于缺陷的优先级和严重等级各个公司的定义不太一样但通常都会分两维严重程度对系统的影响范围和优先级修复的紧急程度。测试人员负责提报但最终是否修复、什么时候修复是由项目经理和开发负责人综合决策的。这里有一个处理负面情绪的问题测试人员容易认为“我提交的bug开发必须马上修”但在实际项目中有些bug会被延后处理甚至挂起背后的原因可能是缺陷影响面小、修复风险大、或者优先级跟当前迭代目标冲突。成熟的测试人员要学会接受业务决策同时要做好风险评估——如果挂起的缺陷可能导致线上问题一定要在测试报告中明确提示。4.4 提测质量差怎么办如何跟开发沟通开发提测的质量差几乎是每个测试人员都会碰到的问题。一个很典型的场景开发提前半天告诉你“代码提测了”你上来一跑冒烟第一条用例就挂了再跑一条又挂了。这时候如果你直接发消息说“这代码太烂了测不了”大概率会引发一场沟通灾难。我自己的处理方式是先量化再沟通。把冒烟测试执行的结果整理出来总共执行了10条用例其中6条失败失败原因包括登录接口500、订单状态不更新、列表数据为空等。然后把这份结果发到项目群里同时艾特开发叫上项目经理一起开会明确“当前提测版本未达到准入标准需要开发修复后重新提测”。这种方式不是在推卸责任而是用数据说话让项目组看到问题的客观存在。重新提测之后建议追加一次“提测质量复盘”分析为什么会有这么多低级错误。是代码自测流程缺失是开发环境跟测试环境不一致还是对需求理解有偏差这些根因找到并解决掉后续的提测质量才会真正提高。不要觉得复盘是测试份外的事测试人员的价值本来就不只是找bug而是帮助团队持续改进交付质量。5. 测试报告、回归与上线验证5.1 测试报告怎么写才不是流水账测试执行基本结束后需要提交一份测试报告这是整个测试流程的阶段性成果总结也是对“这个版本能不能上线”这个问题的直接回答。很多测试报告写得像流水账列一堆用例数、通过率、bug数就草草收场这样的报告其实没多大价值。一份能打的测试报告至少应包含以下内容测试概况版本号、测试范围、测试时间、用例统计总用例数、执行数、通过数、失败数、阻塞数、缺陷统计按严重程度分布、按模块分布、缺陷状态、遗留问题清单、风险评估和测试结论。缺陷统计不能只堆数字要带分析。比如累计发现50个bug其中20个分布在支付模块这个信息本身就说明支付模块的复杂度高、质量风险大需要在报告中特别提示。再比如缺陷趋势图——测试前期的bug数和测试后期的bug数变化趋势如果测试到最后一周还有大量新发现的P0级bug那显然不是一个可以上线的状态。测试结论部分要明确给出建议建议通过、有条件通过或者建议不通过。很多测试新人在给结论时总是模棱两可觉得“万一上线出问题怎么办我就负责任了”。但测试报告的价值恰恰在于给出清晰的判断和建议至于最终拍板的决策权永远在项目经理和业务方手里。你给出专业判断他们做业务决策这才是健康的分工。5.2 回归测试的范围怎么定回归测试是测试流程里最容易被低估的环节。很多项目时间紧回归测试直接退化成“把所有用例再跑一遍”这既不现实也不科学。合理的回归策略应该是基于变更影响分析的结果来决定范围。举一个具体例子某系统修改了用户信息存储的字段类型从字符串改成了JSON格式。从功能表面看用户编辑资料页面看起来没变但这个字段可能被搜索模块、报表模块、消息通知模块同时引用。如果回归只测了编辑资料这个页面那搜索不出来、报表统计错误、消息通知展示乱码这些问题就会漏到线上。所以变更影响分析的核心是弄清楚“改了这一行有没有可能影响其他模块的输入输出”。常用的方法是列出变更点然后根据代码调用链、数据流向和业务依赖来推断受影响的模块清单。回归测试的执行顺序建议是先冒烟后全量。先跑一遍核心链路冒烟确认系统基本功能可用然后针对变更影响范围内的模块做重点回归最后如果时间充裕再执行全量回归。分层回归的好处是能快速暴露严重问题避免在某个模块深挖很久后才发现另一个模块已经挂了。5.3 线上验证流程的最后一公里上线不等于测试结束。线上验证是测试流程的最后一公里很多严重问题就是在线上环境才暴露出来的因为线上环境和测试环境存在差异——数据量不同、网络环境不同、依赖的第三方服务版本不同。线上验证通常做两类事一类是功能验证确认核心交易链路在真实环境下可用一类是监控验证检查日志、告警、性能指标是否正常。我一般会准备一份线上的冒烟检查清单涵盖最重要的用户路径比如登录、搜索、下单、支付、数据回传。验证时注意观察接口响应时间、异常率、错误日志而不是只看页面是否正常展示。线上验证阶段要预留回滚方案。如果上线后发现了紧急问题是先止血回滚或降级还是先排查根因这个决策需要提前跟团队约定好。测试人员在线上验证时发现了问题第一时间要做的是记录影响范围而不是着急去查代码要尽快同步给开发和运维团队让大家一起评估影响面再决定后续动作。6. 常见问题与面试避坑经验6.1 测试流程相关的面试高频追问准备软件测试面试的时候很多人把精力放在刷测试理论和工具命令上但“软件测试基本流程”这个基础问题反而容易忽略。面试官问“讲讲你对测试流程的理解”不是在考你能不能背出那几个阶段名字而是要听你如何把流程跟实际项目结合。一种比较高分的答法是结合项目来讲。比如你可以说“我在XX项目中负责XX模块的测试需求评审阶段我提出了XX问题并推动产品确认了规则计划阶段我通过功能点拆解估算了时间用例设计阶段我用了等价类和场景法设计了大概200条用例执行阶段发现40个bug其中P0级别的有3个集中在XX接口推动开发三天内修复上线前做了基于变更影响分析的分层回归上线后执行了线上冒烟检查确认核心链路正常。”这样一段回答下来面试官不仅看到你对流程的熟悉程度还看得到你的工程实践能力。还有一个高频追问是“如果测试时间不够你会怎么办”。这个问题的考察点不是“你能不能加班”而是“你会不会做风险管理和优先级决策”。合理的回答思路是先把测试范围按优先级重新排序核心链路优先保证再评估哪些用例可以降级为探索性测试或抽查最后把风险数据和剩余测试建议明确反馈给项目经理由项目组一起决策上线时间是否调整。千万不要直接说“那我就少测点”也别说“我加班全测了”这两种回答都是在错误的路子上狂奔。6.2 流程执行中的典型坑位流程这个东西懂的人觉得它有章法不懂的人觉得它是束缚。在实际项目里流程执行最常见的坑位是形式化。需求评审开了但没人真正思考用例写了但没人真正执行测试报告提交了但没人真的看。一旦流程变成了应付流程的动作它就不再有质量保障的意义反而会让团队成员觉得“流程耽误时间”。要避免形式化的坑我的做法是让每个环节产生真正可消费的交付物。需求评审的交付物是评审意见和处理结果用例设计的交付物是能执行出结果的用例测试报告的交付物是能指导上线决策的风险判断。如果某个环节你拿不出对这个判断有用的交付物这个环节要么没有做对要么根本还没有认真做。另一个常见的坑是忽略测试数据的准备。很多项目在测试执行阶段才发现造数困难比如支付平台需要一整套包含不同交易状态的订单数据没有这些数据相关用例全部阻塞。造成这个问题的原因通常是在计划阶段没有把数据准备当成一项明确的测试任务。我建议在测试计划里专门加一个“测试数据准备”条目列出需要的数据类型、造数方法、负责人和完成时间并且把它当作前置任务来跟踪。6.3 从流程到思维测试人员的进阶路径把软件测试基本流程跑熟只是测试生涯的第一步。流程的作用是提供一套基本的做事框架让你不漏掉关键的测试活动。但在流程之上真正的测试能力体现在两个地方风险评估的能力和业务洞察的能力。风险评估的能力可以这样理解当项目组问你“这个版本能不能上线”的时候你要能根据测试数据、缺陷趋势、遗留问题的影响面迅速给出一个可信的判断。这种判断力不是凭空来的是建立在一次次对测试数据的分析和对业务的理解之上的。比如你清楚地知道某个遗留bug的影响范围仅限于管理后台的某个非核心列表页的排序功能不会影响线上用户的正常使用那你就敢跟着项目经理一起签字上线。业务洞察的能力则体现在你能否站在用户的角度去思考问题。很多资深的测试人员在执行用例之余会自己“乱点”产品模拟真实用户的使用习惯去发现那些用例没有覆盖但用户一定会碰到的场景。这种探索性测试往往能发现不少“正式测试发现不了”的问题而且这些问题往往从用户视角来看价值极高。最后千万别把流程跟灵活性对立起来。敏捷开发里测试流程一样存在只是节奏不同需求评审变成了用户故事澄清计划变成了迭代规划报告变成了测试总结和回顾。流程的骨架是一样的变的只是交付节奏。理解了这一点你在任何类型的团队里都能快速适应。7. 写在最后流程是骨架思考才是灵魂再次回到开头那个画面我的老测试把那张画着流程线的纸递给我的时候我以为是让我照着流程干活后来才明白他是在让我照着流程思考。流程的意义不在于规定你要在第几天做什么事而在于提供一个思考框架让你在每个阶段都知道当前最重要的问题是什么。在我的职业生涯里测试过银行系统、电商平台和嵌入式设备这些领域的业务逻辑千差万别技术栈也完全不同但测试基本流程的内核始终没有变过尽早介入、结构化设计、系统化执行、基于数据做判断。把这一点想通透之后你再看那些五花八门的测试理论、工具和框架都会觉得它们只是在为流程中的某个环节提供某种更好的实现方式而已。如果你现在正准备入行或者面试我的个人建议是先把流程刻在脑子里然后找一个真实或虚构的项目自己动手把每个阶段的产品物完整地走一遍——需求分析时你能提出几个问题、测试计划时你能估算多少工作量、用例设计时你能写多少条有效用例、遇到开发不认bug时你如何有理有据地沟通。这些练习不需要环境、不需要工具只需要一颗愿意琢磨的心但它们在面试中的效果远比背一百道八股文要好得多。
返回列表