在一个交流讨论会上,开发对我说:“测试给我的印象,像是在鸡蛋里挑骨头。”我听后哈哈大笑,对他说:“如果鸡蛋是新鲜的鸡蛋,那不管我们怎么挑,也不会挑出骨头来;如果鸡蛋变质了,或者将要孵化成小鸡,不单是鸡蛋里挑骨头,而且还是鸡蛋里挑鸡毛了!。”

  当然,这只是一个玩笑,只是在这个玩笑的背后隐藏着开发对测试的误解,也隐藏着测试工作的本质。我可以理解他对测试的看法,因为很多时候,我们对产品的质量要求都非常严格,除了基本功能测试外,还会做性能的调优测试、异常测试,基本功能的bug比较容易修改,而且有依可循;但是,性能调优和异常测试出来的问题不那么容易解决了。有时候,在性能调优时有些问题的修改甚至会关联到整个流程的变动,改动多了,开发自然会觉得烦;而且,工程上对性能也无一个明确的需求,测试提出来的可以说是一个完善的建议,改了肯定会完善产品,不改也不会受责难,开发会不明白测试为什么偏偏那么追求完美;有些异常测试,工程上出现的几率是1%,为了这1%而大动干戈,开发自然会问这是否值得。除了异常以外,连日志的可读性、规范性,还有界面的友好性、易用性,测试也会要求开发力尽完美;作为开发,他自然会认为,功能实现了好了,为什么还有这么多可有可无的讲究?

  不过,从测试的角度来看,问题不一样了,测试必须对产品的质量负责。首先,要确保功能满足需求,功能有问题自然不能通过测试。其次,会考虑系统的性能和完善,在同类的产品中,大家都实现相同的功能,在功能上不同的厂家并没有太大的差别,但是,性能不一样了,好的设计好的产品性能会高上好几倍,在实际的运行中价值体现出来了。再次,对于异常,在大多数的情况下自然不会出现异常,但是是否可以确保永远都不会出现异常呢?当然不是,即使是只有万分之一的机会,异常也是会出现的,而且异常的出现往往会带来灾难性的后果,这又叫测试如何可以忽略呢?后,对于非功能性的问题,比如有助于日常维护的日志,客户使用的界面,这些虽然不是什么大问题,不修改也不影响功能的使用,但是却影响到了产品的使用效果,直接影响到了客户对产品的第一印象。

  测试与开发,还真要相互理解,如果一个产品在设计的时候考虑得比较完善,在实现的时候确保质量,那么,不管测试怎么挑也不会在一个新鲜的鸡蛋里挑出骨头了;但是,如果鸡蛋已经不是我们所期待鸡蛋,骨头自然会挑出一大堆。

  另外,从另一个角度来说,相对于其它测试人员来说,我的要求也真的太过完美,有时甚至有些苛刻。我自己也一直在思考一个度的问题,测试肯定不可能发现所有的问题也不可能把产品测试得非常完美,但是也要保证产品的质量,在两者之间应该有一个平衡的度,只是这个度该如何去把握?