作为程序员,不可避免地会经历过下面的情况:

  你花费了大量心血辛辛苦苦地编写了一本程序,结果到了测试人员那里测试的时候,测试人员测了一阵子之后,提交给你一份测试报告,并说:“你里面怎么会有这么低级的Bug。”或者说:“你的程序里面的Bug好多,到底自己编写完了之后测没测试啊?”

  或者在国内项目中可能是这样的,你将辛辛苦苦编写好的程序拿给客户试用,客户用了一会儿之后,告诉你,“你做的东西根本不是我想要的。”或者直接给你的反馈是“不对,能否做好了之后再给我啊?”

  上面的两种情况都是作为程序员的我们不愿意遇到的。但是却又是不可避免的,尤其是在刚刚走上程序员岗位的时候(所谓的新手阶段,其实这也许是每个程序员都需要经历的一个阶段吧)。我们也都知道,作为程序员有时会把自己的程序看成是自己的孩子一样,有人说自己的孩子不好?第一反应是:不可能吧?!然后会和别人争论,你是不是……

  回想自己当初也是这个样子,很不服别人所指出的错误,总觉得自己做的东西是完美的,不可能出错,问题都出在别人的身上。而且会因为这些错误干扰自己的心情。

  其实这样是非常不明智的,当别人指出自己的错误的时候,第一反应不应该是去责怪别人,而是应该仔细反省自己,检查自己所做的工作,是否真的有问题。

  为什么我们可能第一反应会是别人的错误,而不是自己的程序出了问题呢?这是因为我们有时候会比较好面子,特别是对于心中认为知识水平没有自己高的人指出自己的错误的时候,尤其会这样。心中会非常不服气:哼!你凭什么说我做的东西有问题,你做得好你来做试试!并且认为问题不在自己,而是出在他人的身上。但是,如果有过相关的经历,我们会发现,十有八九的情况真的是因为我们自己的原因造成了错误。因此正确的做法应该是虚心接受,先仔细检查自己,然后再和测试人员或者客户进行沟通。

  对于我们自己的程序,我想可以在以下两个主要的方面进行检查:

  1、我们是否真正理解了用户的需求,是否从用户的角度为其设计并开发了程序。

  如果当初在编写程序的时候没有了解相关的业务,也没有仔细听取客户所提出的需求,那么很可能我们做出的东西在我们自己测试的时候不会出错,一切都按照我们自己预想的情况运行。但是一旦到了客户那里,由于根本不符合客户的工作习惯,会被他们认为是错误的。

  2、我们是否在编写了程序之后完成了相关的测试。

  这里的测试不仅仅包括正常数据的测试,而且还会包括非正常数据的测试,边缘情况的测试,也即是说,已经根据测试的原则选取了比较完备的测试用例。

  另外,除了单元测试之后,如果出问题的程序是与其他模块相关的话,还需要做整合测试,否则很可能出现的情况是,自己测试的时候没有问题,而别人测试的时候出现了问题。我曾经遇到过这种情况,修改一本程序,在自己这里测试已经都没有问题了,结果交出去之后,在其他环节运行出了相关联的问题,后果很严重。

  做了这些检查之后,多数时候我们会发现可能是因为忽略了某个环节,导致自己的程序出了问题,因为此时你还没有去指责别人,说那并非自己的错误,所以可以很简单地向他表示感谢,然后纠正自己的错误可以了。

  如果做了所有的检查之后,还是不能够发现他们所说的问题,那么接下来需要与测试人员或者客户沟通了。

  比方说,我们会问测试人员,你用什么样的数据进行的测试啊?能否帮忙给我演示一下,如果情况是可以重现的,那么我们会很容易地针对具体的情况进行调试,从而找到错误了。

  或者我们会问客户,你说我做的东西不符合你的要求,那么能否具体地说明是什么地方不符合呢?你的要求是什么样的呢?此时一定要抱着虚心学习的态度和客户交流,这样客户会耐心地和你讲解、说明,可能你还会学习到很多重要的业务知识呢。

  需要注意的是,此时我们向测试人员或者客户想要获取的信息必须是具体的,我们需要耐心地和他们说,请不要告诉我不对,也不要告诉我错误,我想知道的是你用的是什么样的数据,在什么样的情况下出的错,错误的表现是什么样的,你所想要的结果是什么样的等等,只有得到这些具体的信息之后,我们才能够做到有的放矢,有目的性地去解决问题。

  一旦在所有的情况都检查过了之后,真的发现时测试人员或者客户出了问题,我们也不需要大惊小怪,小题大做,比方说,用很不屑的语气告诉他们:“以后测我的程序小心一点儿,你知不知道我浪费了多少时间。”或者说:“你如果不懂的话不要乱说!”这样即便你在这个问题上表面上是胜利了,实际上却是一个失败者,因为你失去了和他们交流,从而成为朋友的机会,你会和测试人员或者客户成为冤家,以后不管什么事儿,都不会有任何的转圜余地,从而你以后的工作都会很难开展。

  我们应该做的是要宽容一些,人都是会犯错的,不要过分深究,可以说:“程序没事儿好了,你测试的还是挺仔细的。”或者和客户说:“这个问题可能是当初咱们考虑得不够完备,系统暂时的实现是这样的,如果你有好的建议还是可以告诉我的。”总之要表明自己的目的,是要让自己的程序的质量更高,更能够为业务所服务。这样的话,我们对别人宽容,反过来别人也会对我们宽容,并且在测试和检查的时候也会更仔细,我们的程序的质量会越来越高,一切都向着良性循环的方向发展。

  后说一句,这条原则其实不仅仅是做程序员所应该知道的,也应该是在生活中的各个方面所要做到的,让我们一起共勉。