
那份全是 0 的压测报告,让我重新理解了「测试的可信度」
当系统一本正经地,用一堆垃圾数据给了我一个「失败」的结论
专注移动端 / 游戏质量工程
那天下午,一份压测报告把我问住了。
报告很「干净」:帧率 0,内存 0,CPU 0,最上面一行大红字结论——FAIL,失败。
业务同学拿着它来找我,语气里带着质问:「你看,性能这么差,这版本不能发吧?」
我盯着那一排整整齐齐的 0 看了很久,心里慢慢冒出一个念头:
不对。0 帧不是「性能差」。0 帧是——这次测试,根本就没真的发生过。
我把报告翻到底层数据,几个细节同时跳了出来:
三条线索拼到一起,结论很清楚:在整个测试过程里,被测应用压根没在前台运行过,它一直在后台待着。系统忠实地采集了几十秒——采的全是一个待在后台、什么都没渲染的应用。
再往上追一层原因:被监控的应用,和实际被操作的那个,不是同一个。(一个产品往往有多个构建版本,配置时指到了错误的那一个。)于是真正在跑的应用没人看,被「看」的那个一直在后台睡觉。
定位到原因并不难。真正让我后背发凉的是接下来想到的一件事。
系统没有说谎。它确实采到了数据,也确实严格按照规则算出了 FAIL。整条判定逻辑没有任何 bug——阈值是对的,算法是对的,结论流程是对的。
问题在于:它从头到尾,没有问过自己哪怕一句——
「我采的这份数据,到底有没有效?」
然后一个更可怕的推论浮上来:这不是这一份报告的问题。我们过去所有的测试结论,可能都默默建立在一个从来没人验证过的前提上——「我拿到的数据,是有效的」。
我们这行有个集体盲区:把几乎全部精力,都花在了「判定逻辑」上。
却很少有人回头校验那个乘数——「数据本身有没有效」。可一个简单的乘法摆在这里:
结论的可信度 = 数据的有效性 × 判定逻辑的严谨度。
当数据这一项趋近于 0,判定逻辑做得越严谨,结论反而错得越「理直气壮」——因为它会用一套无懈可击的流程,把一堆垃圾,精确地算成一个看起来很权威的结论。
我后来给系统加了一道很「轴」的关卡:在出任何结论之前,先验一次数据的有效性。
被测对象,是不是真的处于「正在被测」的状态?——它在前台吗?采样有效吗?采集方式可信吗?
只要这一关没过,系统不再纠结该判 PASS 还是 FAIL,而是直接给出第三种结论:
「本次无效(INVALID)」——并告诉你去核对哪里,而不是拿垃圾数据硬凑一个失败。
一字之差,意义完全不同:FAIL 是「你的东西有问题」,INVALID 是「这次测试本身不算数,重来」。把这两者混为一谈,是很多误导性结论的根源。
你可能觉得这是游戏性能测试的特例。其实不是——「没人校验数据有效性」这个盲区,几乎在每种测试里都埋着:
这些都是同一个病:「假通过 / 假结论」。而「假通过」比「真失败」可怕一百倍——真失败至少会拦住你,假通过会笑着把你送上线。
正因为这次经历,我把「有效性前置」郑重地写成了一条原则,放进我一直在打磨的一套质量验证范式里:判定之前,先验数据;数据不可信,一切结论都免谈。
说到底,一个不肯怀疑自己数据的测试系统,再聪明,也只是在「精确地算错」。
下次再看测试报告,建议先别急着问「结论是 PASS 还是 FAIL」。先问一句更朴素、也更要命的问题:
「这次测试,到底有没有真的发生?」
—— 这是我「质量工程踩坑笔记」系列的第一篇。下一篇想聊聊另一个我越来越确信的判断:为什么「自动化只用来做回归」,其实是在浪费它最大的价值;以及当客户端、服务端、压力源三端的数据被放到同一条时间轴上时,你能看到单独看任何一端都永远看不到的东西。
如果这篇让你想起了自己经手过的某份「可疑的报告」,欢迎留言聊聊你的故事。
——————
关于我:一名长期泡在移动端 / 游戏质量工程一线的工程师,习惯把踩过的坑,总结成别人能少踩一遍的方法。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。