一个bug背景

在周三快下班的时候,临时接到需求,需要修改协议书模板,后端只需要修改脚本即可。由于周四是版本
上线的最后一天,所以建议不要修改,原因如下:

  • 每次发版当天的环境会很差,各个关联方环境极其不稳定;
  • 本身有很多需求都没全部覆盖测试;
  • 改完之后都需要走回归测试,测试同事有时间么;

但是组长觉得小小需求,测试负责人也说支持。最后妥协,修改了,当天就搞定了。周四开始回归测试,测试
同事测试出一个bug了,为说明此bug产生的缘由,说明一些简称:

1.客户级别L:(0:低;1:高);
2.数据源:

  • 客户OCR扫描完证件信息(A)

  • 本地数据库(B)

  • 客户预留信息(C)

  • 关系方的信息(D)
    3.渠道:A 和 B

    需求做一个比对,判断是否同一个人,此需求是小灰同事负责开发(同事之间需要和谐相处说,随意取名小
    灰。smile ),在此将简单写成伪代码,如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
      res = false
    // 块1
    if A then
    if A == B then
    res = true
    else
    res = false
    END
    END

    // 块2
    if L == 0 then
    // 块2.1
    if D 存在 then
    if A == D then
    res = true
    else
    res = false
    END
    else
    res = true
    END
    // 块2.2
    else
    if A == C then
    res = true
    else
    res = false
    END
    END
    return res

    周四测试同事发现低级别的客户,OCR扫的与本地库不同,居然也认为是本人,所以将bug给小灰和我。当
    时我看着日志,把数据对比的数据拿出来,写单元测试,发现确实如此。然后就叫小灰过来,给他讲了一下,
    发现的问题,A渠道来的在块1比较是不同的人,客户又是低级的而D数据不存,覆盖了之前校验的值,将其
    变为是本人了。后面他说:“不是很明白,回桌上自己想想”。最后他说改完了,移交测试了。由于我负责其
    他的需求开发,负责查日志,忙着就忘记去看小灰怎么改的。后面就上线了,由于小灰需要支持版本发布,
    周五调休。

另一个bug背景

周五一上班,大概10点多,收到很多邮件,一会查这个一会查另外一个。当天看到6笔报不是本人的异常,
赶紧查日志。拉取最新的代码,查完分析代码。小灰修改后的代码,改写伪代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
res = false
// 块1
if A then
if A == B then
res = true
else
res = false
END
END

// 块2
if L == 0 then
// 块2.1
if D 存在 then
if A == D then
res = true
else
res = false
END
//else // 小灰修改处
// res = true
END
// 块2.2
else
if A == C then
res = true
else
res = false
END
END

return res

分析出来是,B渠道,低级别客户,在数据D不存在的情况下,一直是非本人。所以与测试沟通造相关的数
据,复现生成问题。

bug修复处理

最后跟领导申请紧急版本处理修复,由于是由一个bug引起bug,问了如下三个问题:

  • 修改的代码是否有review
  • 测试同事是否有案例review
  • 是否负责人报备

我的回答都是否定的,当时发现第一个bug的时候,我跟测试负责人打了招呼,但是没有跟组长说,后面也没
有review小灰修改的代码。处理此事我司步骤如下:

  • 发邮件申请紧急版本给部门长;
  • 开发直属领导与部门长说明bug问题;
  • 修复bug
  • 测试回归
  • 发布版本
  • 生成验证

修改小灰的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
res = false
// 块1
if A then
if A == B then
res = true
else
return false // 修1
END
END

// 块2
if L == 0 then
// 块2.1
if D 存在 then
if A == D then
res = true
else
return false // 修改2
END
else // 修改3 仍旧加上
res = true
END
// 块2.2
else
if A == C then
res = true
else
res = false
END
END
return res

然后与组长一起review代码,影响业务比较大,所以需要快速解决,没有重构代码。好了之后,画好流程
图,给测试同事讲解,再告诉测试同事在测试环境造什么样的数据,让其一个分支一个分支的测试。上线之
后,自己又找人生产验证。

总结

问责的时候,心里面确实不舒服,不是我的错,为啥要我承担。 后面想想,自己也有责任,发现了bug,
没有和小灰一同修复。今天就把此两个bug回顾,总结如下:

  • 复杂的业务逻辑画好流程图,与测试同事一同案例评审;
  • 开发单元测试一定做足;
  • 不要逃避责任。