注意我们提到了“角色”,角色是有人来扮演的,如果一人扮演了“开发”的角色,又能够来扮演“测试”的独立角色,当然很好。但是条件是她要以“独立”的心态测试,而不是想:“这代码就是我写的,哪会有什么错…”而草草了事。
那么独立的测试角色怎么才能发挥最大作用?从上面的坏现象中,我们不难总结出来。其实MSF原则都讲到了。
·充分授权和信任(Empower team members)
·各司其职,对项目共同负责(Establish clear accountability and shared responsibility)
有些成功人士和成功的公司号称没必要有独立的测试角色(Test),你怎么看?
我猜想和踢足球类似,还是那几个原因:
1、人太牛:
不世出的天才,例如高德纳写书的时候发现排版软件不好用,就自己写了一个。也没听说他为这个软件项目请了什么独立测试人员。对了,他不读email已经很多年,有秘书帮他处理这些事-这也是一种分工!
2、太小:
“我写了个小类库,全部自己测试”这当然不错。
我以前的一个优秀实习生后来一个人尝试写一些UI的控件,写得很高兴的时候说了一句“我现在软件工程的原则都不管了…”为了玩得爽,不妨打破束缚,诸法皆空,挺好。
但是顺水推舟,推广到所有情况,从而得出"程序员就应该自己测试,独立测试不必了"这样的普适结论,未免有点过。
3、人不够:
那就自己动手多做一些事情,也挺好。就像前面提到的,一个人扮演多个角色,只要能入戏就行。
4、条件特殊:
近年来,软件产业百舸争流,鱼龙混杂,在海里裸泳的弄潮儿也不少,出现了种种类型的分工合作和开发模式。不在有些情况下(例如一窝蜂模式,主治医师模式),强力的dev是可以搞定很多事情。运用之妙,存乎一心。
引起网上讨论的文章在这里:
http://www.quora.com/Is-it-true-that-Facebook-has-no-testers
其中打分最高的回答来自前雇员(Evan Priestley),他总结了Facebook这个公司为什么貌似没有全职测试人员:
a、全公司人员经常使用自己的软件产品!(如果你开发的软件是航天飞行某控制模块,你怎么能经常使用呢?)
b、使用log来分析问题可能出在哪里。(我们的一些程序员写程序都没有log,那大家看什么呢?
c、利用用户的反馈和实时状态分析(比较过去一小时和上周同一时间的数据来判断是否有bug)
d、应用开发商给Facebook报bug。(开发商其实比较不爽,但是FB有时就是无预警地修改API,你除了赶紧报bug,还能怎么着?
e、很多人自愿给Facebook报bug,这位贴主自称每月给他的前雇主报13,000个问题.(没错,是每月一万三千个!)
f、最后这位前雇员还加了一句:还有一个原因是,Facebook大体上也不需要搞出太高水平的软件。
当你的公司也能有a)到e)这样的文化,流程,开发商和给力的前员工,而且你的软件“大体上也不要太高质量”你的确不需要什么全职测试人员!
微软是怎么做的呢?
就像MSF原则讲的那样,有分工,有合作。
微软开发测试主要有三种角色:
·SDE: Software Design Engineer,简称dev。
·SDE/T: Software Design Engineer in Test,也写代码,但是重点在测试。
·STE: Software Test Engineer.
对于如何更有效地开发互联网应用,微软很多团队都做过不少探索。例如一些团队尝试把SDE和SDE/T合成一体。每个人都负责开发/测试/发布这一整套流程,根据我的观察,有好处,也有额外的成本。
结束
一位网友说得好:分工是社会和行业进化的结果。开发和测试其实是软件工程的两分支。不同的软件/服务需要不同方式和程度的测试。独立专业的测试等同于第三方代表客户对产品认证。
拉拉扯扯这么多话,团队/个人/角色到底应该怎么办呢?我认为:
·在初始阶段(新项目,团队进入一个新领域,人员刚进入一个项目),每个团队成员都要尽量打通各个环节,多负责,把所有事情都搞懂,培养通才。
·当项目/产业发展到一定阶段(进入阵地战的时候), 要大力提倡分工合作, 培养专才。
原文转自:http://www.uml.org.cn/Test/201306061.asp