这周准备下一个QA测试的版本,把版本发到测试环境就开始发现各种问题,修修补补搞了一周,总算告一段落了。
 
分析一下几个bug的问题,都集中在程序模块的整合中。一个模块的一个小的修改,造成另一个模块的连锁反应。这种bug在排查的时候非常花时间,因为往往程序出错和报错的地方并不是程序真正错的地方,对着本来就没有问题的代码一遍一遍的看是看不出来问题的。这次我们最后解决问题,用了一个笨办法。我们把从上一个版本到现在的有关的commit都看了一遍,最后在一个很不起眼的地方找到了问题。
 
在retro过程中,和同事讨论了一下以后如何减少这种bug的出现。
 
首先,当这种bug出现的时候,我们不应该纠结于我们认为问题在的地方。特别是当自己不确定的时候,我们最好找个同事一起来看。如果两个人四双眼睛半个小时都看不出来问题,这就很有可能是因为方向错了。这个时候,跳出来换个思路可能是更好的选择。
 
第二,因为单元测试已经把上下文的环境都固定了, 这种bug单元测试对它是无效的。回看这周遇到的bug,每个代码修改都有充足的单元测试,但是这些单元测试从假设就搞错了。对于这种bug,我们更需要有上下文的集成测试。写好和维护好集成测试是一个很大的工程,但是对发现这种跨模块的问题会很有帮助。同时,可以考虑使用一些BDD的测试框架,这些框架经过包装可以让QA对很多测试自动化。当有新同事的时候,让他们从集成测试中开始了解系统,也是很好的选择。
 
最后,我们在软件的设计和开发中还应该注意什么呢?通过对这几个bug的分析,我们认为代码在最初的设计中使用了很多继承来提高重用性,避免重复开发。这些代码经历了4,5年一代一代的程序员,现在已经过于臃肿了,很多最初的设计考虑也在人事更替中慢慢消失了。当一些代码进入维护期的时候,我们更希望它们小而精,这样的代码更加便于维护,也就更加容易修改,而更有生命力。相反,这种在当初强调高重用而设计的大而全的代码,反而非常难以修改,面对一个1500行的class,我们几个人经过讨论,最终决定推倒重建。 

一次程序bug的排查的更多相关文章

  1. 程序bug致损失400亿,判程序员坐牢? 搞笑我们是认真的

    号外!号外!走过,路过,不要错过!日本 IT 业的狗血八卦继续独家放送啦!! 2015 年 9 月 3 日,随着东京最高法院驳回瑞穗证券的上诉,维持二审的原判结果,一个长达 10 年的诉讼终于画下了句 ...

  2. Fundebug支付宝小程序BUG监控插件更新至0.2.0,新增test()方法,报错增加Page数据

    摘要: 0.2.0新增fundebug.test()方法,同时报错增加了Page数据. Fundebug提供专业支付宝小程序BUG监控服务,可以第一时间为您捕获生存环境中小程序的异常.错误或者BUG, ...

  3. 微信小程序bug记录与解决

    微信小程序bug记录 textarea textarea在模拟器上没有padding,可是在真机上会自带padding,而且在外部改不了,并且在安卓和IOS上padding还不一样 第一张图是在开发工 ...

  4. 程序bug导致了天大的损失,要枪毙程序猿吗?[ZZ]

    来自猫扑:程序bug导致了天大的损失,要枪毙程序猿吗? 0 引言 年会上Review 源代码算什么? 法庭上 Review code 才带劲..... 2015年9月3日,随着东京最高法院驳回瑞穗证券 ...

  5. 一个线上程序bug,由通用补数程序引起

    下游发现接口可用率非100%,马上线上查看,发现数据在有些情况下通用补数的数据是空, 有20%的用户是没有相应偏好等的数据的,需要通用补数来补数,结果通用补数没有数据. 通用补数数据的检查报警时必须要 ...

  6. 为什么我没有拔出钥匙 ——开锁引发的程序bug解决方案的思考

    http://blog.csdn.net/wojiushiwo987/article/details/8851204为什么我没有拔出钥匙                             ——开 ...

  7. 字符串比较,栈溢出引起的程序bug

    需求 输入密码字符串,与设定的密码“1234567”进行比较,两者相符则输出"congratulations!”,不符则输出“try again!”. 程序bug 实际运行过程中发现,输入某 ...

  8. Fundebug微信小程序BUG监控服务支持Source Map

    摘要: 自动还原真实出错位置,快速修复BUG. Source Map功能 微信小程序的Source Map功能目前只在 iOS 6.7.2 及以上版本支持. 微信小程序在打包时,会将所有 js 代码打 ...

  9. 发现程序bug思路

    大家有没有遇到过项目,程序出现个bug,但花了好久(真的是a long long time啊)才发现引发这个问题的原因,心想原来就这个原因导致的啊,要是早想到就好了! 其实我们确实的是方法,希望我的抛 ...

随机推荐

  1. XX公司在线笔试题编程题之一

    题目: #include <iostream> #include <vector> #include <string> #include <list> ...

  2. Python面向对象之私有方法(4)

    类里面有很多成员修饰符,用来修饰各种属性 (1)私有属性,只有内部的方法可以访问 class Foo: xo = 'xo'#表明是公共的,内部外部都可以访问 __ox = '私有属性'#私有属性,只有 ...

  3. Android数据储存之SQLiteDatabase SQLiteOpenHelper类的简单使用

    SQLiteOpenHelper 简介: SQLiteOpenHelper是一个借口!所以不能直接实例化!那我们想要得到SQLiteOpenHelper对象就需要实现该接口!创建该接口的实现类对象! ...

  4. chrome+postman测试rest请求

    1.在chrome安装postman 2.在chrome打开postman 浏览器输入:chrome://apps/ 选择你的postman 3.在你看到的postman中 normal中可以看到参数 ...

  5. Android EditText默认不弹出输入法,以及获取光标,修改输入法Enter键的方法

    一.Android EditText默认不弹出输入法的办法:1. 在AndroidManifest.xml中将需要默认隐藏键盘的Activity中添加属性即可(常用此方法) android:windo ...

  6. 【bzoj4710】[Jsoi2011]分特产 容斥原理+组合数学

    题目描述 JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望任何一个同学因 ...

  7. [MUTC2013][bzoj3513] idiots [FFT]

    题面 传送门 思路 首先有一个容斥原理的结论:可以组成三角形的三元组数量=所有三元组-不能组成三角形的三元组 也就是说我们只要求出所有不能组成三角形的三元组即可 我们考虑三元组(a,b,c),a< ...

  8. BZOJ 3462 DZY Loves Math II ——动态规划 组合数

    好题. 首先发现$p$是互质的数. 然后我们要求$\sum_{i=1}^{k} pi*xi=n$的方案数. 然后由于$p$不相同,可以而$S$比较小,都是$S$的质因数 可以考虑围绕$S$进行动态规划 ...

  9. Linux系统——机制策略(一)

    机制策略(一) 形而上谓之道:形而下谓之器: ————易经 LinuxUnix设计理念提供的一种机制不是策略:1.如果说机制是一种框架,那么,策略就是填充框架的一个个具体实施.机制提供的就是一种开放而 ...

  10. 爱之箭发射(las)

    爱之箭发射(las) 目描述 小海是弓道部的成员,非常擅长射箭(Love Arrow Shoot).今天弓道部的练习是要射一棵树.一棵树是一个nn个点n−1n−1条边的无向图,且这棵树的第ii个点有一 ...