你是如何开始做测试工作的?

  1989年,我在田纳西大学读研究生的时候,完成了从软件开发人员到软件测试人员的转型。而这一转型并非出于我自己的选择。我命运的改变发生在一个早晨,我的教授质问我为什么缺席那么多开发会议。我解释说因为会议被安排在星期六早上,很不方便。

  而怍为一个生平第一次离开家的新入校的研究生,这个时间段有些麻烦。十分有意思的是,等待我的惩罚并不是一纸解聘通知书,而是被判罚为该小组的一个测试人员,且不能与开发团队有任何交流。

  对于我的职业生涯来说,这是一个意义多么重大的决定啊!正是这个决定终成了几十篇关于测试的论文,构建了多得连我自己也记不清的各种工具,出版了五本书,带来了无尽的快乐工作时间。测试一直是我拥有的那份具有创造性和技术挑战性的快乐职业。不过,并不是所有人都喜欢这样。可以说我早接触测试是在攻读研究生期问,不可否认,那时的高强度学习和工作确实让我受益匪浅。另外,我认为从初学者阶段到专家阶段之间存在着一个“测试的山峰”,人们需要通过一系列个人辅导、获取信息和接受常规指导来翻越山峰。成为一个测试初学者是很容易的,成为职业的测试人员也并不艰难。本章的重点正是讨论如何翻越那座位于职业测试人员和测试专家之间的山峰。

  回到未来

  在软件测试领域,时间似乎已经停滞了。我们在21世纪做事的方法与上个世纪几乎完全相同。Bill Hetzel在1972年出版的测试知识丛书至今仍然相当有价值。而我自己所写,于2002年首次出版的How to Break Software(如何攻破软件)系列,到仍被作为实用软件测试技术主要资源的代名词。

  确实,如果我们可以把20世纪70年代的测试人员转换时空用在,我猜想他们的的技巧足够应付现代软件的测试。当然,他们需要学习网络和各种网络协议,但是他们拥有的实际测试技术将能得到很好的应用。如果从20世纪90年代找一个测试人员,则不几乎不需要任何训练。

  对于开发人员来说,却不是这样,他们所掌握的那些上世纪的技巧几乎已经完全过    时。让一个有一段时间不写代码的人重新开始编程,看看会有什么样的反应。让我感到很不安的是,我们可以从马路上直接雇用人手,而雇来的这些人从第起能够测试,能够有收获。事情真的有那么简单吗?或者是我们的期望值只有那么低?让我更加不安的是,我们没有任何可预测的方式将合适的测试人才从胜任工作状态训练为测试专。测试真的那么困难吗?

  这又是那个山峰了。门槛很低,但通往精通的道路却很艰难。

  在通往测试山峰的入口,我们倚仗的是这样一个事实:测试的很多方面都很容易掌握。大多数人都可以学得有模有样。甚至只要将一点点常识应用于输入的选择,可以,我出缺陷。这个层次的测试如同在桶里钓鱼,简单到足以让任何人都认为自,自己很聪明。然而过了入口以后,道路迅速陡峭起来,而测试知识变得越来越晦涩难懂。我们发现有人擅长于此,我们称这些人为“有天赋的人”,并欣赏他们的本能。

  难道一定要依靠本能么?对于那些看起来不具备特长的人们,是否存在着一条翻越山峰的途径?是否可以以某种方法传授测试技能以培养出更多的专家呢?为认为这座山峰是可以通行的,而这一章正是我关于应该如何走这条路的笔记,你可以在自己的职业生涯中加以应用。这并不是一份食谱配方,一份职业生涯烹调书。不过你可以做一些事情来加速你的职业成长。但是,正如你可能已经猜到的,真正是说来容易,做起来难。

  上山

  测试职业的早期阶段主要是为征服测试山峰的漫长攀登做准备。我所能给出的好的建议是从两个方面来思考问题。对于你参与的每一个项目,都有两部分(不一定相等)的任务。第一部分的任务是保证当前的测试项目获得成功。而第二部分的任务是学习你应该做些什么以便使下一个测试项目更加容易。我把它称为“测试的项目,准备明天的项目”。如果你做每一个项目把它都分割成为上述的两半,那么几乎可以保证你能持续获得进步。这样,你可以随着每一个参与的项目逐渐成长为更的测试人员。

  现在让我们来关注第二部分的任务------为下一个项目做准备。我们需要注意三个概念:重复、技术和漏洞。

  重复

  做任何一件事,绝不要重复两次而不意识到或质疑这其实是个问题。我希望所有年轻的测试人员都牢记这一点。我见过很多初学者,他们在单调的任务上浪费了太多的时间,比如,设置测试机器,配置测试环境,在实验室里安装待测试的应用程序,选择一个产品版本来测试-这些任务列表可以变得很长,后你会发现真正花在测试软件上的时间少得可怜。

  这是许多新手常犯的错误。他们没能看到他们日复一日所做的工作的重复本质,儿当他们意识到这种重复时,几个小时已经过去了,而在这几个小时内他们没有做任何实际的测试工作。关注这些重复劳动,并且留意由此造成的真正的软件测试工作时间的流逝。为了能翻过测试的山峰,必须做一个测试人员应该做的工作,而不是实验室管理员或者测试机管理员的工作。

  测试自动化是解决重复劳动的方案,也是本章稍后的主题。