技术债

3 篇文章 0 订阅
1 篇文章 0 订阅

总结一下今天排查出的一个bug

Technology Debt

如何发现bug

最近屡次有用户报告在我的网络应用上登陆失败,我听到这个感觉很不可思议,因为我的代码逻辑就是直接转发给第三方验证机构,我作为一个中介应该是最不应该出错的地方。所以我的第一反应就是用户输入了错误的用户名和密码。

跟一些用户交流以后,我劝他们再试一次,今天之前这种方法都成功了,于是虽然问题很奇怪,我也没觉得有太大问题。再加上问题无法重现,debug并不是我的选择。

然而今天又出了一次错误,我走到用户跟前看着他输入了一次,应用提示用户名密码错误,换浏览器、清缓存以后都不行,然而让他直接去第三方认证却通过了。这就证明了我的程序逻辑确实存在问题。最终我发现我的HTML代码中有两个id为password的input标签,这就导致jQuery有50%的几率取到空白的值,黄师傅连续多次失败确实挺倒霉,但还好有他,让我找到了root cause.

这次debug的一些措施我觉得值得记录下来,因为面对未知的问题,这些都是很有价值的探索方法。

Debug措施1,加logger

后端有一个转发用户名密码的API,我加入了logger,让它把每一次出错的用户名密码记录下来;也新学习了log4j的配置方法,让该API的log打在一个和普通log不同的文件里,方便查询。

虽然这个措施没有直接解决问题,但是在后续的debug中,logger是决策的基础,看log可以支持我们的猜测,也可以让开发者对于程序更有控制力。

Debug措施2,模拟用户操作

这个应用上需要用户验证的操作叫做“signoff”,这会直接通知所有相关人员这个issue已经完成,所以直接测试的风险是非常大的,我们应该另辟蹊径。

我们建立了多个用来测试该应用的issue,并通告同事这些issue都是用于测试,不需要关注。前段时间为了本地方便测试,我让程序能够基于配置文件来选择issue的数据源,一个选择是从正常通道得到,另一个选择是为了测试,让应用得到的所有issue都是我们自己建立的。由于HTTPS之类的环境差异,本地重现不出生产环境的错误,所以我们把配置文件加入了生产环境,快速测试了身份验证API,然后很快将配置文件改回原来的状态,以防止影响用户。

Debug措施3,分析前端HTML代码

这个方法很暴力,直接右击查看源代码,copy到Sublime Text里分析,这才发现有两个id一样的元素,找到了问题的root cause. 启发应该是每次发布前要用一些工具来测试自己HTML代码的合法程度,这种冗余id的情况明显是会有warning的,如果有好的工具提示的话,就可以避免该错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值