谈谈今天遇到的一个坑爹的BUG

今天测试的同事给我提了一个BUG,BUG内容是在当设置工作流条件为某个数字、货币、百分比类型的字段‘发生改变’为‘0’时,这个工作流在该字段发生任意变化时被触发了,而原本应该是只有在该字段变为0时才可以触发。

接手这个bug,我先自己创建了一个工作流,分别用数字、货币、百分比在里面添加了3个条件,然后设置了通过条件组后执行的 任务。

因为我之前有修改过工作流和字段公式以及货币数字字段的BUG,而且我们的工作流模块很复杂,所以我一开始为了节省时间,直接找到最后执行这段条件组的文件中。 打印并且测试,忙活了半个小时,无果,沮丧+20。

然后只能老老实实的从保存操作开始找起,通过打印测试发现 字段的数据被保存了两遍,只有在第二遍中才保存了错误的值。然后从执行第二次保存的文件中往前查找,时间流逝。。。沮丧+30。 然后,通过跟正常保存的流程进行对比,发现是因为当改变任意数字时进行验证的时候直接验证为true然后直接执行了工作流中的任务。 进入这个验证当中查找,最终发现,是因为在里面的一个函数当中有一个判断 

  if (empty($value) {
return $hasChanged;
} else {
return $hasChanged && $fieldValue == $value;
}
其中$value 是我们在条件组中设置的满足当前单个条件的值, $fieldvalue是我们填充的值。
在这里我们设置的值为0,众所周知(很惭愧,我不知道),在php中,0会被判断为空 和false。
所以,在这个条件当中,当值为0的时候,我们直接进入了前面那个判断,返回了错误的值。最后我在判断中,添加了不为0的情况。BUG果然没有被重现。
历经2个小时,终于把这个BUG解决。
总结:虽然模块确实比较复杂,但是这其实只是一个比较简单的Bug.那么为什么会花费这么多时间呢,我总结了几点:
1.没有在完全理解bug的情况下就直接抄起键盘开始干,在我们看到这个Bug的时候,第一时间思考的应该是为什么0才会出现错误,而其他值不会。执行这个条件组的操作会在哪一步进行,验证又是在哪一步(这方面涉及到不清楚当前功能的逻辑结构)。
2.基础知识不足。如果是大神的话,一眼就能知道这个Bug是由什么造成的。
所以,这个Bug又给我上了一课,要加强基础知识,多思考。
posted @ 2018-01-04 17:18  minininja  阅读(185)  评论(1编辑  收藏  举报