在四月间,六月间分别在天津和北京参加了软件测试主题沙龙,在会上都讨论了同一个问题:什么是软件测试人员的核心能力?

  在天津的沙龙上,与会的测试经理和高级测试人员总结了十条,但是,没有写代码。

  在北京的沙龙上,不仅测试人员同意这个观点,一些程序员也指出,好的开发人员,他的核心技能不是写代码,而是对需求的把握,对设计的睿智,对品质的追逐。

  反过来看我们的测试人员,尤其是那些刚刚参加测试工作两三年,正在经历“迷茫期”的工程师,他们总在问同样的问题:是该学习Java编程吗?学习LoadRunner可以让我加薪吗?既然Google需要使用Python,是该系统的学习Python和Selenium吗?

  对这种问题我的回答都是:不,不,不。

  诚然,有人说“不会做开发的测试不会是的测试”,但是注意,开发并不只有写代码。乔布斯和首席设计师艾佛不会写Object-C代码,但是他们一样可以“开发”ipad,iphone。

  那么,软件测试工程师需要哪些技能,我们应该如何提高自己?我认为,测试工程应该学习成长为社会化的高级测试人员。

  测试工程师要像个真正的“人”那样的使用软件、测试软件。因为,除了极少数底层代码,一些自动化控制代码,绝大部分的软件终用户是人,而人是社会性的动物,所以我们的软件有社会性。我们的程序员和测试人员在做软件时经常忘记这一点。

  关于软件的社会性,我举两个例子。

  例子1:几年前坐公交时,和旁边的两位美女搭讪,聊起工作。她们开始吐槽自己的职业。原来她们是做银行一个信息中心的表单录入员。她们每天的工作是把纸质表单中的数据录入到软件系统中去。她们说:“我们每天早上大的期待,是运气,期待挑到一台好电脑”{她们没有固定的电脑设备}。而好电脑的定义是:用Windows XP的是好电脑;用Windows 2000的是烂电脑。因为,表单录入软件的某些按钮,在xp下只需要做单次点击,在2000下要双击。当录入一个表单时这很好,但是她们要处理将近3000个表单,这意味着用好电脑的人可以早下班,而用烂电脑的那个要加班。这个问题(注意,严格意义上说,都不能算bug,因为“客户没有明确这个需求”)对程序员来说,对测试人员来说,真的不算重要,我们只会点几次,看到完成了功能,声明通过了,但是我们考虑到真的部署以后,给客户带来的痛苦。

  例子2:一个听众讲了看病的例子,大夫给母亲开药的电子处方系统没有做限制,某个只能吃三天的药开了五天的量,幸亏在药房被发现,及时更改过来,否则可能造成人命关天的医疗事故。

  在可预见的未来,软件的用户还是人,所以对于测试人员来说,我们对软件的社会性考虑的越多,我们和用户贴的越近,我们的测试效果可能越好。这也是我个人反对现在的测试人员学习编程的潮流的原因:因为现阶段的计算机语言和编程基本上是“反社会”的:现在的计算机编程语言(哪怕是新好的高级脚本语言),其语法都和人类语言大相径庭;

  编程爱好者都熟练使用计算机,可以使用一些犄角旮旯的高级技巧(比如在Vim,Emacs 这些基于快捷键和字符命令的软件中上下翻飞),但是绝大部分社会成员不能;

  你在编程上花费的时间越多,你花在贴近普通用户上的时间越少;

  大部分编程者的目的只是构建功能,而非构建品质。

  在反过头去看软件业几十年的发展,几乎所有的成功的消费软件产品都是尊重用户的社会性的。例如,苹果公司在十年前开始构建软件易用性测试的量化模型;微软的Office绝不是效率高的办公编辑软件,但却是成功的软件,因为几乎所有人经过简单培训都会使用这个软件。

  如果把一个软件开发组拆开,需求顾问和项目经理需要考虑客户、预算、进度,程序员和开发经理需要考虑软件的实现,而测试人员则是少数可以真正考虑我们的“社会化”用户需要什么的人。

  那么,如何做一个社会化的测试工程师?

  第一,不应把测试局限在功能是否实现上,要更多的关注非功能性测试。

  如果看ISO 9126软件产品度量模型,我们会发现,软件功能性只是评价指标中的一个元素。除此之外,软件质量还由易用性、易学性、可靠性、效率、可维护性、部署特性等。我们当前的软件开发、设计、测试都过渡的关注功能是否实现,在花费大量的资源给软件堆砌功能以后,我们的软件变成了由树形菜单、和分级目录组成的怪兽。我们的每个测试用例都需要点击三级按钮才能找到功能页面。但是,我们是走在正确的道路上吗?我们忽视了一个很重要的事实,那是:用户不会用一个不好用的软件,即时它的功能正常。

  更不要说,文中第一个例子给用户带来的“伤害”。

  我三岁的孩子和七十多岁的奶奶一样可以用ipad,但是她们都无法在没有我帮助的情况下,从Windows7上找到想要的东西。

  再看树形菜单和分级目录的始作俑者,微软公司,其新的操作系统、Office、手机操作系统、UI都无一例外的抛弃了树形菜单,转而使用Metro UI。