在此之前,我想说明一下我观点里的这个“专职 QA”是怎么定义的。
我经历过一些公司都有专职的 QA 团队(专职的测试人员),自从上个公司我的开发团队在一个项目上被 QA 部门搞得一团糟,我越来越怀疑专职 QA 存在在意义。我的观点不一定对,但请让我鲜明地表达一下——我觉得是不需要全职的 QA 的,甚至不需要 QA 这一专职角色或部门,因为,不懂开发的人必然做不好测试。就像不懂开发的研发经理必然管不好研发团队一样。我越来越觉得 Dev 应该应该是做测试最合适的人选,这必然是未来的趋势 (因为我已经看到了中国程序员的进步,相比起 10 年前,今天的程序员已经是非常全面了,再来十年,必然证明我的观点是对的)。
在我正在展开说明之前,我想引用两篇文章:
两篇文章
一篇是 “On testers and testing”(中文翻译),本文的作者 Sriram Krishnan 是一名程序员,曾在 Yahoo 和微软工作过,开发过很多软件,曾被纽约时报报道,写过一本书,本文是他的一篇博客。他在文章中表达了这几个观点——
大多数的开发团队并不需要一个独立的测试角色。即使要有,那么所有的开发时间比上所有的测试时间应该 >20:1的。。证据吗?光看看一些从古至今最成功的软件开发团队就知道了。不论是当今的 Facebook,还是 30 年前最初的 NT 团队,很多伟大的产品都是出自没有或很少测试人员的团队。
开发人员应该测试自己的代码。没什么可说的。背后的道理并不重要。这包括单元测试,全覆盖的自动化测试或手工测试或组合测试。如果你的开发人员不能/不愿意或认为这“不归我管”,那你需要更好的程序员。
另一篇文章是邹欣的“现代软件工程讲义 9 测试 QA 的角色和分工”,这是一篇很不错的文章。他在文章里提到了分工的必要性,比如第三方的鉴定机构,并且也指出了分工的一些问题,比如,画地为牢的分工,无明确责任的分工,等,这些问题直接命中了分工的要害。我隐约觉得,我和邹欣的很多观点是相同的,我们内容上是相同的,只是形式上还有分歧。另外,我的观点太鲜明了,从而容易导向极端的理解。
你看,我们都同意,Dev 要懂测试,QA 要懂开发,只不过分工不同,既然你中有我,我中有你,那就不要分彼此了,一起携手开发测试吧。(另外,我个人觉得不懂开发的测试人员不可能测试得好)
我的故事
我再说说我最糟糕的 QA 经历吧,这个公司的 QA 部门只做测试,他们的 leader 觉得所有的 test design 和 test 的过程都不需要 Dev 参与,他们是独立于 Dev 之外的部门,他们几乎不关心 Dev 的设计和实现,他们只关心能跑通他们自己设计的 test case。但是去执行 Test Case 的时候,又需要 Dev 的支持,尤其在环境设置,测试工具使用,确认是否是 bug 方面,全都在消耗着 Dev 的资源,最扯的是,他们对任何线上的问题不负责,反正出了问题由 Dev 加班搞定。
我有一次私自 review 他们的 test case 的时候,发现很多的 test case 这样写到 – “Expected Result:Make sure every thing is fine” ,WTF,什么叫“Every thing is fine”?!而在 test case design 的时候,没有说明 test environment/configuration 是什么?没有说明 test data 在哪里?Test Case、Test Data、Test Configuration 都没有版本控制,还有很多 Test Case 设计得非常冗余(多个 Test Case 只测试了一个功能),不懂得分析 Function Point 就做 Test Design。另外,我不知道他们为什么那么热衷于设计一堆各式各样的 Negative Test Case,而有很多 Positive 的 Test Case 没有覆盖到。为什么呢,因为他们不知道开发和设计的细节,所以没有办法设计出 Effective 的 Test Case,只能从需求和表面上做黑盒。
在做性能测试的时候,需要 Dev 手把手的教怎么做性能测试,如何找到系统性能极限,如何测试系统的 latency,如何观察系统的负载(CPU,内存,网络带宽,磁盘和网卡I/O,内存换页……)如何做 Soak Test,如何观察各个线程的资源使用情况,如何通过配置网络交换机来模拟各种网络错误,等等,等等。
测试做得也不认真,大量的 False Alarm,都是环境问题,比如:安装新版本后没有重启服务,没有使用新的配置文件,网络配置,等等,等等。
在项目快要上线前的一周,我又私自查看了一下他们的 Test Result,我看到 5 天的 Soak Test 的内存使用一直往上涨,很明显的内存泄露,这个情况发生在 2 个月前,但是一直都没有报告,我只好和我的程序员每天都加班到凌晨,赶在上线前解决了这个问题。但是,QA 部门的同学们就像没发生什么事似的,依然正常上下班。哎……
为什么会这样?我觉得有这么几点原因(和邹欣的观点一样)
注:我无意在这里贬低 QA 的能力工作。只是我看到了 QA 因为没有参与开发的一些现实问题。
我的观点
邹欣对于分工出现的问题给出了两点解决方法:
- 充分授权和信任(Empower team members)
- 各司其职,对项目共同负责(Establish clear accountability and shared responsibility)
我的观点是,理论上正确,操作上太虚了。这就像我们国家喊的“为人民服务”的口号一样,没有具体的方法,根本无法落实。
我无意在这里贬低 QA 的工作,我也无意因为这个事走向另一个极端。但是,我在现在公司的经历,还有很多新兴公司的做法,我越来越觉得软件开发,真的不需要专职的 QA,更不需要只写代码不懂做测试的专职的 Dev。观点如下:
1) 开发人员做测试更有效
很多开发人员只喜欢写代码,不喜欢做测试,或是他们说,开发人员应该关注于开发,而不是测试。这个思路相当的错误。开发人员最应该关注的是软件质量,需要证明自己的开发成果的质量。开发人员如果都不知道怎么做测试,这个开发人员就是一个不合格的开发人员。
另外,我始终不明白,为什么不做开发的 QA 会比 Dev 在测试上更专业? 这一点都说不通啊。
2)减少沟通,扯皮,和推诿
想想下面的这些情况你是否似曾相识?
如果没有 QA,那么就没有这么多事了,DEV 自己的干出来的问题,自己处理,没什么好扯皮的。
而一方面,QA 说 Dev 不懂测试,另一方面 Dev 说 QA 不懂技术,而我们还要让他们隔离开来,各干各的,这一点都不利于把 Dev 和 QA 的代沟给填平了。要让 Dev 理解 QA,让 QA 理解 Dev,减少公说公有理,婆说婆有理的只站在自己立场上的沟通,只有一个方法,那就是让 Dev 来做测试,让 QA 来做开发。这样一样,大家都是程序员了。
3)吃自己的狗食
真的优秀的开发团队都是要吃自己狗食的。这句话的意思是——如果你不能切身体会到自己干的烂事,自己的痛苦,你就不会有想要去改进的动机。没有痛苦,就不会真正地去思考,没有真正的思考,就没有真正的进步。
在我现在的公司,程序员要干几乎有的事,从需求分析,设计,编码,集成,测试,部署,运维,OnCall,从头到尾,因为:
所以,真正的工程师是能真正明白软件开发不单单只是 coding,还更要明白整个软件工程。只明白或是只喜欢 coding 的,那只是码农,不能称之为工程师。
4)其它问题
好吧,我暂时写这么多,我会视大家的讨论再补充我的观点的。
转自:http://news.cnblogs.com/n/138376/