我的入职指导老师,是部门最优秀的测试人员之一,负责测试业务最复杂的模块,是非常认真、负责的人。因为跟着她学测试,对她自己负责的模块,我也会去看一下。偶尔会发现,她刚测试完毕打到harvest release阶段的包,程序有个小问题。她肯定也意思到了单人测试(Single Testing),测试遗漏很难避免,但是没有找到更好的办法解决这个问题?让一个测试人员去测试另一个测试人员测试过的测试样品,还是可能测试出问题的。
我身边的开发人员已经开始研究我的思维和他们有什么不一样了,我对此赋之一笑。其实,我认为,开发人员和测试人员没有什么不同,不相信什么开发人员正向思维、测试人员逆向思维之类的话。好比相向而行的人,每个人看对方和自己方向相反,可每个人都在按自己的方向前进。人都是创造性的动物,开发人员创造软件产品,测试人员创造性的发现软件中的缺陷。人又是不完美的,开发出来的软件含有缺陷,测试后的软件还有测试遗漏呢。当开发人员都在关注结对编程的时候,我们应该关注什么,来解决单人测试带来的测试遗漏这个问题呢,结对测试行不行?
结对编程(Pair Programming)是一个非常简单和直观的概念:两位程序员坐在同一台电脑前合作完成同一段代码。两个程序员具有相同的缺点和盲点的可能性很小,所以结对编程会获得一个更优的解决方案。类似的,结对测试(Pair Testing)能不能让两个测试人员结对呢?工作经验、教育经历、看问题的角度、思维方式的差异肯定能让我们在测试同一份测试样品的时候,取长弥短、优势互补,减少测试遗漏。
如果结对测试,那么我们应该怎么做呢?
两个测试人员使用同一台电脑,大家肯定都反对。测试人员数量不足,使用同一台机器反而降低效率。
但必须做到的很核心的一点,两个人共同负责同样模块的测试,当harvest包打到测试阶段的时候,两个人同时在各自的机器上按自己的想法进行测试,一个测试人员发现问题后必须和另一位测试人员进行有效的交流沟通。两个人都测试通过后,共同出具测试报告。
结对测试---也未必一定是两个人,多个测试人员合作共同测试的时候我们就称之为结队测试(Mutiple Testing)吧---会带来什么优势呢?
测试人员都是很敏感的,在自己执行测试的时候,程序稍有一点反常,都会意识到可能是缺陷,一定会去究根追底,去确认到底是缺陷还是操作问题引起的。当测试人员互相交流发现的缺陷的时候,可能会互相启发去发现更多的缺陷。一个测试人员发现了一个缺陷,另一位测试人员可能发现和这个缺陷类似的更多缺陷。
帮助测试人员熟悉更多的业务。结对测试前两个测试人员可能分别熟悉SCM、SRM模块,结对后就需要都熟悉这两个模块了。表面上需要熟悉的业务多了,事实上两个测试人员测试,比一个人单独测试要省一半的时间,而且效果更好。对业务的熟悉,可以让我们更好的执行测试。
避免测试疲劳现象。两个人搭配进行结对测试,可以共同克服遇到的困难,分享发现缺陷的成就感,工作会变得更加有趣,也会更有效率。
有利于工作量的平均分配。一个测试人员测试一个模块时,有时候测试任务比较少,有时候测试任务比较多。两个测试人员测试两个模块,这两个模块任务都比较多的概率是很小的,当一个模块测试任务比较多,另一个比较少的时候,这两位测试任务的工作压力就没有结对前那么大了。