一个bug

Apr 22, 2014


昨天我们的游戏上app store了,当天晚上接到运营反馈的一个bug,说是没有积分系统的活动但是有的玩家在充值过程中送了积分。当时我脑海中第一感觉就是不可能,积分系统的活动压根就没有开怎么会有积分赠送呢。

秉着怀疑的态度去核对代码,发现本地的积分活动没有开,然后我再去服务端取脚本回来,发现脚本是一致的,将代码不同步的问题排除掉后,那么问题的发生肯定是某处的代码bug引起的。于是再次仔细核对了一下代码。赠送积分系统只有两个地方,一个是充值的地方以默认的方式增加积分,另外一个就是活动系统中的接口,由于活动没有开,所以排除第二个地方,那么问题就只剩下第一个地方了。

而且这个问题的发生看似随机,有的玩家充值了就没有积分,但是有的玩家就有,想要找到问题那么首先就应该把bug重现出来。于是我在本地开始测试,准备重现bug,我不断的新建角色并且充值,大约十遍左右还是没有出现bug,这时团队内部有一个人充值了赠送了积分,于是去找他了解一下详细情况,说是冲了98块但是赠送了积分,这时我就很好奇,为啥他充值有积分而另外一个人冲了30块就没有积分。回到座位后我突发奇想把充值金额写死到98块试试,然后我写死金额重建角色测试,ok,bug重现了,然后我再次充值发现bug没有出现了,于是基本确定第一次充值肯定会出现bug,但是当我把金额写死30块之后重建角色bug又没有出现,反复几次之后基本确定了bug出现的条件:当新角色第一次充值且充值金额尾数不为0的金额一定会出现bug。

出现bug之后就好办了,肯定是代码出现问题,然后去看那个增加积分的代码,发现逻辑是按照充值金额除以10之后取整进行比较,当不满足条件时就会返回false导致那次充值的消耗积分失败,进而导致玩家积分增加。

解决方法是除以10之后不要取整,直接拿实际值进行比较。分析之后实际原因是我们的充值以前都是针对PP\91\同步推等平台来做,在这些平台上我们的充值金额都是以0结尾的,即使除以10取整之后还是没有任何问题的,这也就是刚开始出现这个bug的时候我特意拿app平台和其他平台进行比对发现问题只在app平台上出现。

还是由于考虑不够仔细,忽略了可能会出现的情况,代码上不够严谨,这也算是一个教训,以后在代码上一定要严谨,对于需求的理解和实现也要求仔细得当,这样才能保证在实现过程中囊括当前和即将或者可能出现的情况,在这里记录一笔,当作一个教训。