前言
经过有序的开发,在各端人员的紧密配合下,项目终于上线了,但是好景不长,出现了线上BUG,应该怎么办?
当然,BUG是大家都不希望看到的,但是百密必有一疏,有代码就会有BUG,这个在所难免。有的同学在小厂,自己排查一下,改掉之后直接上线就行;有些同学在大厂,有一系列繁琐的流程,搞不好还得背锅。今天就来聊聊项目上线后产生的BUG应该怎么办?
正文
判断严重程度
出现线上BUG后,首先第一步就是根据情况判断问题的严重程度,以便做出进一步的处理。
- 影响用户量。
- 影响资金量。
- 影响设备范围。
- 时间范围。
- 业务重视程度。
- 公司投入成本。
因素有很多。严重程度根据公司体量决定,一般比较看重的是用户量和资金量两个点,如果公司体量足够大,可能命中任何一点都很麻烦;如果你所做的业务刚好是公司近期的重点项目,也要高危处理;当然如果命中以上好几点,说明很严重了。以上情况都要做出回滚处理,再慢慢进行修改。如果情况较轻,比如仅仅个别用户有影响,就不需要回滚,定点排查就好。
复现问题
判断完BUG的性质,就有时间去尝试定位问题,先看代码,如果能直接找到问题在哪里是最好了,但是大部分情况是找不到的,所以需要进行复现。
如果你看代码直接找到了问题,也不建议改完直接上线,也是要先复现问题,修改代码,自测确认解决,经过QA回归,确保已修改成功,再进行发布上线。
复现的路径也有很多:
- 日志复现
第一时间就是去寻找项目日志,这是最快也是最好的判断问题的方式。如果你们到现在还没有日志,那就抓紧补足这一块的技术基建。日志一般会上报一些用户的操作节点以及页面数据细节,以前端日志为例,会上报用户打开页面的整个流程:页面访问、用户点击、接口请求、APP交互、页面滑动、页面退出等。多半的问题都可以通过日志复现找到。
- 快照回放
如果你们的基建足够健全,还可以进行页面快照回放,就是将用户的展示页面进行录屏,在排查问题时进行回放,可以看到用户的操作轨迹,可以参考sentry的回放效果,更直观的复现问题。
日志上报和快照回放这块的基建都是我负责落地的,如果感兴趣,我可以再写一篇文章,详细聊聊。
- QA复现
如果日志中无法找到问题,那就要尝试让QA帮忙复现了,QA通过模拟账号或者身份,使用不同型号的测试机,在测试环境进行复现,辅助我们排查。
- 联系用户
如果QA依旧无法复现,并且多方开发都无法找到问题,那说明是个例,或者用户有什么特殊的操作手法,就需要通过客服对接人员联系到用户,人肉复现问题,并给出复现路径,进行定位。
如果联系用户都没有复现问题,说明是偶现,遇到这种问题,最好的方式是在项目中打更多的日志,发布到线上进行观测,看不同的情况下是否还会复现。
解决问题
只要能复现问题就一定可以找到解决方案。首先看是否需要涉及产品逻辑改动,有一些问题真的非常复杂,“打断骨头还连着筋”,产品调研时没发现问题,开发制定技术方案时也没发现问题,QA测试也没发现,直到上线才暴露出来,这种问题就要拉群同步信息,给出你的技术判断以及解决路径和排期,让需求方做决策。
如果是历史问题,或者内部依赖包的问题,牵扯范围较广,你需要告诉的+1,及时同步排期情况。
解决完问题之后,团队内部进行交叉CR,也是给代码上一份保险。
测试回归
一定要回归,一定要回归,一定要回归!重要的事情说三遍。
不论问题的大小,一定要让QA回归。我们团队就有个案例,本来就是个接口报错,影响范围很小,开发发现问题后,本地复现进行解决,结果本地调试时忘记了恢复初始值,导致线上打款都打在了一个人的账户上,直接P0到手,你说找谁说理去。所以一定要找QA同学,告诉对方修改的逻辑,所涉及的范围,然后覆盖多场景测试。
问题追责
问题解决完成之后就是定责问题,也就是俗称的背锅。当然写BUG的人一定是主要责任,但是不能全怪个人。
一个项目的上线,是多个部门协同的结果,运营、产品、UI、开发、测试等不同角色都承担着不同的职责,从跨部门的角度来说,信息的同步、内容的沟通;从小组的角度来说,内部的代码规范、项目的CR流程、框架的历史包袱等,多多少少可能会有疏漏。
所以,追责永远应该是重流程、轻个人。重视流程规范,努力发现其中的漏洞,完善整体开发流程,避免下次再犯;轻视个人犯错,端正态度,再接再厉。
如果你是一个TL,对外你还是应该维护组员的利益,提升凝聚力;对内正视问题,优化流程,通过CR、规范约束、代码审核等手段,保证不会从环节上遗漏。当然,如果某个开发,屡次犯错,而且都是类似的问题,那就要考虑下个人的去留问题了。
BUG复盘
如果是一些严重的BUG,需要进行问题复盘,以吸取教训,并优化流程。具体复盘什么呢?
- BUG的损失,描述BUG的具体情况,总结BUG造成的损失。
- 复盘解决过程,整理此次处理BUG的流程以及思考路径。看哪些环节有遗漏,哪些环节耗时过多。
- 深挖问题,流程中某些细节进行深挖,是什么原因导致的疏漏,是否可以规避,是否可以优化。
- 反思全局,通过这次BUG是否发现了整体开发流程的缺失,有没有解决方案,给出合理的建议,谈论看是否可以落地。
总结
如果我总结的有遗漏,欢迎大家讨论并给出建议,也希望对大家有所帮助!!!