ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

测试敏感度:从缺陷嗅探到质量判断的进阶指南

测试敏感度:从缺陷嗅探到质量判断的进阶指南 1. 一个看似矫情的日常瞬间暴露了测试人的真实状态前几天和朋友吃饭手机扫码点餐页面弹了个加载动画转了三圈才出来。我下意识地跟旁边人说这个弱网环境下居然没有超时提示接口超时设置肯定超过3秒了。朋友愣了半天回了句你这个人怎么这么敏感说实话这种话我听过太多次了。不是矫情也不是挑剔就是做测试做久了大脑里仿佛装了一套永远关不掉的检测系统。看到任何软件产品第一反应不是这个东西好不好用而是这个场景下它会不会出问题。逛电商平台下意识想看下单流程的状态流转用地图导航脑子里自动开始设计如果我在隧道里没信号会怎样的用例就连用计算器算个账都想试试连续按等号会不会有精度丢失。这个标题写的是原来测试做久了人真的会变得很敏感我太有共鸣了。这篇不是讲某个具体工具的教程也不是自动化测试框架的实战而是想聊聊测试这份工作如何一步一步改变了我们对世界的观察方式。这种敏感到底是什么它在工作里怎么体现它给我们带来了哪些好处又埋了哪些坑如果你正在做测试或者准备入行测试又或者身边有个整天没事找事的测试同事这篇内容应该能让你会心一笑同时也能看到这种敏感背后的专业逻辑。先声明一下我这里说的敏感不是性格上的多愁善感而是一种职业化的异常识别能力。就像厨师吃一口菜能尝出火候和盐量司机听一声发动机响能判断有没有异响测试的敏感是对软件系统中本该如此但实际没有如此的嗅探力。这种能力不是天生的是在无数个bug、线上故障、扯皮复盘里一点点磨出来的。2. 测试人的缺陷嗅觉到底在嗅什么如果要把这种敏感拆解开来我觉得核心集中在三个层面边界条件、异常路径、沉默的错误。这三个东西是普通用户永远看不到但测试人一眼就会警觉的角落。2.1 边界条件一切数字的极限都是事故高发区普通用户输入年龄填个30测试人员输入年龄先填0再填负数再填999然后试试小数、字符串、emoji、超长文本。这已经不是职业习惯了是刻进DNA的本能。我每次看到分页组件第一反应是总条数等于每页条数整数倍时最后一页会不会是空的看到金额输入框第一反应是0.00能不能提交0.001会不会四舍五入出问题超大金额会不会溢出。这种敏感在功能测试阶段帮我们抓到了无数低级但致命的bug。之前做过一个电商结算系统优惠券门槛是满100减10开发同学写的是if(totalAmount 100)看着没毛病。但我用边界值思路测了一张刚好100.00元的订单发现前端页面显示可用后端接口却因为浮点数比较精度问题返回了不满足使用条件。这种问题不卡在边界上永远测不出来。2.2 异常路径正常流程谁都会走异常流程才是分水岭我做测试这些年面试实习生的时候最爱问一个问题用户下单成功了但支付回调一直没回来这时候你觉得系统会发生什么能答上来的人天生就带测试的敏感答不上来的通常还停留在照着用例点一遍的阶段。这种敏感在工作中表现为看到一个操作按钮脑子里自动出现三连问——点了没反应怎么办点了两次怎么办点了之后断网怎么办。做接口测试时不只是验证200返回码还要反复模拟超时、重试、幂等、并发做页面测试时不只是看页面打开正不正常还想试试用户在页面还没加载完就点了提交会不会产生脏数据做移动端测试时连App切换到后台再切回来这种操作都不能放过鬼知道系统回收了内存之后会发生什么。2.3 沉默的错误比报错更可怕的是什么都不发生这个是我觉得测试敏感最深层的体现。刚入行的时候我以为测试就是找到那些会报错、会崩溃、有明显异常表现的问题。后来线上出了个事故某个定时任务静默失败了整整一周系统没有任何报错提示用户也没有投诉只是数据一直没更新直到运营去后台看报表才发现数据停留在上周。从那天起我对没有报错这件事本身产生了极大的不信任。现在我看到一个接口返回了200第一反应不是通过了而是200不代表正确只能代表服务器收到了请求。我会额外去验证这个200里面承载的业务数据对不对、状态字段是否符合预期、有没有本该被更新的时间戳没有更新。这种敏感说白了就是不轻信任何看起来正常的信号而是主动去确认它背后的证据链是否完整。做测试越久越会变成这种怀疑主义者。3. 从功能测试到测试开发敏感的内容在逐步升级刚入行的头两年我的敏感停留在页面和功能层面按钮颜色对不对文案有没有错别字流程通不通。但测试这行发展太快尤其是这几年自动化测试、接口测试、性能测试、安全测试全面铺开敏感的对象也在不断变化。我自己的感觉是测试的敏感大致会经历四个阶段每个阶段过敏原都不一样。3.1 第一阶段对功能实现的敏感——这么写用户会怎么用这个阶段的敏感很具体看到一个弹窗会想它能不能被正常关闭看到一个输入框会想它接了哪些输入看到一个流程会想中间断掉怎么处理。做手工功能测试锻炼的就是这个能力也是所有测试敏感的地基。这个阶段最值得培养的习惯是把自己当第一次用产品的傻子不要带任何先验知识去操作反而更容易发现新人用户会踩的坑。3.2 第二阶段对自动化稳定性的敏感——用例跑了但真的在验证吗开始接触自动化测试不管是appium还是selenium还是接口自动化框架之后敏感的对象变了。我现在看到一条自动化用例一跑就绿第一反应不是开心而是怀疑这个断言是不是没写对曾经维护过一个UI自动化项目页面结构改版之后定位元素的xpath早就失效了但用例还在绿——因为代码里某个断言写得有缺陷等于什么都没校验。这道坎几乎是所有自动化测试人员的必经之路。我现在的习惯是定期做用例破坏实验故意在代码里埋一个bug跑一遍自动化看能不能抓到。如果用例没有变红那这条用例本身就有问题。这个习惯听起来有点自虐但确实是检验自动化测试有效性的最直接办法。自动化测试做到后面敏感的不只是被测系统还有测试代码自身的质量。3.3 第三阶段对数据与链路的敏感——改了一个字段影响了几条链路做到中高级测试单独负责一个模块的点点点已经不够用了。我开始特别关注一个需求改动会影响哪些下游系统、哪些数据表、哪些接口。做接口测试和集成测试时最怕的就是只测了本服务接口返回正常没验证它写进数据库的数据格式是否符合下游消费方的预期。这种情况在微服务架构里尤其常见。有个真实案例A服务把某个字段的类型从int改成了string自己本地测试怎么调都是通的结果下游B服务做数值运算时直接抛了类型转换异常。所以我现在看到任何一个接口字段定义有调整大脑里会自动拉起一条依赖链这个字段谁在消费、什么样的数据格式会被接受、有没有可能传Null、历史数据需不需要兼容。这种链路敏感只能靠多踩坑、多参与架构评审慢慢积累。3.4 第四阶段对环境与风险的整体敏感——线上环境跟测试环境差了什么这几年开始做更多性能测试、可靠性测试、安全测试相关的事情敏感的范围又扩大了一圈。比如做性能测试时我会特别关注测试环境跟生产环境的差异——机器配置差多少、网络带宽是否一致、有没有经过网关、数据库连接池上限是多少。同样的接口生产环境可能扛得住300并发测试环境跑到200就超时了如果直接把测试数据当作性能结论上线之后必然出事。对环境的敏感还包括对测试数据本身的敏感。做渗透测试和漏洞测试时比如用pikachu这类靶场做练习要时刻清楚自己是在什么环境里操作哪些数据是可以造的哪些操作可能会影响他人。做车载测试和嵌入式测试时会更关心硬件状态、通信协议、时序逻辑这些软件之外的因素甚至一道CAN信号的电平偏移都能影响整个功能表现。4. 职业病入侵生活那些让人哭笑不得的脱敏失败现场如果说工作里的敏感是专业能力的体现那生活中的敏感就完全是职业病的外溢了。写过测试用例的人很难用普通用户的视角去享受一个产品。这些瞬间说出来有点像段子但每一位测试同行应该都能从中看到自己。4.1 看电影和追剧时注意力永远不在剧情上现在任何视频平台我看的时候都在留意片头广告的倒计时是不是精确的、清晰度切换的时候有没有缓冲失败、倍速播放时音画是否同步、拖动进度条后字幕会不会错位。有次看一部悬疑剧剧情到了最紧张的时候我突然说了一句这个进度条拖回去再拖回来会重新加载说明它没有做视频分片缓存旁边的家人差点把爆米花砸我脸上。4.2 点外卖和网购时控制不住去设计测试用例外卖App上我会反复切换配送地址看价格变化是否合理用优惠券之前先想这个满减叠加规则有没有写清楚会不会出现优惠后倒贴钱网购的时候看到库存仅剩3件会怀疑这是不是真的实时库存还是随便显示的营销文案。有一次我为了验证一个电商平台的搜索排序逻辑把同一个关键词用中英文、大小写、带空格不带空格分别搜了一遍最后得出结论——该平台的分词逻辑对英文关键词处理得不太好。然而我只是想买个手机支架。4.3 跟人聊业务需求的时候不自觉地在想异常分支这也是做测试最招人烦的地方之一。产品经理讲一个新功能讲得热血澎湃我第一反应永远是用户如果在这个页面点了浏览器的返回键会怎样如果支付的时候余额不足中断之后重新进入状态是继续支付还是重新下单如果超时了有没有重试机制重试算不算重复下单这些提问本身没有恶意但在一个追求快速上线的团队里这种刨根问底的敏感有时会被当成阻碍进度。不过说真的问题暴露在测试阶段永远比暴露在线上要好。4.4 用任何设备之前都会先找它的上限和下限新买的手机先打开相机连拍几百张看会不会发热卡顿新装的软件先找设置里有没有开发者选项或者日志输出家里的智能音箱我唤醒它之后的第一句话往往不是播放音乐而是退出——我就想看看它能不能正确识别语音打断。这些行为在旁人眼里多少有点神经质但对我来说这只是测试敏感在生活里的一种惯性延伸。5. 敏感的代价过度测试倾向与沟通摩擦都是真实存在的暗面任何事物都有两面性。测试带来的敏感帮我们发现了大量潜在缺陷但也带来了一些实实在在的困扰。如果意识不到这些暗面敏感很容易从专业能力变成内耗源头。5.1 过度测试倾向永远觉得还没测够敏感到了一定程度会出现一种无限测试的倾向。一个功能已经测了三轮所有想到的用例都跑了回归也做了但我心里总会有一个声音还有一个组合场景没试过要不要再跑一遍这种倾向在大版本上线前尤其明显。说实话做过几年测试的人多多少少都有点上线前焦虑我自己到现在也没完全克服。克服这个问题的关键在于建立覆盖度模型而不是感觉。我在团队里推行过一个习惯每个版本都拉一张风险覆盖表把需求拆分成功能点标注每个功能点的用例覆盖情况、自动化覆盖情况、风险等级。测试到了我认为覆盖得差不多了和表上显示每类风险都已经闭环是两种状态——前者的依据是感觉后者的依据是数据。用数据来代替焦虑是测试敏感从侵入性担忧变成可控性管理的分水岭。5.2 沟通摩擦敏感如果只带来挑刺会消耗团队信任测试敏感如果不会表达很容易变成团队关系的破坏者。最典型的场景是缺陷单上只写了一行页面显示不对什么复现步骤、什么环境信息、什么预期结果都没有开发看了只能一脸蒙然后来回扯皮。这就是典型的敏感只停留在发现问题的层面没有上升到解决问题的能力。我的经验是所有测试敏感发现的异常都要翻译成开发能快速定位的语言。这包含四个要素前置条件用户在什么页面、什么登录状态、操作步骤每一步操作尽量精确、实际结果截图、日志、接口返回报文、预期结果为什么你觉得这是不符合预期的。如果这条缺陷涉及特殊数据还要把数据构造方式一并写清楚。把缺陷报告写到这种颗粒度开发一般不会再有抵触情绪反而会觉得这个测试靠谱。5.3 精力管理长期保持警觉本质上是一种高强度认知负担做功能测试的时候每分每秒都在找茬大脑处于持续的高强度模式匹配状态做自动化测试的时候要同时关注用例本身的正确性、被测环境的状态、CI流水线的执行情况。这种高强度的认知警觉如果持续太久而缺乏调节很容易变成精神疲劳甚至倦怠。我自己调节的办法有两个。一是设定深度专注和例行回归的节奏分配不把自己长时间钉在点鼠标的机械操作上把重复性的回归尽量交给自动化执行把精力留在探索性测试上。二是定期搞一些完全跟软件无关的事比如去线下跑跑步、做点手工活让大脑从识别异常的模式里抽离出来。做测试不是一台没有感情的执行机器允许自己脱敏一段时间反而回来之后状态更好。6. 把敏感炼成判断力我的取舍原则与一些实在的建议说了这么多敏感的表现、价值和代价最后聊聊怎么把它变成正向力量。毕竟敏感本身是中性的关键在于我们怎么用它。我自己的经验可以总结成几条很实在的原则。6.1 敏感必须与优先级挂钩不是所有异常都值得开缺陷单我刚入行的时候有缺陷收集癖看到一个页面标题的标点符号不一致都要提单结果开发被我的小问题淹没真正严重的bug反而被淹没了。后来的教训很深刻测试敏感应该遵循**严重度×发生概率×影响范围**的排序逻辑。市面上大多数测试管理工具都有优先级字段但我们自己心里要有杆秤。发现一个只有特定网络下、特定账号、特定操作才会出现的显示错位和发现一个会导致用户资金异常的校验缺失处理优先级天差地别。敏感觉察到的问题先放进待确认列表经过严重度评估之后再决定要不要正式提单。6.2 敏感要与证据绑定给结论附上为什么平时我在给开发同步问题的时候习惯性地会带一句这里我觉得可能不对因为某某状态下它的行为跟需求文档里的描述不一致你看下是不是我理解得有问题。这种表达方式最大的好处是它主动把质疑变成了讨论。就算真的不是bug开发也会把你当成一个认真严谨的搭档而不是一个整天添乱的找茬者。6.3 如果想让敏感升级请主动拓宽观察半径很多测试同行工作两三年后会遇到瓶颈功能测试都会做、用例也写得出来但就是觉得敏感不够用。我的建议是与其固守在一个模块里反复点点点不如主动去接触接口测试、数据库操作、日志分析、甚至简单的脚本开发。当你能直接看接口返回报文定位问题时你对缺陷为什么产生的理解就比只盯着页面的人深了一层当你能写自动化脚本释放重复劳动后你才有精力去探索更深层的测试设计。这种技术能力上的拓展反过来能强化你对系统的敏感——你会开始从代码逻辑、数据流、交互链路的角度去看一个功能而不是停留在这里点起来不对劲的表层。6.4 最后分享一个我一直在用的小技巧保持新人视角和专家视角的切换做测试越久越容易陷入经验主义敏感——看到什么问题都觉得好像在哪见过然后按老套路去验证。但软件产品千变万化真正常见的问题反而不在套路里。所以我每隔一段时间会刻意用第一次见到这个产品的心态去随性操作一遍不按测试用例来纯粹以一个普通用户的手感和好奇心去用。这种方式下发现的很多意想不到的问题反而比按部就班设计的用例更值钱。两种视角来回切换既不会丢了测试的专业敏感也不会被自己的经验束缚住双眼。测试做久了人对缺陷的感知力确实会变得异常敏锐这种敏感已经变成了我们观察世界的一种方式。它让我们在工作中能发现别人发现不了的问题也让我们在生活中偶尔显得有些格格不入。但说到底这份敏感的本质是对质量这件事的敬畏——相信每一个看似不起眼的异常背后都可能藏着一个影响无数用户的隐患。只要我们能学会给这份敏感加上优先级、证据链和取舍的框架它就能一直成为我们职业路上最值得信赖的伙伴。
RELATED READING

延伸阅读

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