• 谈谈今天遇到的一个坑爹的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又给我上了一课,要加强基础知识,多思考。
  • 相关阅读:
    再谈多线程编程(一)——线程的概念、多线程的创建、守护线程、线程状态的转化
    java创建线程的三种方式及其对比
    再谈Spring AOP
    初始化一个static的Map变量
    Spring AOP详解
    git命令汇总
    AngularJS如何修改URL中的参数
    VirtualBox安装Ubuntu搭建js环境的注意事项
    Sql server日期函数操作
    凤凰网股票接口
  • 原文地址:https://www.cnblogs.com/wqyn/p/8194476.html
Copyright © 2020-2023  润新知