前言

最近公司有个审阅办理的功用, 到了提测阶段,测验测出了好多问题,原本以为两三天就能经过测验布置上线。可是实际上测验了一周,才把绝大多数问题处理掉。项目负责人让咱们对此事进行一下复盘,我对自己参加工作以来,在开发过程中发生的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而不是''