看了许多已经工作员工的线上事故处理总结,得出一个结论“每次线上事故都可能给公司带来巨大损失,每个看似微小的bug都可能是重大bug。”
所以,对待线上bug问题,我们要提前重视起来。虽说“人非圣贤,孰能无过”,软件是人编写的,难免都会出现问题,而我们要做的就是尽量避免问题出现,或者是避免出现重复问题。
问题描述:
从别人口中听说***一天得分好几百,再想想自己,一天能得到50分都不容易。最开始没在意,后来又有此消息传出,一打听才是到,原来加速卡使用出现了bug!!!(这不是我的功能吗?要出事!)
紧接着,此bug又被其他人利用。修复线上问题,变得迫不及待。
发现问题:
大米积分,每日通过考勤,禅道,互相加分,借书等方式获取积分,为了增加趣味性,系统中加入了“加速卡,乌龟卡”的游戏元素。
该卡使用规则(以加速卡为例):使用加速卡,在每日得分的基础上,再额外获得0.2倍的积分。
例如:今日的分:100,使用卡后得分120;
开发完成之后,由于测试疏忽,没有想到同一天使用多张卡的情况
例如:今日得分:100,使用2张卡后:100+1000.2+1200.2=148
如果使用的卡少可能看不出来什么问题,但是,如果同一个人,同一 天使用了几十张卡,那将是一大笔积分
刚好。这个漏洞被***等***的火眼晶晶察觉了。。。
然后就开始了紧急的维护!
经过问题描述,和代码排查,发现了问题所在:
使用加速卡规则和算分的时候出现的漏洞。
1.没有进行单个人使用卡的数量限制,这样导致,同一个人一次可以买多张卡,然后给同一个人用
2.也没有进行卡的有效开始,结束日期的判断。
解决问题:
修复完之后的额场景:
a.买卡时:
a1.取消选择买卡数量功能(默认只能买一张)就。
a2.往库里插入一条数据,用is_use=0字段来标识该卡状态(0:买了没用,1:用了,还没开始算分,2:已经使用且算分成功)
a3.记录该卡的开始使用时间和结束使用时间
b.使用卡时候:
如果多个人,给同一个人用卡,则卡的开始使用时间和结束使用时间都将往后顺延,
比如:王志程 被使用加速卡 1月1号-1月2号,此时陈新月又给我使用卡,则新月买的卡,时间为1月3到1月4
更新库中 is_use字段为1.等待定时器触发加分。
c.定时器触发算分:
定时器去库中查,卡使用结束时间为今天的用户,为其加分。
总结问题:
已经找到问题,并且解决问题。
通过这件事,深刻的知道了测试的重要性,不能想当然,自己的开发,自己测试,甚至开发组内测试,这是远远不够的。
当然,我们也需要养成全面思考问题的习惯。
此外,更要站在用户的角度去思考问题。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态