我们说,人是人他妈生的,妖是妖他妈生的,而软件是测试员生的。
  爸爸妈妈在备孕时,很多爸爸会戒烟戒酒戒加班,所谓封山育林也。妈妈会补叶酸测排卵期计算佳受孕时间……总之一句话,优生优育。可是,孩子出生后依然会有毛病,随着孩子长大,各种毛病都会显现出来。有的孩子有先天缺陷,比如原发性高血压、先天性心脏病、兔唇、痴呆、智障……有的孩子长着长着有毛病了,近视、斜视、小儿麻痹、跛脚、自闭症……作为父母,这都是我们很难接受的事实,可是必须面对和接受。
  软件是测试员的孩子,在生它之前,你可曾封山育林、可曾熟悉自己的生理周期?哇哈哈哈哈,太扯淡了不是!包不同(《天龙八部》中慕容复四大家臣之一,非常有趣)摇摇头说,非也非也。然也!开发软件其实也要经历这些过程,更重要的是,我们一定要意识到:
  测试员在生产软件,也在生产BUG!
  再牛逼的测试员,写出来的软件也有BUG。BUG是软件与生俱来、不可脱逃的好基友,在那场说走走的旅行的一开始,它们情根深种难分难舍了……
  So,Bug是测试员写出来的……
  不管你愿不愿意承认,事实是这么令人沮丧。连Maurice Wikes都承认了这一点,你别倔犟了吧亲。
  测试员对Bug的态度
  每个测试员都是不同的……
  不可能……
  测试MM对阿猿说发现了一个Bug。
  阿猿矢口否认:不可能,不可能!
  MM:真的有Bug,你过来看一下!
  阿猿:我都不用看,在我这儿好好儿的。
  MM:你来看一下嘛……
  阿猿:看什么看,我都测过的,没问题。
  伴随着凳子响,阿猿不情愿的起身,脸上不耐烦的表情,心理却嘀咕着怎么回事儿呢这是……
  过了一阵儿,阿猿不好意思的声音响起:真没想到是这儿的问题……你怎么测的……一般用户都不会这么用的……
  耶,你找到Bug啦
  测试MM袅袅婷婷地走到阿猿跟前,小声说:你来我这里看个现象。
  阿猿:好,马上来。
  阿猿立马起身跟MM走了,过了一会儿,响起阿猿的声音:哇,你太厉害了,这种问题都被你发现了,我测了很长时间都没测出来,太好啦!
  然后大家看见阿猿脚步轻快地走回工位,边走边频频点头,两只手像得了帕金森一样来回划拉,嘴里神神叨叨的念念有词……
  结果到工位上时,阿猿一拍额头,小声说:知道啦,原来是这样。
  过了两分钟,阿猿找MM说:问题解决了,是这么这么回事儿……
  MM一脸崇拜的看着阿猿:你太厉害了,这么快解决了!然后小声说:大家都像你好啦……
  阿猿说:有什么问题立即叫我看。
  我很忙,没空管Bug
  测试MM想在jira上提个Bug,先在QQ上对阿猿说:有个Bug,你过来看下?
  阿猿:忙着呢,焦头烂额的。
  MM:一分钟都用不了,你来看下吧。
  阿猿:思路一打断不好恢复了,等会儿!
  MM:你不看我提到jira上了啊。
  阿猿:随便,你不是爱提Bug嘛。
  ……
  One day,团队review Bug,TL问阿猿:这个Bug怎么回事儿?
  阿猿挠挠头:我也不知道啊。转身问MM:咋回事儿,提Bug也不通知我一声儿,我都不知道怎么回事儿。
  MM:当时给你说你没时间看,后来……
  阿猿:行啦行啦,我待会看,以后提Bug要通知我一声。
  MM无话可说,只能用满含幽怨的眼睛锁定阿猿,直到阿猿别过头去……
  都是需求的错?
  阿猿收到了来自jira的邮件,他被告知有一个Major级的Bug,看了之后,黎叔很生气,后果很严重——阿猿转身喊:MM,怎么回事啊你,给我提了个Major级的Bug,明明是需求问题啊!
  MM赶紧过来确认:哪个Bug?
  阿猿气呼呼地一指电脑屏幕:这个,需求问题,你仔细看看,别老给我整这种Bug。
  MM:咱们找需求文档看看……
  ……
  MM:你看,需求是这样描述的……
  阿猿:需求描述有问题,实现起来太复杂了,也没意义,谁会这么用啊。
  MM:我是按需求写的用例……要不咱们和产品经理一起讨论一下?
  阿猿:算啦算啦,麻烦,先不管啦,到时再说!
  ……
  还没好,怎么会!
  begin:
  MM:阿猿,你提交的版本有问题,Bug还没好……
  阿猿满脸自信:怎么会,我都测过了,各种情况都考虑到了。
  MM:真的,不信你来看。
  阿猿:看看,你告诉我你怎么测的……
  MM:这样进来,这点一下,马上再点一下,趁那个按钮还没刷出来,再点,然后报“XXX已停止运行”。
  阿猿:用户不可能像你这么用!
  MM:可能。
  阿猿:不可能,我从来没这么用过。
  MM:我先给你Reopen,你再改改吧。
  阿猿:不要Reopen,根本没问题。
  MM:我都遇到了……
  阿猿:算啦,你别Reopen,我先改改,马上给你一个新的版本。
  过了几分钟,阿猿提交了版本。
  goto begin;
  测试环境没问题!
  经过多次延期,经过几个晚上的集体猛搞,软件终于发布了,大家都送了口气儿,第二天都休假去了,只有阿猿留了下来。
  刚上班,阿猿被气急败坏的老板叫到办公室:赶紧把版本回退回去,摊上大Bug啦!
  阿猿一脸无辜:测试都没问题啊,什么Bug?
  老板:两个小时,升级了800多个用户,有40多个电脑死机的!
  阿猿:不可能啊,测试环境都测过了……
  老板:赶紧停止升级,下线版本!
  老板还说:一切皆有可能,一定不能忘记李宁。你们是太大意了,没有好好测,都不当回事儿。
  阿猿:其实大家也是蛮拼的,都搞了好几个通宵啦……
  老板:赶紧下线,拼不拼不重要,没问题是目标。
  阿猿:要不我们联系几个用户,升级测试一下,重现了好定位问题!
  老板:哪个客户愿意当小白鼠!赶紧下线!你们自己想办法,多用点心,别不当回事儿,我们都被告到消协啦,这样下去早晚玩儿死。
  阿猿:测试环境真测不出来……
  阿猿面对老板喷火的双眼,心有不甘转身出了办公室,嘴里念叨着:为毛生产环境总是出问题呢……
  怎样才能告别Bug?
  有人说提高代码质量,参见《代码大全》。
  有人说提高自我修养,参见《测试员修炼之道:从小工到专家》。
  有人说提高效率,参见《高效测试员的45个习惯》。
  有人说……
  其实,这个问题早在唐代被白居易盖棺定论了。《长恨歌》大家都知道吧,其实它描述的是唐明皇的Bug引起的故事。
  唐玄宗是一国之君,前几年干得很不错,软件运行正常,开创了“开元盛世”,大家都以为这款软件很不错,不会出现Bug,可是后来外部环境变化,玄宗的爱妃死了,他心伤之际被儿子的媳妇杨玉环所惊艳,终于偏离了正常运行轨迹,造成了长达八年的“安史之乱”。你看,这是大Bug的大影响!
  的软件也会随着外部环境的变换而老化,终不能满足用户需求或者无法按预期工作。
  唐玄宗满足的是《Software Testing》中的这一条:
  The software does something that the product specification says it shouldn’t do.
  在皇帝的说明书里,爱上儿子老婆继而扒灰终导致王朝更替这种事情是不被允许的。偏偏唐明皇这么干了……这是他在经历了长达数年的运行期之后暴露出来的大Bug!有些Bug是酱紫的,要运行N久才会出现。