3、简化问题报告。当发生用户报告时,他们初给出的步骤往往过于简化或者过于繁琐,缺乏直指问题所在的步骤描述。很多时候由于步骤不清楚,导致分析过程中存在很多弯路。这个时候需要有一个人来不停地和客户打交道并定位关键步骤。这个步骤总是必须完成的,那么谁来处置?有多少开发人员真正负责处理过这些?

  当然我知道很多程序员们会高傲地昂起头:这些我们都不需要。只要我保证每个函数是对的,后的软件必然是对的,所以只要单元测试够了。这种理论我不止听一个人说起过了,也实在是没法说清楚。我只能说这些信息是有很多人需要的,既然有人需要,得有人做。

  我承认,有些情况下我们确实不需要专门测试。这种典型场景实际上有一个很简单的前提,即软件本身不包含复杂的应用场景。比如单机软件,比如单服务器网站。但是这不包括那些本身需要复杂使用场景的软件,比如Exchange、比如Active Directory。这类包含集群和分布式要求的软件系统不是一个人花一个小时坐在一台电脑前试一试能做好的。

  当然,对于开源软件来说还有一个方法,是可以通过大量的发布让使用者做小白鼠。但是这不适用于所有的软件公司。对于一个app,也许崩溃崩溃了,反正也许无非是一条微博没发出去;可对于股票软件的服务器系统,你敢崩溃下试试看?我不知道在这里侃侃而谈水平不行可以做测试的人,是不是确实长时间负责过此类复杂系统。

  说了这么多,总结起来是一句话:测试和开发需要的技能有交集,但基本上是两个要求不同的岗位。开发技术不行去做测试,不等于你能成为一个好测试人员。

  当然,我也得承认一点。现在开发和测试分离的做法其实助长了一个倾向,是开发部门的一些程序员越来越不关注自己的程序质量,也不关心自己的程序是被如何使用的。我记得当初曾经在CSDN的微软测试专家群论坛上看过有人如此发言,他说一个产品到发布的那个时候对他来说是死掉了,他不再关心了。时间太久,我不记得说这话的人究竟是谁。但是我得说这代表了我认识的一部分程序员的看法。但这不是程序员的错,也不是分工的错。该指责的是无能的领导,他们设置测试这个职位是为了丢垃圾的,而没有能力把握两个角色的关系改进产品。这种无能的另一种倾向是雇用大量的测试人员,以为用人去堆能堆出好产品。他们忘记了,测试人员起到的是监控质量变化的作用,而不是提高质量。提高质量的办法是开发。

  丢包袱能让人轻装前进,但是只知道丢包袱是丢不出好产品的。

  另外,从我的经验上看,我承认测试人员对编码和算法的要求可以比开发低一些(现实告诉我,我这种成天直接给开发扔fix的测试即便在微软不是多数派),但我强调的是对编码能力的要求较低,不表示开发人员可以自动成为一个合格的测试。像随便拉一个战斗部队的人让他去负责炊事班,他不可能自动地做得很好一样。

  测试这个岗位有测试的能力要求,它和开发的主要差异是在于分析和统计的能力。测试的基本能力是能够严格地按步骤执行测试,这个确实是很容易入门的。但好的测试要求的不仅仅是这个。当一个人在测试到达一定程度的时候,他/她必须开始注意很多流程上的分析工作。我说的流程不是很多人想像的一个老板坐在那里要求手下人做事之前必须做这个做那个,而是对整个开发周期里质量变化趋势的把握,以及如何用合理的技术手段支持这种趋势的分析(比如回归,比如fuzzing,比如压力测试)。从这个意义上说,我承认测试本身是一个相对容易向管理转化的职位。但这本身是可以理解的,像建筑质量检查员必须了解建筑学常识,但不需要自己去画蓝图一样。反过来,他们需要强化交流和沟通能力以备出问题的时候可以有效地要求开发商承认问题,这不等于谁都能做这些事。

  其实开发在这个位置上也是一样的。开始面试的时候,只要是计算机科班出身大学又大学四年不太混事的,写个排序之类的算法都不是难事。但一个好的开发不是只会这些够的。当入行时间长了,开发必须开始注意领域知识(比如东哥近刚发布的Adaptive Wide Angle滤镜)、架构、设计(比如互操作性,微软已经被人骂了很多年了)等等东西。这些东西都和编码本身无关,但是成为一个好的开发必须掌握这些。这两个职位也许开始时能力要求接近,随着时间的发展则差异会越来越大。但这不是开发部门可以用来鄙视测试部门的理由。

  另一方面,也正是因为有了两个职位的差异,所以才会有兴趣爱好方面的区别。有的人一开始不理解测试这个职位,慢慢地越做越喜欢;有人试了之后还是觉得不符合自己的兴趣,所以选择离开。这都很正常。人各有志,这东西勉强不来。

  所以再次重申,测试不是开发的垃圾桶。不是说编码技术不行的人该搞测试去。如果一个人希望把开发作为自己的事业却能力不足,那么他能做的只能是提高开发技术,而不是靠测试混饭吃。

  当然了,如果确实是想在微软这样的公司做开发却发现暂时能力不足,申请做测试也是一种为自己争取机会的权宜之计。但是如果这样则更需端正自己的心态,要是觉得做测试是委屈了自己,那么接下来引发的不是技术问题,而是人事问题了。如果刚开始抱着一个混饭吃的心态,后到哪里都是混不下去的。