先讲个线上事故的小故事。
目前为止碰到的最大的线上Bug就是,发给代理商的结算资金,数据计算重复,多算了几十万的问题。
好在业务方在后台及时发现,且代理商未进行提现,没有造成任何损失。
刚开始看到这个Bug,简直惊呆了,这个结算功能是已经上线一年多的功能啊!怎么会突然出现Bug???
后来开发同学排查才发现,近期上线了一个跟代理商结算相关的需求,平台B动了结算的接口字段,但是没通知我们平台A,导致接口字段错用,重复计算。
我们的平台为A,提供计算数据接口的平台为B,平台B会提供API供平台A调用,具体逻辑:
1、平台B跑定时任务,向平台A发送通知,附带ID作为参数
2、平台A调用平台B提供的接口,获取对应的数据,并存入数据库中
3、平台B的数据会做分页处理,平台A需根据记录数量多次调用接口获取数据,有两个字段:总数量totalCount和总页数totalPage,比如有120条数据,每页100条数据,平台A就会调用2次接口
4、平台B的接口改动后,提供的接口不包含字段totalPage但包含totalCount,且未通知平台A
5、平台A误将totalCount代替了totalPage字段,且平台A未做幂等处理,即未检查相同月份相同代理商的情况,比如有120条数据,每页100条数据,平台A理论上只需调2次接口,却调了120次接口,导致同一代理商同一月份的结算数据被重复算了一百多次。
事故过程以及处理方案:
1、业务方反馈,后台结算页面,相同月份相同代理商的结算数据被重复计算了,导致总计金额多出几十万
2、开发,测试和产品(兼职项目管理负责人)迅速响应,立刻通知运维同学停服
3、从后台观察,本月还未出现代理商提现的记录,即暂未造成任何影响
4、测试同学协助开发同学重现,查log,找到了原因
5、开发同学修复,测试同学进行验证,并进行相关模块的回归测试
6、上线,并对线上数据进行清理
7、复盘。开发同学写事故调查报告,包括:事故现象,事故影响,逻辑说明,事故原因,建议和意见
8、追责。最后追责下来,是接口提供方的问题,好在没有造成损失
对于测试同学来说,项目线上出现Bug,应该都遇到过~
而且,项目组成员的第一反应肯定是:测试同学怎么在测试环境没发现这个问题呢?
在没查清楚原因前,就会莫名的背锅。
问题来了,项目线上出现Bug怎么办?
一个原则:先救火,再追责。
对于测试同学来说,分以下三部曲来跟进:
一、评估Bug的严重程度以及影响范围
评估是否为核心功能的Bug,是否影响大批量的用户。
比较严重的Bug,例如购物网站无法下单,砍价等活动类项目无法分享,结算金额错误等等。
一般的Bug,例如页面兼容性问题,文案显示等问题。
二、确定修复方案:停服?回滚?线上修复?
如果是比较严重的Bug且影响范围比较大的,例如购物网站无法下单,一般采取的方式是回滚,先降低损失。
如果为一般的Bug,例如页面兼容问题等,开发同学顺手改改的事情,就可以立马改完验证后上线。
三、追责
分析Bug出现的原因,一般有以下4种:
1、测试用例未覆盖到
2、原型文档上未说明
3、测试环境无法模拟
4、其他平台修改接口未通知
如果是2,3,4的原因,那么应该说明原因,并反馈给相关负责人,及时规范流程,后续尽量避免。
如果是1的原因,主动承担责任,补充用例库,及时总结,后续避免犯同样的错误。