这也就是分出大石头和小石头的过程。

一个大学哲学教授给他的学生做了一个实验,他拿了一个很大的玻璃碗,首先在碗里面放了些大石头,不一会碗里面就被大石头塞满了,当再也放不下一块大石块的时候,他和在场的学生们下了一个结论:碗被装满了,再也装不下大石块了。
接着教授拿出一些鹅卵石,他把一些鹅卵石和细小的石头放进碗里,正好填进了大石头的空隙里,尽管碗里已经被大石头占满了,但是还是有很多空隙可以放小石头,不一会空隙也被填满了,于是他和他的学生又做了一一个结论:碗被装满了,再也装不下小石头了。
这个时候,教授拿出了一包很细的沙子,试着往碗里面倒,结果细沙跑到了大石头、小石头的所有的空隙中去了,倒了相当的沙子以后,碗确实被填满了,于是教授及学生们再次做了一个结论:碗绝对是的被装满了,再也装不下任何东西了。
这个故事告诉我们,生活中所谓的重要事情是怎么对我们起作用的,因为假如我们不对我们生活或自己定下优先次序,那么其它人会代替你来做,而他们对你的生活定下优先次序的方法是:首先他们会在你的生活注满沙子,也就是那些在生活中不太重要的事情,如果你先在玻璃碗里装满了沙子,那么你还能放多少大石块呢?而在这里,大石块代表的是生活中最重要的事情,它可以是:你的信仰、配偶、家庭、或者健康,这些都是最重要的事情。如果我们先把这些最重要的事情放进去,那么我们还有空间去做一些没那么最重要的事情,如装卸房子等等,这以后才是沙子,就是生活中不重要的事情,不过你很可能还是要花时间去做的事情。
当教授做完这一切以后,一名学生站起来,打开一罐啤酒倒入沙子,说:“当一切都被填满以后,我们还有时间去玩乐。”

1. Do Testing

  • AdHoc 使用一下产品,看看这个产品有什么Regression的问题没有?
  • 设计一个Scenario,看看这样使用时产品有没有什么地方不太方便?

2. Good Coding Practice

昨天跟Dev lead一起调试一个Bug,Review他的Code的时候,他有很多很好的Rule在遵守,这些Rule可以有这些好处:

  • 代码的可读性好,易于维护;(一个Function只用于一个目的,哪怕一个函数只是简单调用了另外一个函数,其他什么都没做,这样为原来的函数增加新功能就想对容易而且不容易出现Bug)
  • 代码的逻辑清晰,容易理解;(如果是Error Case,用if + return;如果是Normal Case,则用If + else)

3. Find the best solution and tradeoff solution

这一点还是跟Dev Lead调试Bug时学到的,当你碰到一个问题时,你应该知道很多种解决方法,然后分析其中的优缺点,最后做一个决定。

  • 保持足够的耐心,去找到那个最好的Solution;
  • 不要为找到一个解决方法沾沾自喜,你知道它有什么不好处吗,最容易想到的答案往往不是最优的;

4. Bug Analysis and Add Regression Cases;

  • 新发现一个Bug,对这个bug进行分析,是什么Root Cause,要真实的理解为什么会出这个Bug;
  • 增加Regression Test Cases;

第一步非常重要,只有这样才能增长你的Experience;

 

5. Track Team Bug status

Go through team内的所有Bug,对于一些不太容易Repro和Critical的Bug进行跟踪,可以让自己对产品质量有比较好的了解。

  • 尝试Repro一些难以Repro的Bug;
  • 注意一下Critical Bug的状态;

6. 管理Test Cases

  • 如何组织Test Cases,可以让你对这个产品/Feature 有更好的理解,让某个Feature被改动时,可以快速地找到相关Case,并相应地增加或者删除Case;
  • 根据新发现的Bug,增加一些Test Case;

7. 深入理解Dev的Design

只有这样才能真正理解某个Bug为什么会出现,只有这样,才能在自己没有写多少Product Code的情况下,依然对产品非常熟悉。