说实话,那会儿做项目测试跟写代码彻底不是一回事。
那会儿我是拿着放大镜找 bug,就像找藏在旧衣服里的苍蝇,略微有点动静就要冲那会儿,生怕漏了个茬。
那时候认定项目就是代码堆起来,测试就是在这堆堆的砖头里找裂缝,只要没发现就行。 目前想想,这种心态确实有点傻。软件开发没那么好办,它更像是一场没有剧本的即兴相声,大家各玩各的,你插一句,我回一句,最终拼凑出来的东西,能不能 Standing up,全靠缘分。 就拿那个我们去年负责的电商重构项目来说吧,那时候系统数据量大了,咱们团队几个人,每天要在两个服务器之间像迁徙一样跑飞。有一次凌晨两点,我们三个人围在机房里,桌上摆着两份日志,那张是前端传来的,“接口超时”,另一张是后端回的,“数据库连接池满了”。
看着这两张单子,我心里默念,这哪是难题,这是系统在喊冤,它在说它被占满了,没地方歇脚了。 后来我们排查,发现是主从延迟过高,害得从库写的更新,主库还没回写,前端就先看到一半数据了。
当时那股子火,差点让我也跟数据库拼个你死我活。 数据量上去之后,就真不是靠猜了。
那时候单纯看日志就像看天书,密密麻麻的字符,哪条是难题?我找了一个同事,让他把最近三年的接口调用拓扑图发给我。数据量甩过来后,我直接抽了个饼,先划掉了所有耗时超过 500 毫秒的接口。
那时候我们就知道,系统里肯定有某些东西在打架。 再比如风控模块,有一段工夫线上出了个数据泄露的小漏洞,别看没造成大乱,但被监控抓到了。
当时我看监控报警,脸色都白了,心想完了完了,那数据流经过我的代码一层,一层,仿佛还能跑完。后面仔细检查,发现是出于某个中间件的配置没跟上,害得数据在传输过程中被截行了。 那一刻,我突然意识到,测试不再是找茬,而是一种本事的展示。就像写代码一样,你得懂业务逻辑,懂数据如何跑,懂网络如何通。
那会儿我认定只要代码没报错,功能就全了,目前明白,错了的只是个别功能,但核心的逻辑链条一旦断了,整个业务就颠了。 还有啊,有时候我发现,写代码的时候,你只管把逻辑跑通,像脚本一样,行不中?行就行。但放到造环境,用户会不会出于某个页面加载慢半拍就嘟囔?会不会出于数据同步延迟几秒就焦虑? 记得有一次,我们负责的一个支付功能,上线前做了挺长工夫的测试。最终实际跑通的时候,发现有个第三方回调接口,别看大局部请求成功了,但间或有 3% 的请求在处理队列里卡了。
当时我们慌了,心想这万一卡到下个用户如何办?最终发现是第三方服务器波动,害得回调消息丢失,前端收到的是“支付成功”但实际没扣款。 这难题不大,但这教训就是有点大。
那时候我就在想,那会儿系统出了事,那是运气不好;目前系统出难题,那是设计的时候没寻思到这些边缘情况。 自然,我也得承认,有时候真难。就像写代码一样,需求变了,测试策略得跟着变;代码写了,测试得跟上;网络断了,得知道如何绕;数据坏了,得知道如何补。
这种不确定性,让我这个测试专家特别有成就感,但也特别累。 不过嘛,目前大家都不怕了。毕竟咱们有个共同的目标,不让系统出事故,不让数据跑错,不让用户来气了。 最终说句大实话,项目评价不是看哪位写的代码漂亮,也不是看哪位查的 bug 多,而是看最终系统能不能跑通,能不能支撑业务。就像那会儿咱们做活动一样,哪怕最终有几个人没跑通,只要流程通了,数据对了,就是成功了。 故此啊,赶明儿写代码,别总想着跑通就行;写测试,也别总想着找 bug 就行。要把它们结合起来,把业务逻辑、数据流程、异常场景,都串成一条线。
只有这样,咱们的系统才能稳当,大家才能安心。