那些年,我们一起翻过的车--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而不是''

相关推荐
姚*鸿的博客19 分钟前
pinia在vue3中的使用
前端·javascript·vue.js
宇文仲竹38 分钟前
edge 插件 iframe 读取
前端·edge
Kika写代码41 分钟前
【基于轻量型架构的WEB开发】【章节作业】
前端·oracle·架构
天下无贼!2 小时前
2024年最新版Vue3学习笔记
前端·vue.js·笔记·学习·vue
Jiaberrr2 小时前
JS实现树形结构数据中特定节点及其子节点显示属性设置的技巧(可用于树形节点过滤筛选)
前端·javascript·tree·树形·过滤筛选
赵啸林2 小时前
npm发布插件超级简单版
前端·npm·node.js
罔闻_spider2 小时前
爬虫----webpack
前端·爬虫·webpack
吱吱鼠叔3 小时前
MATLAB数据文件读写:1.格式化读写文件
前端·数据库·matlab
爱喝水的小鼠3 小时前
Vue3(一) Vite创建Vue3工程,选项式API与组合式API;setup的使用;Vue中的响应式ref,reactive
前端·javascript·vue.js
盏灯3 小时前
前端开发,场景题:讲一下如何实现 ✍电子签名、🎨你画我猜?
前端