技术手记约 3 分钟 · 1446 字

274 个绿灯,挡不住一个「没测到」

274 个绿灯挡不住一个「没测到」——一次只读量化体检的真信号与假信号

上个月底,我们给自家平台做了一次体检。报告拿回来,几乎是全绿的——测试通过、门禁通过、部署成功,每一项都是绿灯。

我们盯着这份全绿的报告,反而开始担心。

先说这次体检的规矩

我们找了一个"第三方视角",对平台做一次只读的量化体检。规矩只有两条:

第一,每个数字必须可复算——附上样本量、判据、命令和局限。

第二,测不到的,写「未完成」,不许写「没问题」。

就这两条。听起来不难,做起来才知道有多反直觉:大部分体检报告的默认写法,是把"没测"包装成"良好"。

真信号:有三块,是真的硬

一、数据层。 一百多个索引,抽查的典型查询全部命中索引、零全表扫描;数据库零碎片;归档干净。最重要的是备份——我们不是看它"存在",是真的解压恢复了一次:完整性校验通过,再把四张关键表和线上逐个对数,差异都在两小时窗口内。备份"存在"和备份"能用",中间隔着一次真的打开。

二、鉴权面。 不带身份去访问几十个接口,除了两个设计上就公开的入口,其余全部被拒。一百多条会改数据的路由,绝大多数在注册时就挂了鉴权。匿名越权写入,基本不存在。

三、真漏洞在被真修。 体检前刚关掉一条危险路径:知道终端号,就能改写真车的凭据。这种修复改的是逻辑本身,不是文档。这是比任何绿灯都值钱的信号。

假信号:绿得越稳定,越要问它挡住了什么

「274 个测试全过」——拆开看,有两个用例连续八次体检都是"环境未就绪,放行"。它们不是通过了,是从未被真正执行过。更微妙的是,我们自己的自查清单里也躺着一条"豁免腐坏"——独立测量和自查指向了同一处,只是谁都没去处置。

「文件拆分完成」——行数确实降了,但那个五千多行的主函数还原地坐着,耦合只是从"文件"搬进了"函数"。按注册数算,迁移完成度三成。拆了文件,不等于拆了复杂度。

「门禁在跑」——服务端的兜底门禁其实从没真正启用,客户端那一道成了唯一防线;审计日志里还有上千次显式跳过的记录。防线只剩一道的时候,它挡不挡得住,取决于每个人都永远不犯错。

文中配图:同一份体检报告,两种读法。左侧「真信号」是数据层可靠、鉴权面严密、真漏洞在被真修;右侧「假信号」是 274 个测试全过、文件拆分完成、门禁在跑。
同一份体检报告,两种读法:左边是可以据此决策的真信号,右边是看着好而已的假信号。

最扎心的一条发现

平台的测试并不少——几百个用例,读接口的覆盖有八成。

但写接口——改组织归属、改计费、给真车下指令——覆盖不到一半。而恰恰是这些路径,错了有物理后果:一次错写就是越权,一条错指令就下发给在跑的车。

这不是"测试少",这是测试分布与风险分布正交:投入花在了好测的地方,风险藏在难测的地方。

覆盖率的数字很好看,风险却不在被覆盖的那部分里。

后来补了什么

体检的价值不在报告,在改法。按"每单位投入消除多少风险"排了序:

一、给高后果写路径补回归。 按域分批,先做"下发给真车"和"改数据可见范围"这两类。判据不谈覆盖率,每条写路由至少三个断言:没身份要 401,身份不够要 403,身份对了才 200。

二、恢复演练写成脚本,每月一号自动跑。 行数差超过 5% 就报警。演练本身不复杂——复杂的是"想起来要练"。

三、服务端兜底门禁真正装上。 跳过开关从"日常敞开"改成"按需+事后补跑",让第二道防线重新存在。

四、给长期受阻的旧账做一次清算。 解冻、降级、关单,三选一,不许"沉默的失败"躺在账上生利息。

带走一句话

如果你也在选一套车队管理平台,别只问"你们测试通过率多少"。问一句:你们的绿灯,判据是什么?最近一次有人复核它挡住了什么,是什么时候?

我们做这一行越久越觉得,可靠不是全绿。可靠是每个绿灯都有人查过它的判据,每个"未完成"都敢写进报告。

绿得越稳定,越要问它挡住了什么。

这里是琪致,下篇见。

本文同步收录在琪致官网「808 手记」
全文与往期:qizhi808.com/notes/

同步渠道

想第一时间看到?关注公众号

微信搜索 琪致602 即可关注。公众号首发、官网留全文,两边内容一致;有想聊的场景,也可以在文章下留言。

微信公众号「琪致602」二维码

要样机、要报价,
还是先聊选型?

把车辆类型、要接的摄像头路数、现用终端型号发给我们,回一份配置清单与报价;需要的话先寄一台样机做现场联调。