|
软件测试不是软件找茬,是测试采集信息。我入行第三年才彻底想明白这件事。基础当时团队里有个老测试员,知识提交的软件缺陷报告永远只有三行:步骤、预期、测试实际。基础但开发看了从不反驳,知识因为那三行里藏着足够多的软件上下文——他连测试时用的浏览器缩放比例都写了。后来我学他,测试发现缺陷被修复的基础速度快了一倍。 测试的知识本质是降低不确定性。你测一个登录功能,软件点十次按钮都成功,测试那叫验证;第十一次输入带emoji的基础密码,系统崩了,那才叫测试。后者提供的信息量远大于前者。所以别把“通过用例”当业绩,那只是确认了已知的已知。真正的价值藏在已知的未知里——比如并发用户突然翻倍、数据库连接池耗尽、第三方接口超时未返回。 有个案例我记得很清楚。某电商项目上线前,性能测试报告显示“平均响应时间200ms”,大家都松了口气。但测试组长多问了一句:“峰值呢?”没人答得上来。他手动跑了次压测脚本,发现第5000个并发用户进来时,响应时间飙到8秒。后来定位是慢查询没加索引。这个缺陷如果上线后爆发,大促当天直接损失百万级订单。你看,平均值会骗人,分位数才是真相。 测试用例设计有个反直觉的点:别追求覆盖全部路径,先覆盖风险最高的路径。路径组合是天文数字,你穷尽不了。但风险是可以排序的——支付流程比改头像风险高,权限校验比页面配色风险高。把80%的精力砸在那20%的高危场景上,比均匀撒网有效得多。我见过一个测试新人,花三天写了200条用例,把注册页的每个输入框都测了边界值,但漏了“用户已存在时跳转逻辑”。结果上线当天,重复注册的用户直接被导到空白页。 自动化测试也不是万能药。UI自动化脚本维护成本高,页面稍微改个class就全红。我现在的团队定了个规矩:能用接口测试解决的,绝不上UI自动化;能用单元测试覆盖的,绝不写端到端。分层策略比工具链更重要。比如验证订单金额计算,直接调API传参比模拟点击购物车按钮快十倍,还稳定。 回归测试的时机也讲究。别等代码冻结了才跑全套,那会儿发现bug,开发改起来胆战心惊。更好的做法是每次提交代码后,跑冒烟测试加核心链路,每天夜里跑全量回归。让问题在产生它的那个时间窗口内暴露,修复成本最低。这跟体检一个道理,你非等疼得受不了才去医院,大概率得动手术。 最后说点主观的。测试这行当,越做越觉得像侦探。你得从蛛丝马迹里推断系统哪里藏着雷。有时候一个崩溃日志里的堆栈信息,比十份需求文档都管用。别迷信工具覆盖率,那只是参考。真正的测试直觉来自对业务逻辑的深挖和无数次踩坑后的肌肉记忆。保持好奇,别放过那些“应该没问题”的地方——大多数线上事故,都从这句咒语开始。 |