问题描述:
今天在跑app主流程时,有一个功能出现了bug,提示的message是:
No message available
前提: 这个功能之间都是没问题的
那现在为什么会出现问题呢?
猜想: 有可能是这个两天写测试重构代码,导致出现了问题。
解决问题:
验证猜想:
- 带着这个猜想去了看代码,发现好像关于这个bug的接口没有做大的改动,紧接着就去测了这个接口,测试接口结果是没有问题的。
结果:
- 验证猜想错误 !
问题聚焦——排除法:
- 首先这个功能的前置条件都是满足的,比较必须设置取换车地址才能使用该功能,所以排除其他功能的影响
- 前端提示的
No message available
这个错误message ,也没有在后端找到,该接口中也没有返回这样的message - 查看了后端的log ,并没有报错,而且是运行成功的状态
- 现在看到后端接口是没有问题的,那就能断定一定不是后端的问题吗?
这就比较奇怪了,既然后端没有问题,难道是前端的问题吗?
思维陷阱:
当时自己的想法是,这就肯定不是后端的问题,一定是前端的代码有问题,想着是不是应该找到APP前端的人来看看这个bug。
解决过程:
而今天就只有我和Teach Lead 在项目,其他人都不在
这时候Teach Lead 来协助我解决这个问题了,他引导着我来解决这个问题,他说咱们换一个账号试试,我切换了账号依然是同样的问题。
于是他说咱们使用同一个账号,在其他环境,尤其我们的生产环境测试一下这个功能是不是好的
这时候诡异的事情产生了,结果如下:
- 同一个账号,在生产环境该功能是好的
- 而在测试环境却有bug
而这段时候APP前端是没有改动代码的,后端是在不断的改代码,那就一定是后端的问题了。
现在的问题是聚焦在后端上,但是目前看来后端接口没有问题,运行log也正常,没有错误,那就更诡异了
进一步探索:
- TL去查看了前端APP的接口调用,发现这个功能调用的是v2版本的接口,但是在后端的代码中没有找到v2的这个接口,这个接口只有v3的
- 查看了v2接口所在文件的修改历史,发现这个v2的接口在最近的某一天被dev删掉了,估计当时是以为这个接口已经有v3了,v2就没用了,就删除了,就导致了这个bug
最后把删除的接口补回来,bug就解决了
这个bug终于解决了,不过过程真的是山路十八弯,在没有前端协助的情况下,找出了问题所在,其实还是解决问题的方式很重要!
不过比较郁闷的是,今天这个bug,相当于是想后端请求了一个不存在的接口,虽然后端给前端返回了错误:
但是在后端一切运行正常,在代码运行日志中并没有错误产生,所以让人很难定位问题所在,这也算是代码的漏洞.
今天这个bug之后,给项目加上了一个错误处理机制,当请求一个不存在的url 时,会有错误处理,并且记录到log中,方便以后查看。这样就不至于以后类似问题,后端没有做任何处理,并且看似运行正常,那就懵逼了。并且系统抛出的异常会很让人confuse,无法定位错误的原因。
解决方式是这样:解决方式
回想下:所以说当初的思维陷阱很可怕,后端的接口对了就一定不是后端的问题了吗?
答案一定是:不一定
所以还是得找到正确的打开方式,不早早下结论,排除问题,聚焦问题。
总结:
- 对于像为了版本兼容,相同接口的有多个版本时,千万别乱删除,别冲动,冲动是魔鬼
- 对于问题的聚焦,还是缺少经验,正确的打开方式应该是:求同存异,对比然后对问题聚焦
- 千万别尽早下结论,多想一想解决问题的方式是否全面,还有没有没有想到的,思路是否清晰。
- 多问几个为什么,自己解决不了的为什么,可以找有经验的人,帮忙分析
锻炼自己的解决问题的思路和方式,打开方式:
- 遇到问题多问为什么,自己驱动问题解答,总结解答过程
- 给技术社区解答问题,从简单的开始
迈出第一步
网友评论