十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

软件测试五道关:从需求澄清到测试报告的完整指南

软件测试五道关:从需求澄清到测试报告的完整指南 前几天有位同事甩了个文档给我标题写着“测试文章标题01”正文是空的就一行占位符。他说组长让他牵头整理一份测试团队的能力清单模板建好了自己却对着空白页发了半天呆。我说这太正常了测试这行看着天天在跟需求、代码、bug打交道真让你从零梳理一套东西很多人照样两眼一抹黑。所以这篇就把测试从起点到交付要过的五道关——需求澄清、用例设计、测试准备、缺陷管理、测试报告——完整捋一遍照着这个顺序走你就知道下一步该干什么。不管你是刚转行做测试的新人还是被“一句话需求”折磨的开发、产品和项目负责人这篇都能当个手边的参考。1. 从一行占位符到可落地的验收标准需求澄清的实用方法1.1 别急着写用例先把需求人脑子里的画面逼出来占位符只是极端情况更多时候需求看起来写了不少其实关键信息全在需求方脑子里。你问他“这个功能到底怎么算成功”他大概率会说“能用就行”。把“能用就行”翻译成可测试的验收标准才是测试真正要在需求阶段做的事。我的习惯是拿到任何一份需求先不急着设计用例而是按下面这组清单去追问问完再动手使用对象是谁是内部管理员还是外部客户这决定了操作路径和权限设计。从哪里进入这个功能入口不同前置状态就不同有些功能在A端能用在B端压根不展示。操作成功的标志是什么页面提示、数据落库还是接口返回特定状态码操作失败的提示怎么给是统一弹窗还是在对应输入框下面红字提示数据规则是什么唯一性、长度、格式、是否允许为空每一项都要有明确约束。异常分支谁负责网络超时、重复提交、并发操作产品文档里通常不会写但测试必须问。别小看这六个问题很多测试用例写得不痛不痒就是因为这些信息没逼出来。比如一个“用户修改昵称”的需求看起来一句话实际上涵盖昵称长度限制、敏感词校验、重复昵称提示、修改频率限制、是否同步到所有端等多个维度。你不问清楚到时候上线前才发现规则没定返工的就是你自己。还有个容易被忽略的点需求评审会上人多嘴杂关键结论一定要当场记下来会后发到群里让所有人确认。不要觉得“当时他们都点头了肯定没问题”点头和签字是两回事。有一次我因为一个“导出条数上限”的需求细节没在会后确认开发按1000条做产品想要5000条上线前才发现只能临时改代码整个版本延期。白纸黑字写下来是对所有人的保护。1.2 把模糊描述拆成三层验收标准需求澄清的结果最好沉淀成一个所有人都能看懂的三层结构。第一层是业务流说明用户从哪进来、走哪些步骤、最终得到什么第二层是功能点把业务流拆成具体可操作的功能第三层是规则细节把每个功能点的输入约束和输出结果写死。举个例子“订单导出”这个需求业务流就是“在订单列表页点击导出选择条件生成文件”功能点包括“导出权限控制、条件筛选、导出格式选择、异步生成通知”规则细节则需要明确“一次最多导出多少条、文件名如何生成、导出超时多久、文件保留多长时间”。这三层写清楚需求和开发之间的理解偏差会大幅缩小测试用例的骨架也就自然出来了。我实际经历过一次事故订单导出功能上线第一天有运营人员一键导出了全量订单大概二十多万条数据直接把数据库连接池打满导致整个订单服务不可用。复盘时才发现需求文档里只写了“支持导出”没有写“单次导出数量上限”和“导出前二次确认”。这种问题在测试阶段其实完全能拦下来前提是三层验收标准拆得足够细。后来我在所有涉及批量操作的模块里都默认加一条规则检查有没有上限控制、有没有防重复提交、有没有超时兜底。哪怕需求方不说测试也要主动问这是对自己负责。2. 用例设计不是背概念等价类、边界值和场景法的实战落法2.1 等价类划分把无穷输入变成几组代表性样本刚入行的时候我也觉得等价类划分就是考试题。后来真正干活才意识到它是唯一能让你从“测不完”里解脱出来的方法。所谓等价类就是把输入数据按照“测其中一个就相当于测这一类”的原则分组。关键是分组维度要想全比如用户名的校验常见的维度至少包括长度、字符类型、是否为空、是否重复、是否含特殊字符、是否含空格。每一维里都有自己的有效类和无效类。实际做的时候我会先在Excel里建一张表列分别是“字段、规则、有效等价类、无效等价类、预期结果”。然后对着每一条规则填写。比如密码长度6到20位有效等价类就是“7位合法密码、20位合法密码”无效等价类就是“5位、21位、空值、全空格”。这样写出来的用例覆盖质量要比随手点一点高得多。这里有个容易犯的毛病等价类分组只看“输入值”忘了看“输入方式”。同一个字段可能有手动输入、粘贴输入、扫码输入、接口调用等多种方式不同方式的处理逻辑往往不一样。比如手机号字段手动输入时做了格式校验但通过接口批量导入时却可能跳过了校验结果导入了一堆脏数据。分组的时候把输入方式也当作一个维度能发现更多隐藏问题。2.2 边界值要盯着“开区间”和“闭区间”看边界值不是把最大值最小值各测一遍就完事核心是搞清楚输入范围的边界开闭。同是“6到20位”到底是包含6和20还是不包含很多后端校验和前端校验不一致问题就出在边界理解上。我的做法是一个边界点至少要测四个值边界本身、边界减1、边界加1、边界附近的值。如果是6到20位那就是5、6、7、19、20、21六个用例。重点不是数字而是你要在用例里明确写出每个值的预期结果。比如20位密码应该通过21位应该报错。如果开发实际用的是“小于等于20”而不是“小于21”一旦规则改成20位以内这类bug马上就会露头。边界值不只是数字还有字符串长度、文件大小、金额精度、日期范围。比如优惠券的有效期很多测试只测了开始日期和结束日期当天没测结束日期第二天、开始日期前一天。结果上线后用户前一天就能用券因为代码里写的是开始时间小于当前时间而不是小于等于。日期这种边界真的要多留几个心。2.3 场景法补的是链路探索性测试补的是意外等价类和边界值覆盖的是单个输入但用户从来不按单点操作。场景法的价值在于把多个功能点串成一条完整的操作路径。设计场景时我习惯走四条线正常流用户按预期完成操作、备选流用户走第二条路径完成操作、异常流操作中途失败比如网络中断、逆向流用户做不该做的操作比如重复提交订单。每条流对应1到3条用例基本就能覆盖主链路。探索性测试很多团队做得不够总觉得“没有用例心里没底”。我的经验是固定留出总用例编写时间的20%做自由探索不按脚本走专门去点那些看着不顺眼的地方。很多线上问题不是用例设计出来的而是探索性测试试出来的。比如连续快速点击提交按钮、切换网络后再刷新页面这类操作脚本里很难覆盖全但手一快就试出问题了。做探索性测试也有方法不是瞎点。我会给自己限定一个时间盒比如一个模块40分钟前20分钟梳理流程后20分钟专门破坏。破坏手段包括连着点同一个按钮五次、输入超长文本、把手机横屏竖屏来回切、后台杀掉App再进来、弱网环境下反复提交。这些操作都不难但非常考验耐性。探索性测试的重点不是“测完了多少条用例”而是“记录下了哪些不符合预期的地方”。3. 测试计划、环境与数据动工之前必须扫清的三块绊脚石3.1 出口标准怎么定才不会变成墙上的口号测试计划里最容易被忽略也最关键的是“出口标准”——也就是满足什么条件这个版本才算测完。常见的错误是写成“所有用例执行完毕、缺陷全部关闭”听着对实际等于没说根本没人执行。我更建议把出口标准拆成四条并允许有一条明确协商例外标准项具体要求说明用例执行率达到100%不能有“没跑完就上线”的情况严重缺陷致命和严重级别缺陷全部关闭或所有未关闭缺陷都有人签字确认风险核心路径核心业务路径全部通过不包含未验证的环节遗留缺陷全部有临时规避方案并在下一个版本有明确修复计划这四条虽然硬但每条都在回答“风险能不能接受”这个问题。上线追求的不是零缺陷而是把所有未关闭的风险都摆在台面上由能拍板的人做决策。写出口标准的时候一定要具体到数字比如“用例执行率100%”“严重缺陷0遗留”不然“基本完成”“差不多都测了”这种话执行的时候没人当回事。3.2 环境漂移连错库那次故障排查我记了三年测试环境有个特别坑的毛病没人改它它自己也在变。今天测试通过明天环境的数据被刷了、配置被改了用例就红灯一片。这就是环境漂移。有一回我排查一个“列表页偶现报错”的问题查了一个多小时最后发现是联调环境的数据库地址被另一个同事改成了测试库连接串变了。从此之后我每次用例执行前都会做三件小事检查被测版本号是否和计划一致确认数据库、缓存、对象存储等依赖环境指向正确跑一遍冒烟用例快速判断环境是否健康。这三件事花不了十分钟但能省掉后面大把的排查时间。环境问题还有一个坑多个测试同学共用一套环境互相影响。你做订单流程测试另一个人正好在跑定时任务把订单状态改了你的断言就失败了。后来我们规范了环境使用约定谁要动公共配置必须先在群里说一声跑定时任务的脚本统一走独立环境。环境管理看起来是运维的事但测试如果不管不问最后背锅的还是自己。3.3 测试数据构造的三种路线按场景选测试数据是另一个容易翻车的地方。造数据常见有三条路线直接连测试库写数据、通过接口批量造数、手工在界面造数。三条路各有各的适用场景。直接写库最快但容易漏掉业务规则只能用来模拟脏数据接口造数比较接近真实适合造正常业务数据界面手工造数最慢但最真实适合少量关键数据。我一般按场景混着来核心业务链路上的数据用接口或界面造确保完整特殊边界数据直接改库或写脚本节省时间需要大量基础数据时用数据工厂定时任务生成并清理避免污染环境。造数这件事一定要写脚本留档别总手动操作不然下次环境重建你又得重新造一遍。造数时还有个细节数据要带上标记方便识别。比如测试账号统一以test_开头测试订单的金额用一个比较特别的数字比如1888.88这样排查问题时一眼就能认出来。我见过有人用真实用户手机号造数据结果短信验证码发到了真人手机上差点引发投诉。测试数据管理这事看着小出了事就是大事。4. 缺陷管理从“报了个bug”到“报了个能定位的bug”4.1 缺陷单的黄金结构标题、步骤、日志、预期、级别很多开发讨厌测试不是讨厌测试这个角色而是讨厌那种看了三遍还不知道在说什么的缺陷单。“登录失败了”这种标题跟没报一样。一个合格的缺陷单至少要包含七要素标题、测试环境、前置条件、复现步骤、预期结果、实际结果、日志或截图。其中标题要写“在什么页面、做什么操作、出现什么结果”比如“订单列表页点击导出后未生成文件且无任何提示”复现步骤要按顺序编号每一步写明入口和输入值日志和截图一定要给尤其引入日志或者抓包数据时信息越全开发定位越快。缺陷处理速度一半取决于你缺陷单的质量。我见过最离谱的缺陷单正文就一句话“这个功能有问题你们自己看。”最后的结果是开发和测试在群里吵了一架缺陷单被关闭问题在下个版本又出现。测试要记住你报缺陷不是为了发泄情绪是为了推动问题被解决。写清楚一个缺陷最多花五分钟但不写清楚的代价可能是几个小时甚至整个项目延期。4.2 偶现问题怎么一步步变成必现问题“偶现”是测试报告里最麻烦的三个字。遇到偶现问题直接报上去开发大概率会标记“无法复现”然后关闭。正确的做法是先自己复现几轮尽量收集现场的上下文信息大概在什么操作之后出现、当时网络状态如何、用的什么账号、前置数据是否特殊、有没有规律性。我有个习惯把第一次发现问题的时间、现象和当时的操作路径写在本地备忘里哪怕当时没截图后续每次碰到都往同一处记录。积累到三四次规律基本就浮出来了。比如有一次突发性的“下单后回调失败”最初完全复现不出来后来回归记录发现全集中在用户手机网络切换到Wi-Fi后的几秒内才知道是网关超时重试机制的问题。没有前面这些记录这个问题很可能就被当作个例忽略了。对付偶现问题还有一个有用的手段把可疑环节的日志级别临时调到DEBUG加大日志输出让开发帮忙一起抓。很多偶现问题不是因为逻辑复杂而是因为日志不够出了问题看不到现场。提前把日志埋点做足能省掉后面反复复现的功夫。4.3 回归范围按“影响面风险区”圈别全量也别拍脑袋回归测试怎么做一直是测试用例执行阶段的争议点。全量回归最稳但成本太高拍脑袋圈一部分又怕漏。我更建议用两条维度来叠加判断第一条是被改动代码影响的范围比如订单模块改了影响的是整个订单流程第二条是历史缺陷密度高的区域比如支付模块这个版本已经出了5个严重缺陷回归时必须重点覆盖。再叠加业务优先级最终形成一个回归清单。优先级排序我会参考三个因素影响用户数量、影响金额大小、是否涉及核心转化路径。四个模块都要回归时先测支付和订单再测个人信息和消息通知成本不够时至少保住前两者。回归测试还有个容易忽略的问题只看自己的模块不看关联模块。比如改了用户积分规则可能影响商城的优惠券计算、订单的实付金额展示、退款时的积分退回。测试计划里就要列出关联模块清单让开发确认改动到底触及了哪些地方。做一次全面的影响面分析比多写两百条用例管用得多。5. 敢不敢上线就看这三个指标和一页纸结论5.1 三个指标比一堆复杂图表更有说服力测试报告写得花里胡哨一堆趋势图、占比图反而让人抓不住重点。我最终会看三个指标。第一个是用例执行率等于已执行用例数除以计划用例总数这个数字低于90%说明测试根本没做完谈不上上线。第二个是缺陷密度等于缺陷总数除以代码变更量或功能点数用来衡量这个版本的代码质量有多差。第三个是遗留风险我把所有未关闭缺陷按严重级别分列最终在报告里告诉决策层“有几个严重问题还开着每个的规避方案是什么”。这三个指标组合起来基本就能支撑一个结论这个版本从质量角度看可以上线、有条件上线还是不能上线。报告里最重要的一句永远是结论而不是一堆数字。有时候测试负责人不敢写“可以上线”怕出事背锅。我反而不这么想报告里写得越清楚越是保护自己。你把“支付模块有2个严重缺陷未关闭已确认不影响主流程但需要灰度观察”写得明明白白决策层签字上线后面出了问题谁都别想推给测试。怕写结论、含糊其辞才是真的给自己埋雷。5.2 一页纸测试结论怎么写才有人愿意看测试报告写十几页很少有人读完但一页纸的结论大家都愿意看。我会把测试报告压缩成一页纸结构版本信息、测试范围、执行情况、缺陷统计、遗留问题、测试结论。前四行用表格最后一栏写结论结论不要用“建议上线”这种模棱两可的说法而是直接写明当前存在的最大风险和对应责任人。比如我写过这样的结论“核心交易链路已全部验证通过支付模块尚有2个严重缺陷未修复已确认不是阻塞问题但建议先灰度放量10%观察1天再全量。”这样一句话比十页趋势分析图表有用得多。报告不是写给测试自己看的是写给做决策的人看的你给他他可行动的信息你的报告才有价值。写结论的时候记住一个原则不要写“我认为”“我觉得”要写“数据说明什么建议什么”。比如“用例执行率100%核心路径全部通过严重缺陷已清零可以正常上线”这种结论有数据支撑别人挑不出毛病。如果非要说主观判断就加一句“建议灰度观察24小时”这样既表达了态度又没有把话说死。我个人觉得测试这份工作的门槛不在工具用得多熟、代码写得多溜而在你能不能在混乱的信息里快速抓住关键点。从一行占位符到一个能上线的版本中间靠的就是这些基本功。以后再有人甩一个“测试文章标题01”给你别慌按需求澄清、用例设计、测试准备、缺陷管理、测试报告这条线走一遍你会发现自己早就不是当年那个对着空白文档发呆的人了。最后再分享一个小技巧每次版本结束花半小时把这次踩过的坑和风险点整理成一份复盘笔记不用很正式自己看得懂就行。积累三个版本之后你会慢慢发现很多问题是有共性的比如某些模块永远在出边界问题、某个开发写的接口总是漏校验。这些经验用钱都买不到但只要你肯记它们就是你测试生涯里最值钱的东西。
返回列表