程序员背锅论Number引发的一个神奇B

北京白癜风医院 https://baike.baidu.com/item/北京中科白癜风医院/9728824

事故描述

今天刚到公司,就被声势浩大的业务部谴责声说懵了。

原来公司主打推出的APP产品有bug,而且这个bug被很多用户发现,以致很多客户投诉说APP很烂。

随后公司领导了解是因为研发部开发的APP有bug,所以勒令迅速解决问题,并要求对此事做出解释。

研发部老大立马发出检讨报告,告知解决方案以及后续修补措施。

当然相关人员这个月扣绩效也是板上钉钉的事了。

Bug描述

那么究竟是什么样的Bug引发这么严重的事故?

产品相关人员立马根据客户描述的问题场景重现bug,可奇怪的事情发生了。

开发人员、测试人员均操作了好几遍都没重现出来,前置条件和客户设置的一样,但就是没发现问题。

Bug的内容是这样的:用户输入金额后点击提交,但一直提示输入错误。

通过定位“提示”,找到这个“toast提示”在代码里面的位置,原来是JS文件中比较两个数字出现的问题。

代码如下:

if(planCountthis.financialDetail.realCount){msg=输入错误;$.toast(msg);return;}

此处本有一个校验规则,就是输入的金额不能大于计划的金额。

如原本的计划金额是,客户只能输入小于或等于的金额,如不是则提示:输入错误。

但客户输入的是,,为什么也会弹出这个提示?

原来是比较2个数字的时候没有进行数字化,导致比较的是2个字符串,而字符串比较第一位的时候,判断51,那么就会“toast提示“。

现在改为如下代码,就不会存在这个判断问题了。

if(Number(planCount)Number(this.financialDetail.realCount)){msg=输入错误;$.toast(msg);return;}

既然是这么简单的问题,为什么测试没有发现?

看看测试是怎么说的:要发现这个bug有一定的偶然性,我测试的时候的确是有校验的,我预置的计划金额是,输入判断,明明就是判断正确的。

要发现这个Bug要看校验数据的有效性,可测试的时候是不知道的啊。

听罢,众人只能无语。

不管怎么说,这次bug的引发归根结底是开发和测试的锅。

后续

在研发的眼里,除了系统奔溃是一级故障,其他的功能性问题都只能是一般性bug,有的甚至只是轻微级别。

可生产系统出现的问题不论级别,只要是客户发现的问题,对于客户来说,都是严重问题。

如果问题只是在小范围发现,损失还算小;如果是大范围出现,那么损失呈指数级上升。

所以不论是什么级别的功能性bug,也不论在代码里面是否只是一个数字比较的问题,在生产环境一旦爆发Bug,那么产品给用户的体验都是不好的。

任何人对待产品都应抱着完善完美的心态,包括开发和测试。

研发和测试过程中,不能掉以轻心,因为放过一个小问题有可能对用户产生大的问题。




转载请注明:http://www.xxcyfilter.com/zyjn/zyjn/15604.html