那些年,我们一起翻过的车--bug产生原因汇总罗列

前言

最近公司有个审核管理的功能, 到了提测阶段,测试测出了好多问题,原本以为两三天就能通过测试部署上线。可是实际上测试了一周,才把绝大多数问题处理掉。项目负责人让我们对此事进行一下复盘,我对自己参加工作以来,在开发过程中产生的bug的原因进行了不完全的归纳总结,发现绝大多数bug产生的原因都是可以改进和规避的。对我而言,bug的重灾区是业务不熟悉,对业务不熟悉表现为:开发功能的时候,有些场景遗漏了;功能开发完成后,有些功能点不知道页面入口和如何操作进行自测,大家也可以对照下面的列表项,找出自己的薄弱环节,进行刻意练习,提高自己的代码质量。现在我们进入正题:

bug产生原因总结:

14.外部原因引起的缺陷。比如说getCurExternalContact:fail user not in allow list这样的报错,是因为甲方的企微应用管理者,没有给自己的员工开通应用的可见范围权限,导致在企微中调用getCurExternalContact api时报错;再比如说行方的网络网速太差,导致项目中有个高频调用的埋点接口,经常出现超时,出现超时前会占用浏览器的并发数量,导致同时并发的接口数量减少,影响了业务操作的响应速度,比如说点击群发消息按钮,过了10s才响应。出现此类问题不会拉低自己的kpi,但是会占用你的开发时间去排查,也是有点烦恼。

13.第三方工具包引发的缺陷。有些npm工具包,即便锁定大版本,小版本的功能新增改动,也会引发构建错误。比如说miniprogram-ci这个npm工具,小版本升级就引发过构建错误,查找了半天,才定位到,后来指定安装之前的版本,构建才没有问题了。

12.有争议的缺陷。一些模棱两可的事情,被定性为bug。比如说埋点上报,分享行为,相关业务模块,页面有相应内容,上报值设置为1,没有设置为0。其它业务模块,不需关注此值。测试却认为其它业务模块,此值上报为'', 才是合理的,给开发提缺陷,这种缺陷就是有争议的缺陷。

11.缓存问题。有时候,修复了缺陷,打包构建时,dev-ops运维平台有缓存,修改之后的代码并不生效,必须清空工作空间,重新构建,才会生效。你在本地自测没问题,部署完了之后在bug处理平台扭转了缺陷处理状态,结果测试一测还是有问题,重新打开了bug单。比较坑。

10.提交代码时没有做CodeReview。误将一些调试语句,提交到测试环境,导致页面展示的不是mock假数据,就是一些调试变量值,犯了一些低级失误。

9.场景自测困难。有些业务流程,需要满足一些条件,才能产生对应的数据,而这些场景,需要多人配合,才能走完,这个时候走捷径,用假数据测试页面展示是否正常,可能模拟的并不真实。用假数据看着页面展示正常,等按正常流程操作时,发现有些小分支流程的数据没有模拟到,造成缺陷。

8.开发时间紧迫。本来某个开发任务,你评估了6天,提测时间是6天之后,到了开发时间点后,不断有各种优先级更高,比较琐碎的事情插入进来。比如说处理线上问题,或者紧急开发一个小的功能点等,这些事情单个耗时不到一天,累计加起来却占用了一半的开发时间,导致后面赶进度,匆忙的开发完功能,来不及自测就得提测,造成bug数量很多。

7.接手别人之前开发的功能,别人的代码风格不好,比如说代码中出现多种类型的id参数,如auditId,dataId,id,未写注释,容易造成理解错误,给后端接口传错值,导致逻辑错误。还有一种情况,某种id的值,在不同的场景下,取值会变化,比如说id参数,有时候取的是A接口的id字段,有时候取的是B接口的bannerId字段,容易被坑。

6.接口数据格式问题,后端的接口文档上没有写明某个字段的数值是字符串还是数字类型,而判断的时候使用的是===判断,造成缺陷;再比如说接口某个字段的示例展示为对象,实际上反馈的json字符串,造成解析错误。

5.业务不熟悉, 改了一个通用组件的业务逻辑,不知道所有可以触达这个通用组件的操作流程,导致从某些页面入口进入的流程没有测试到,造成很低级的缺陷。

4.需求问题,评审需求的时候,产品对细节自己也没搞清楚,说得很笼统。等到提测阶段,测试发现好些场景,功能实现有问题。最后发现,是功能开发遗漏。不知道还有那种场景,你说评审的时候,产品说了没有,好像也说了,不过说的时候是概括性的描述,但是没告诉你具体有哪几种场景,做完之后才发现,有疏漏。

3.历史遗留问题。开发新功能,需要对原有功能进行改造。提测之后,测试测出来一些历史功能缺陷,bug照样算在你头上,坑爹。

2.未按流程操作导致的bug。场景是这样的,前几天提测了一个功能,可是测试忙于其它事情,没有及时测试,线上突发bug, 要快速修复,然后走捷径,直接用热修复分支部署test环境,进行复现验证。导致test环境几天前提测的功能被冲掉,赶巧了在验证线上问题的那会儿,测试也在测试几天前提测的功能,然后在bug平台录入了一长串的缺陷,真是茶壶里煮饺子,有苦说不出。

1.有些UI组件库的有些组件,使用方法不遵循业内规范,造成bug。比如说Antd的Select组件,要想对选项值清空,应该将选项值设置成undefined而不是''

相关推荐
焦糖酒drunksweet5 分钟前
认识Event Loop【1】
前端
Georgewu6 分钟前
【HarmonyOS Next】鸿蒙加固方案调研和分析
前端·面试·harmonyos
夜寒花碎8 分钟前
前端事件循环
前端·javascript·面试
用户4192559999629 分钟前
mk-计算机视觉—YOLO+Transfomer多场景目标检测实战
前端
大霸王龙12 分钟前
去除HTML有序列表(ol)编号的多种解决方案
前端·html
没头发的卓卓12 分钟前
学会SSL/TLS,在面试官面前化身歪嘴龙王!
前端
阿常1114 分钟前
uni-app基础拓展
前端·javascript·uni-app
壹贰叁肆伍上山打老虎15 分钟前
突发奇想,写了一个有意思的函数,一个有趣的 JavaScript 函数:将数组分割成多维块
前端·javascript
bbb16916 分钟前
react源码分析 setStatae究竟是同步任务还是异步任务
前端·javascript·react.js
言兴16 分钟前
你知道吗?JavaScript中的事件循环机制
前端·javascript