公司人员报告了获取任务列表为500的bug,但是我们测试数据却能正常返回。玄学?NO!NO!NO!
BUG情况
公司人员报告了一个bug,获取我们用户任务列表的接口数据时会出现500的异常。但是经过我们自己测试没有发现问题。
几天后,公司人员又发来了截图,表示获取任务列表又出现了500异常。并且测试过后发现只有userid
是6的才会出现500异常,其他userid
不会出现,并且userid
为6的用户调用这个接口,时而能够正常返回数据,时而又出现500bug。
原因
经过查看项目log发现程序运行过程中出现了空指针异常。并且定位到相关的代码行。
1 |
|
(不要问为什么任务的变量名是user
,我也不知道。。。)小伙伴写这段代码时是通过获取到任务的finishTime
,再拿finishTime
减去createTime
。
初步猜想可能是新创建的任务没有finish,导致获取到的finishTime
为null
。因此引发空指针异常。
而当用户的任务完成时,finishTime
被填上,再获取任务列表时,又可以正常获取到数据。
又因为公司那边测试一直用的是同一个用户id(6),所以每次创建任务之后获取任务列表,显示是500.其他用户id并没有运行任务,所以表象是只有userid
为6的用户才会发生异常。
进一步查看log,佐证了自己的猜想。
log显示在查询用户列表之前,用户新创建了一个任务。
总结
虽问题不是什么大问题,代码也不是自己写的,但有两点须引以为戒。
- 变量名的规范:任务记录的对象,命名为
user
,让我在定位bug的时候,理解代码出现了偏差。所以变量命名规范,有助于对代码快速的理解,从而能够更快的定位bug。 - 注释:太重要了!!!如果不写注释,等出现bug再定位的时候,再次读即使是自己写的代码,也会耗费些时间来理解。