开发人员与测试人员的“角色冲突”
公司曾经举行过一次关于软件质量的讨论,会上测试组领导和部分成员抱怨开发组的“不合作”态度,而开发组成员由于没有被点名而三缄其口,仿佛“任你风吹雨打,我自岿然不动”。由于事不关己(不是一个项目的),我在会上也没有说什么,不过总觉得哪里不对劲,会后也思考过,却一直没有形成清晰的想法。最终促使我写下这篇文章的是后来的一次经历,坐在我旁边的老兄(我和他不是一个项目的)受到两名测试人员的轮番质询,在他提出了非常令人信服的理由(至少在我看来)之后仍不能让测试人员走开,因为每当测试人员看似山穷水复、理屈词穷之时,他们就搬出那条屡试不爽的“理由”:但用户并不会这样认为……。
这一次,我终于弄明白问题出在哪里了。
当教师被誉为“人类灵魂的工程师”,2004年却出现了最大的讽刺,某地出台规定——“严禁奸污女生”;当医生被誉为“白衣天使”,患者却不得不接受红包现象和恶劣的服务态度;当公务员被誉为“人民的公仆”,百姓看到的却是一副副高高在上的嘴脸。实际上,越是企图美化、神圣化一个职业,该职业的从业者做出的违反职业道德的行为越是容易引起注意、越是难以忘记。今天,这样的尝试再一次出现,测试人员被誉为“软件质量的守护神”,和“用户利益的代言人”。
神圣化一个职业或职位是不恰当的、也是很危险的。对于一名测试人员来说,实力才是使其成为软件质量守护神或用户利益代言人的根本原因。在这样的语境里,角色是没有任何意义的。测试人员经常被要求“站在用户的立场上想问题”,这句话是否正确,完全取决于怎么理解。如果认为任何人都具有“站在用户的立场上想问题”的能力,缺少的只是态度,那么你就错了。一个拙劣的测试人员不仅无法确保软件质量,反而是资源浪费的最大源头、是用户利益的最大侵害者。当开发者与一个(或一些)看不清问题的本质偏偏还要言必称“我们要站在用户的立场上考虑”的测试人员一起工作时,发生冲突也就在所难免的了。测试人员经常被教导的另一句话大概是“把用户当成白痴”。对于一些通用软件来说,也许由于用户水平参差不齐,即使按照字面含义理解也不会错到哪去,但是对于系统软件来说,用户水平不成问题,白痴是不可能找到这样的工作的。我想这句话的本意应该是不要把简单的事情弄复杂,或者是如果能够操作简单方便,用户甚至愿意牺牲一些其它因素。不加分析地照搬照抄人家的话语或行动,不仅显得缺乏创造性,而且缺乏洞察力。
冲突不仅仅由能力不足引起,不受监督的代理关系也是一个重要的原因。不少测试人员自诩为用户的代言人,要为用户的利益负责。这种行为一般被称为代理,然而,在缺乏监督的情况下,代理人可能假借被代理人的名义寻求自身利益。在没有与用户充分交流的前提下臆想、甚至捏造需求以实现个人目的的行为简直是没有半点职业道德。
实际上,意见不一致的现象在哪里都有,即使是开发组内部也经常争得面红耳赤,然而,很少有人觉得这是个问题。之所以开发人员与测试人员之间的“角色冲突”常常引起人们的激烈反应,是因为不少人将两者之间的关系想象成包身工与拿摩温。基于这样的假设,很难置疑测试人员的提议,而开发人员在不受信任的环境下是难以发挥其最大潜力的。我更愿意认为两者之间的关系与足球场上前锋与后卫之间的关系类似,分工完全是基于战术上的需要,没有人希望输掉比赛。
当然,并非所有的问题都来自测试人员,我们组就有一位非常优秀的QA,大家在一起工作非常融洽,他的实力赢得了所有人的尊重。文本想说的是,当测试职位被注入过多的感情因素后,置疑其行为合理性总是显得底气不足,这是不正常的。也许,把人分为开发和测试两部分本身就是不恰当的,这种分类基于一种充满着不信任的文化。在XP里,测试具有非常重要的地位,却很少有(至少我没有看到过)关于测试角色的言论,我想,XP大概是一种截然不同的文化,是一种以人为本的文化。