我们需要专职的QA吗?
这个文章必然是有争议的,我在我的微博上讨论过很多次了,每次都是很有争议的。有不同的观点,有争论总是一件好事,这样可以引发大家的思考。所以,对于我的这篇博文,如果你赞同我的观点,我会感到高兴,如果你会去认真地深入思考,我也会高兴,如果你反对,没关系,可以讨论。
在此之前,我想说明一下我观点里的这个“专职QA”是怎么定义的。
- 其是很多公司成立的专门做测试的技术人员,仅测试不开发。
- 这些QA对于软件开发技术并不熟悉,甚至不懂。
我经历过一些公司都有专职的QA团队(专职的测试人员),自从上个公司我的开发团队在一个项目上被QA部门搞得一团糟,我越来越怀疑专职QA存在在意义。我的观点不一定对,但请让我鲜明地表达一下——我觉得是不需要全职的QA的,甚至不需要QA这一专职角色或部门,因为,不懂开发的人必然做不好测试。就像不懂开发的研发经理必然管不好研发团队一样。我越来越觉得Dev应该应该是做测试最合适的人选,这必然是未来的趋势 (因为我已经看到了中国程序员的进步,相比起10年前,今天的程序员已经是非常全面了,再来十年,必然证明我的观点是对的)。
在我正在展开说明之前,我想引用两篇文章:
两篇文章
一篇是 “On testers and testing”(中文翻译),本文的作者Sriram Krishnan是一名程序员,曾在Yahoo和微软工作过,开发过很多软件,曾被纽约时报报道,写过一本书,本文是他的一篇博客。他在文章中表达了这几个观点——
大多数的开发团队并不需要一个独立的测试角色。即使要有,那么所有的开发时间比上所有的测试时间应该 >20:1的。。证据吗?光看看一些从古至今最成功的软件开发团队就知道了。不论是当今的Facebook,还是30年前最初的NT团队,很多伟大的产品都是出自没有或很少测试人员的团队。
开发人员应该测试自己的代码。没什么可说的。背后的道理并不重要。这包括单元测试,全覆盖的自动化测试或手工测试或组合测试。如果你的开发人员不能/不愿意或认为这“不归我管”,那你需要更好的程序员。
另一篇文章是邹欣的“现代软件工程讲义 9 测试 QA 的角色和分工”,这是一篇很不错的文章。他在文章里提到了分工的必要性,比如第三方的鉴定机构,并且也指出了分工的一些问题,比如,画地为牢的分工,无明确责任的分工,等,这些问题直接命中了分工的要害。我隐约觉得,我和邹欣的很多观点是相同的,我们内容上是相同的,只是形式上还有分歧。另外,我的观点太鲜明了,从而容易导向极端的理解。
你看,我们都同意,Dev要懂测试,QA要懂开发,只不过分工不同,既然你中有我,我中有你,那就不要分彼此了,一起携手开发测试吧。(另外,我个人觉得不懂开发的测试人员不可能测试得好)
—- update—- {
//本篇文章出来后,网上出现了一些对此讨论的文章,我一并更新在这里
【 《对《我们需要专职QA吗?》的回应》作者:@段念-段文韬 】
【 《关于“我们需要专职的QA吗”》作者:@Jacky郭 】
【 《我们需要专职的QA吗?(评)》作者:@Monkey陳曄曄 】
【《 《我们需要专职的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没有体会过软件质量出问题后的痛苦(解决线上问题的压力),导致QA不会主动思考和改进。
- QA对Dev的开发过程和技术完全不了解,增加了很多QA和Dev的沟通。
- QA对软件项目的设计和实现要点不了解,导致了很多不有效的测试。
注:我无意在这里贬低QA的能力工作。只是我看到了QA因为没有参与开发的一些现实问题。
我的观点
邹欣对于分工出现的问题给出了两点解决方法:
- 充分授权和信任(Empower team members)
- 各司其职,对项目共同负责(Establish clear accountability and shared responsibility)
我无意在这里贬低QA的工作,我也无意因为这个事走向另一个极端。但是,我在现在公司的经历,还有很多新兴公司的做法,我越来越觉得软件开发,真的不需要专职的QA,更不需要只写代码不懂做测试的专职的Dev。观点如下:
1) 开发人员做测试更有效
- 开发人员本来就要测试自己写的软件,如果开发人员不懂测试,或是对测试不专业,那么这就不是一个专业的开发人员。
- 开发人员了解整个软件的设计和开发过程,开发人员是最清楚应该怎么测试的,这包括单元测试,功能测试,性能测试,回归测试,以及Soak Test 等。
- 开发人员知道怎么测试是最有效的。开发人员知道所有的function point,知道fix一个bug后,哪些测试要做回归和验证,哪些不需要。开发人员的技术能力知道怎么才能更好的做测试。
很多开发人员只喜欢写代码,不喜欢做测试,或是他们说,开发人员应该关注于开发,而不是测试。这个思路相当的错误。开发人员最应该关注的是软件质量,需要证明自己的开发成果的质量。开发人员如果都不知道怎么做测试,这个开发人员就是一个不合格的开发人员。
另外,我始终不明白,为什么不做开发的QA会比Dev在测试上更专业? 这一点都说不通啊。
2)减少沟通,扯皮,和推诿
想想下面的这些情况你是否似曾相识?
- QA 做的测试计划,测试案例设计,测试结果,总是需要Dev来评审和检查。
- QA在做测试的过程中,总是需要Dev对其测试的环境,配置,过程做指导。
- QA总是会和Dev争吵某个问题是不是BUG,争吵要不要解决。
- 无论发现什么样的问题,总是Dev去解决,QA从不fix问题。
- 我们总是能听到,线上发生问题的时候,Dev的抱怨QA这样的问题居然没测出来,
- QA也总会抱怨Dev代码太差,一点也不懂测试,没怎么测就给hand over 给QA了。
- QA总是会push Dev,这个bug再不fix,你就影响我的进度了。
- 等等,等等。
如果没有QA,那么就没有这么多事了,DEV自己的干出来的问题,自己处理,没什么好扯皮的。
而一方面,QA说Dev不懂测试,另一方面Dev说QA不懂技术,而我们还要让他们隔离开来,各干各的,这一点都不利于把Dev和QA的代沟给填平了。要让Dev理解QA,让QA理解Dev,减少公说公有理,婆说婆有理的只站在自己立场上的沟通,只有一个方法,那就是让Dev来做测试,让QA来做开发。这样一样,大家都是程序员了。
3)吃自己的狗食
真的优秀的开发团队都是要吃自己狗食的。这句话的意思是——如果你不能切身体会到自己干的烂事,自己的痛苦,你就不会有想要去改进的动机。没有痛苦,就不会真正地去思考,没有真正的思考,就没有真正的进步。
在我现在的公司,程序员要干几乎有的事,从需求分析,设计,编码,集成,测试,部署,运维,OnCall,从头到尾,因为:
- 只有了解了测试的难度,你才明白怎么写出可测试的软件,怎么去做测试的自动化和测试系统。
- 只有自己真正去运维自己的系统,你才知道怎么在程序里写日志,做监控,做统计……
- 只有自己去使用自己的系统,你才明白用户的反馈,用户的想法,和用户的需求。
所以,真正的工程师是能真正明白软件开发不单单只是coding,还更要明白整个软件工程。只明白或是只喜欢coding的,那只是码农,不能称之为工程师。
4)其它问题
- 关于SDET。全称是Software Development Engineer on Test。像微软,Google, Amazon都有这样的职位。但我不知道这样的职位在微软和Google的比例是多少,在Amazon是非常少的。那么像这样的懂开发的专职测试可以有吗?我的答案是可以有!但是,我在想,如果一个人懂开发,为什么只让其专职做测试呢?这样的程序员分工合理吗?把程序员分成两等公民有意义吗?试问有多少懂开发的程序员愿意只做测试开发呢?所以,SDET在实际的操作中,更多的还是对开发不熟的测试人员。还是哪句话,不懂开发的人是做不好测试的。
- 如果你说Dev对测试不专业,不细心,不认真,那么我们同样也无法保证QA的专业,细心和认真。在Dev上可能出现的问题,在QA也也会一样出现。而出了问题QA不会来加班解决,还是开发人员自己解决。所以,如果QA不用来解决问题,那么,QA怎么可能真正的细心和认真呢?
- 如果你说不要QA的话,Dev人手会不够。你这样想一下,如果把你团队中现有的QA全部变成Dev,然后,大家一起开发,一起测试,亲密无间,沟通方便,你会不会觉得这样会更有效?你有没有发现,在重大问题上,Dev可以帮上QA的忙,但是QA帮不上Dev的忙。
- 第三方中立,你会说人总是测不好自己写的东西,因为有思维定式。没错,我同意。但是如果是Dev交叉测试呢?你可能会说开发人员会有开发人员的思维定式。那这只能说明开发人员还不成熟,他们还不合格。没关系,只要吃自己的狗食,痛苦了,就会负责的。
- 磨刀不误砍柴功。如果你开发的东西自己在用,那么自己就是自己天然的QA,如果有别的团队也在用你开发的模块,那么,别的团队也就很自然地在帮你做测试了,而且是最真实的测试。
- 你可能会说吃狗食就是个笑话,因为如果是我,我把事干烂后,就离职走人了,让别人去吃我的狗食。这个在现实中的确会发生,也是很现实的。但是想一想,你为什么在一开始让他把事干烂了?另外,如果你的团队在设计评审和代码评审里没有把好关,让某人把事给干烂了,那么这个人的离职带来的问题还是这个团队来扛,于是整个团队都在吃自己的狗食,挺公平的。痛苦过一次,你的团队下次怎么干了,就不敢乱招人了,就不敢随意评审代码了,就不敢让人只做一块东西了。最终还是没有逃脱吃狗食的范畴。
- 关于系统集成测试。所谓集成测试,就是把多个开发团队开发的模块集中起来测试。因为开发人员可能无法看到全局,不了解别个团队的系统,而且步调不一,所以需要有统管全局的专职的QA进行统筹规划并做测试。对这个方面,我并不反对,在实际操作过程中,好像的确用专职的做集成测试的QA统一调度各团队的时度更有效一些。不过,这还是不能让我停止去思考两个问题,1) 如果开发人员看不到全局,他能开发出更好的软件吗?2)这个全职的做集成测试的QA难道不能是各个团队的骨干Dev来组成吗?3)统一调度这个事,不更像是Project Manager要做的事吗?
- 关于自动化测试。所谓自动化的意思是,这是一个机械的重复劳动。我想让测试人员思考一下,你是否在干这样的事?如果你正在干这样的事,那么,你要思考一下你的价值了。但凡是重复性比较高的机械性的劳动,总有一天都会被机器取代的。
- 关于线上测试。我们都知道,无论自己内测的怎么样,到了用户那边,总是会有一些测试不到的东西。所以,有些公司会整出个UAT,用户验收测试。做产品的公司会叫Beta测试。无论怎么样,你总是要上生产线做真正测试的。对于互联网企业来说,生产线上测试有的在玩A/B测试,有的玩部分用户测试,比如,新上线的功能只有10%的用户可以访问得到,这样不会因为出问题让全部用户受到影响。做这种测试系统的人必然是开发人员。
好吧,我暂时写这么多,我会视大家的讨论再补充我的观点的。
—– update 2012/4/11—–
一些人觉得我是在泄私愤,我能够理解为什么我会被这样误解,但是没有关系,很多新东西新观点总是会被误解的,我坦然面对。请大家抛开我的这些情感因素,单纯的思考一下,没有专职QA的的团队架构是否有积极的意义在里面?
再补充一点,大家思考一下,QA是保证质量的,但是很多QA是在做测试,软件质量是测试出来的吗?如果不从需求分析,软件设计,代码实现上做好控制,到测试的时候你还怎么保证质量呢?
(全文完)
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)
《我们需要专职的QA吗?》的相关评论
我是这么看的: 程序员就一包工头,QA是公司搞质检的。
换言之,QA根本就不是来“帮dev干活”的;而是代表公司来验货的。
从这个角度看,QA或者测试团队根本就不该把找到的bug提交给dev,只要告诉他们“你们做的东西质量不行,公司没法接受”就够了。
从这个角度看,说不需要QA是可笑的——嗯,老板,偶们团队的软件可以免检吗?
免检?你先打出这个信誉再说。
——————————————————————
很多人可能会疑惑:没有测试团队,软件质量怎么保证?连个错误报告都没有,dev怎么修复bug?
这点我同意云风的观点:好软件不是测出来的。
换言之,好软件是一开始就没什么bug的——也就是“明显没有错误的”。
反之,那种靠测试报告补窟窿补出来的东西,多数是“没有明显错误的”。
这两者的质量差异可就大了。
————————————
事实上,我认为那些没有测试报告甚至测试报告稍微含糊一点都没法定位错误的,是因为被惯坏了,“没有明显错误”的东西写太多了。
而自测bug就会逼开发人员放弃那些炫耀性的东西——比如放弃“设计模式驱动”——真正面向需求,写“明显没有错误的”程序。
估计作者是从阿里出来的吧,举了这么多的例子,然后说了这么多的大道理来证明自己的观点是正确的!可是可惜了,太可惜了……话说得太绝了,不能管中窥豹,只见一斑;不然要QA干嘛!要质检部门干嘛?完全相信程序员,狗屁…..
深有同感。
其实测试并不是现在普遍认为的那种没有什么技术含量,是个人就能干的工作。恰恰相反,按照对测试人员的需求,真正的软件测试人员其实都是资深的软件开发人员(忘记是在哪本著作里写的了)。
耗子哥的文章很有启发性。赞!
– 同意Dev要懂测试,至少保证做出来的东西要过的了自己那关。
– QA和Dev能够高效沟通并最终对功能有一致的VIEW太重要。
假设作为一个项目经理,要回答团队是否需要专职的QA,我得考虑:
– 软件产品所处的领域
例如:通信设备软件、银行大型机应用、互联网应用之间的差异可能体现在: 软件质量要求的严苛程度,产品发布频率,特殊的测试环境。
如果没有专职的QA,是否可以应付的了?
– 开发人员的质量
假设从技能上来说QA能做的Dev也能做,那么Dev从开发状态转换到测试状态相当于一个变速跑,能够在这两种状态之间自如切换对开发人员是个不低的要求。
– 项目进度
Dev开发可用功能的进度是项目进度的关键路径。为保证进度,项目经理可能倾向于让Dev全速开拔把东西先做出来,再打磨。
假设新功能的80%可用,还有20%的bug有待fix,那么可以拨出部分人力(Dev or QA)去修补,剩下的主力队伍(Dev)可以继续前进。
。。。
这真是个难题。
赫赫,我理想中的团队是由少量的精英DEV组成,他们开发并对自己做的东西完全负责,效率高、质量好,做出来的东西就是精品,像传统作坊的手工艺老师傅那样。:)
…这个观点从根本上就是错误的。
QA直译过来的意思是质量保证,质量保证就仅仅是测试这么简单吗?片面的认为QA就是测试,是绝对错误的。测试只是保证质量的一个方法,而且从项目生存期来看,测试基本是项目或者产品生命期(或者其中的一个迭代)比较靠后的阶段了。QA的工作和作用可不是从这个时候才开始的。QA从产品或者项目的概念阶段,可行性研究阶段就已经开始了。就到着吧。
在一开始没有测试这个行当,我刚毕业的时候也没听说过测试,觉得开发很牛,但为什么测试出现了呢?这只是一个更精细的社会分工而已,没什么觉得奇怪的,农村家家种菜,养猪,你到了城里,你行吗
QA还是有必要的,但是一般的功能测试确实程序员和QA做都一样。不同的是当面对集成测试,可用性测试时QA会比程序员好很多,而且从压力测试自动化测试这些工具来说,QA还是比程序员好的。
看回帖,大家基本上一致同意测试人员要懂最好开发,另外我也比较同意皓哥的其他观点。小公司,特别是创业公司,为提高效率,好的、高素质的开发人员,完全可以自己测试。
但是,我也觉得,好的测试人员在拥有很多模块的大型软件开发中,扮演的角色还是很重要的。我在目前的公司做了整5年,对我自己负责的模块很了解,由于该模块和整个系统很多前后台模块都有接口,自我感觉对整个系统的了解程度也比较好。即便这样,也会遇到很多其他模块的细节问题时,有时我不需要知道其如何实现,我只需要知道接口或者行为,我去问QA,都能给出很好的解答,她们对整个系统的了解更细更准确。有那么几个工作了7、8年的QA,都是女生,非常让我佩服,提出的bug非常准确,她们我打电话提问题,我很高兴,因为往往发现的就是程序上的缺陷,甚至很棘手的问题。当然,还是有很多QA提问题,就提不到点上,发现的很多都是配置问题或者他们自己没有去看文档、去分析出现的问题,既浪费了自己的时间,又浪费了开发人员的时间。
所以,感觉QA(在这里讨论什么QA QC没什么意义,不要较真,各个公司甚至大公司对QA QC的理解都不一样,文章中的含义就是测试人员)还是很重要的,只不过好的QA比好的Dev少,大部分人觉得能做Dev就不做,很多Dev鄙视QA。其实Dev,QA都懂一点,生活才更精彩一些。
@William
补充一下,我曾经被测试部门借调做了3个月的测试,开始有些不乐意,很快我的观念就改变了。几个月的测试,让我对系统和自己负责的模块(刚从事不久)有了很大的了解,当然我测试的时候,我会去看代码里相应功能是如何实现的。可能和本文跑题了,但我觉得,对不是从新开发的系统,能让刚进项目的人从测试做起,再做开发,也是很不错的选择。
我是软件测试人员。说下我的观点:1)专职的软件测试人员必须有两年以上的开发经验(在我所在部门即如此);2)所有测试用例形成测试说明,对环境、条件、各种测试类型有详细的说明,对(性能等)测试指标必须有来源,测试说明要经过多部门联合评审(含开发人员);3)测试人员要熟悉被测软件的各种文档,功能,使用场景,性能指标;4)整个测试过程受控,有计划、有准备、有执行、有问题报告、有总结,最后形成测评报告。
只能说理想中的项目与实际情况差距很大,理想的程序员与实际的大多数程序员们差距很大……
只能说文章中提到的QA不是合格的QA~
给了QA全部测试的权力,但是没有给相应的责任,感觉这个是最关键的。
但是博主说的那样的程序员,开发+测试+运维,分数了很多精力,结果是一个能做两个项目的团队只有时间做一个项目。
我同意测试需要懂点技术(包括软件实施人员),我自己在跟测试人员沟通时,通过mail或者IM在沟通时,测试人员缺少技术背景,导致沟通有时是很不顺畅的,也无法对问题无法进行有效确定,需要我们花时间来确认问题。确认到最后可能只是IIS的配置没配置好、或者服务没开启,诸如此类。我想如果测试有一定的开发背景,对很多问题可能不能自己解决,但是却能很好帮助我们。
但是,需不需要专职的测试问题,我持保守态度。Dev再厉害也是会出错的,总不能Dev把代码一提交就扔给客户了吧?
呵呵,个人愚见
说得不错,但是QA真的不是专门用来测试的。。。。这里应该说是测试
我觉得,QA和测试是两码事,一个是对项目整个过程和产品质量的检查,贯穿整个项目过程;一个是对开发产品进行测试,主要针对的是产品。
看了楼主的文章,说的内容大部分与测试人员有关,而QA的活动很少,觉得题目应该改为“我们需要专职的测试人员吗?”更合适。
大哥 去百度一下QA是啥意思吧
看来楼主是被QA恶心坏了,不过QA确实是一个项目中的必需角色啊。说句好听的,QA是coder的天然垫背的,配备了QA的项目,如果出了任何问题,那么第一个该负责和该挨骂的是QA阿,如果在你们公司,不是这种情况的话,那么,你们的QA就真的仅仅是摆设了。
然后,顺便说说QA该做的一些事情,
1. QA不是tester,他们是项目中不同的角色。一般来说,coder要作自己的tester,和/或者作peer的tester等等。QA不是去作UT,CT,ST的人。而是监督者的角色。
2. QA要从需求阶段参加项目,根据项目的特点,制定相应的规则。并且确保开发团队认真的执行已经确定的规则。当然,确定规则的过程是需要开发团队参与的,一旦双方认可,那么只能无条件遵从。
3. QA的职责还包括,对开发团队的开发过程进行评估,及时提出建议。
建议楼主再读读Watts S.Humphrey 的《软件过程管理》。
另外,同意14楼和15楼说的,修改一下题目更好些。
没有遇到过专业测试人员的人是没有资格妄谈测试是不是重要的。
绝大多数开发都做不了测试,也做不好测试。
如果逻辑思维的高度可以去做开发,但是千万别做测试,测试对逻辑思维要求更高。
虽然原帖楼主的题目是:”我们需要专职的QA吗?”。但是,从内容上看,题目改成“我们需要专职的测试员吗?” 更贴切些。 http://fycoder.com/FYCblog/?p=483
很同意这句,Dev要懂测试,QA要懂开发
这句话也说了,是要区分dev和qa的,
而且,dev要算半个测试,qa要算半个开发,或者少半个
要是完全去掉qa,dev自己管自己,感觉跟一party独裁似的
所谓,不识庐山真面目,只缘XXXXX
但是又需要一些无脑黑盒,毕竟用户是不专业的
这篇文章有意思,我也参合一下
首先,除非项目特别紧急的情况下,test case都是需要经过QA和dev共同开会评审的,这一步可以看出qa的test case设计的是否有效,比如一些经验不足的qa可能把焦点过多的集中在页面校验,展示,布局这类问题上,而忽视了最重要的业务逻辑和数据的准确性,那么通过评审,就可以很好的纠正这些问题。
博主合作的Qa团队,显然没有这部分工作,应该都是在自己瞎写瞎测,没出问题则以,出了问题,人家说”我测的时候没事”,你也无从查证,只能自己生闷气。
其次,qa懂开发肯定是锦上添花的,但是如果不懂开发,也是可以做很多工作的,并不像你说的那样一无是处,你遇到的团队其实只是个个例,不要对qa失去信心,我也是qa,我也不懂开发,但是我做了很多工作,关键是,要深入了解业务,还需要对测试环境和数据结构非常熟悉,不要一味的依赖dev,有问题,自己多看文档,不懂的问,而不是遇到问题都不自己琢磨一下张嘴就问,经验是积累出来的,好的qa和好的dev一样,要有责任心和对工作的钻劲
LZ思路很混乱啊!一会QA,一会测试。QA和TE不一样的!
另外,LZ就在一家公司遇到了上述那么“恶心”的QA团队,就对整个行业不需要QA(其实上你在说TE的事)做那么肯定的判断。然后,又举了2个文章的例子来证明自己的观点(其实上第一篇的观点并不像标题那样肯定)。
至于,QA/TE 是否一定要懂代码?dev是否一定要掌握测试技术?这完全是和个人能力有关。懂,当然最好。不懂,一样也可以完成分内的工作。不懂代码的TE就做不了黑盒测试吗?TE就拿着需求文档,系统原型难道就设计不好测试用例?(也许你真的是被你所在公司的QA团队恶心到了)
产品的质量把控是要搞整个团队的。需求分析,系统设计、开发,测试……团队中每个成员都要对产品质量负责。如果只有开发和测试合并成一个角色,那么,产品质量就有提高?
最后,那些成功的产品(Sriram Krishnan提到的)的dev是什么水平?这些公司占“成功产品”的比例是多少?很多?多少是多?
我理解为什么这么多人攻击你,因为你一下子砸了太多人的饭碗.在中国的软件开发领域,测试(QA)的特点是位高权重责任轻,钱多事少离家近.大家收入差不多,但是旁边的码农加班到凌晨的时候,测试的同学却可以朝九晚五.
你不喜欢QA和你不支持敏捷开发的原因是一致的,大部分QA在务虚,谈了很多方法论的东西,但是自己不去实际解决问题.
这种事我也深有体会.
虽然本篇文章有跑题的嫌疑,讲的大部分都是测试,但是我也是赞同你的观点的.有权利,没责任,是目前测试部门最大的问题.像楼上说系统上线后,出了问题第一个打板子的就是测试部门,问题是测试部门能做什么?重写测试案例?客户才不管咧!
他们要的是系统正常运行,要快速的定位问题,要更快速的解决问题.如果开发人员不参与测试,这无法提高将来开发人员定位,解决系统问题的能力,其实对公司是不负责任的.
测试的家伙们,你们被客户威胁过吗?你们有感受过在现场解决系统问题的时候,客户愤怒的呐喊:”如果我们公司倒闭了,你们公司也要完蛋!”这种气氛吗?如果开发团队承担所有责任,那么测试的家伙们,你们上班是打酱油吗?
不管理想中的测试部门是什么样的,长久存在的测试部门会变成一个官僚机构,它的终极意义是–养老.
还是团队内交差测试吧,这样你至少在开发内部还存在一个解决问题的A,B角.
或者可以有这样的策略,让测试的家伙负责运维?
要失业了:-(
对于博主遇到的问题和想法,我完全同意。但是很明显,这中间有矛盾,没有完美的解决方法
如果把产品的生命周期划成三份:设计+编码、代码成型后到上线前 和 上线后三部分的话,我们就是在讨论编码后到上线前的这段工作是DEV还是QA来做的问题。这段时间一般很长,经历产品由雏形到稳定的过程,第一阶段与这一阶段的时间比是1:3差不多吧。那这段时间会有哪些事情:代码自身的质量、环境部署和维护、站在用户的角度来测试、整个系统的测试、自动化测试等等。开发人员必须要做的事情是提高代码质量,自动化测试也可以搞搞,其它的DEV人员你也想负责么?你有那么多的时间来维护环境吗?你确保你不会为自己的代码搭建一个“温室”么?
在我看来,QA人员的专长就是站在用户的角度,有时候可以说是一个“小白用户”。有多少DEV会去乱折腾环境的,有多少DEV会很耐心地与与其它人合作做系统测试。
术业有专攻,不是说QA的活DEV不能做,而是成本问题。有那么多时间你自己来提高技术,提高生产效率,为什么要花在点页面上,为什么要花在折腾环境上?还有,公司不一样,对QA人员的要求也不一样。网站类的公司就需要很多新人来不断点击页面,这是确确实实需要花时间的。像你提到的Google, Facebook这样的公司,产品的接口很简单,DEV就是需要花时间把自己的事情做好就基本可以上线了。因此可以想想,对国内的公司来说,对QA人员的需求是什么
“不懂开发的人必然做不好测试”这个论点我就不认同,难道非要QA人员跟DEV一样思考,才能做好事情么?这里面很多时间不是懂DEV就能搞定的,比如说环境折腾与沟通,拉一个DEV过去就能比QA专业?不一定!而且公司花很高的代价就是让DEV去花比开发多的多的时间来折腾环境么?
对于其它对QA的抱怨,只能说你遇到的这些QA不专业。这样的QA我也遇到过,见到异常、环境问题就很兴奋地报bug,在看到问题时从来不多想一步,发现问题后趾高气扬就感觉像找到了DEV人性的弱点一样,以bug数量论英雄。。。 站在DEV的角度,我们需要一个帮手:熟悉程序架构,懂得维护与折腾环境,可以站在用户角度来测试,可以花时间去跟其它人沟通。。。 所以这个QA一定得参与程序的设计,会编码,有耐心,容易沟通,有想法。
最终的总结就是:楼主说的太绝对!如果有一个比较专业的QA来帮助我们,我们就能把自己的时间花在更有用的地方。
我开始是做测试,偏黑盒,后来公司产品稳定,开始涉及自动化测试,这个时候我发现开发技术的重要,现在是在做测试开发。从测试角度看,不外乎产品界面、功能、性能、安全、业务这几个主要方面,性能和安全方面对技术要求高,技术掌握不全不深的肯定做不好测试。所以说测试要懂并不限于开发技术,这点我非常同意博主,但是同时又不能说明QA和QC因为不懂技术而不重要。一方面这是公司管理层、技术高层考虑的,另一方面,除非这个开发团队研发流程规范,成员个个都是技术牛逼,并且负责任,也许可以砍掉QA,QC,否则很难说。公司有水平层次,每个人的技术也是有层次的,没有完美的人,所以要靠制度靠流程靠规范。
说来有意思,我现在所在组的老大以前就是做开发的,他现在对开发-测试是深有体会了,他不像之前抱怨测试,却有段时间反过来抱怨开发,不过现在已经上升到做产品质量改进了,所以说有经历才有发言权。那些对技术钻研的深跳不出来的,建议可以尝试下测试以及质量改进相关职位,莫要清高,莫要轻言,说什么砸了别人的饭碗,说句不好听的,除了那1%是创造技术的,剩下99%都是复用技术的,你我都在这99%中。
QA是质量保证,负责验收,更像是产品使用者,TE则是在测试最前线,但我同意测试必须董开发
作为专职的测试人员,对这类的问题比较关注。
个人认为,需要有测试这种角色,但未必需要一个嵌在dev团队里的测试。
一直都认为PM很适合做测试,或者说测试很适合做PM,因为测试了解整个项目的需求和预期。 测试的基本作用也就是促使最终的产品是符合要求的 —- 在各种场景下都符合要求。并且工作要求使得测试具备不错的表达能力和沟通能力。
相当同意博主的观点。
我认为在一个“足够优秀”的开发团队里,开发和测试本来就是一体的。Linus的说法:保证程序正确的方法只有两个,一是日复一日年复一年的运行,二是细致彻底的分析。
可惜,大部分IT从业人员只是干活、拿工资,不可能对自己做的东西做“细致彻底”的分析。得过且过。
现实中,大公司不介意让部门结构复杂起来,以此增加冗余和稳定性,“看起来正常”在现实中非常重要。所以我们才用C++、java、php,用继承的class,分很多模块,不介意以松散为理由不断增加代码行数。
这就是事实,正是如此独立的创业团队才有机会?超过一个冗余的慢吞吞的团队,还是有希望的。
@sss
同意这个观点哈. 但也同意博主的观点自己做的东西是要自己测试. 当然你也不可能去测试整个项目的东西. 看到博主后面说大家认为在泄私愤, 个人觉得有点道理, 因为刚好遇到不合格的QA.
@qingchunjun
我觉得你说的也很有意思。这些讨论很有意思。软件的东西本来就不是非黑即白的。我也需要学习学习这方面的东西。
@chen
“剩下99%都是复用技术的,你我都在这99%中”
第一,别把别人当成和你一样.这本来就是一种自以为是的态度
第二,复用技术就不牛逼?语言(包括自然语言和程序设计语言)就是为了复用开发出来的.你开发出来的产品天天都在复用二进制代码,0,1.有种你每开发一个新产品都把计算机体系重头到尾再构建一遍.
不从需求分析,软件设计,代码实现上做好控制,到测试的时候你还怎么保证质量呢?
看来你是没有遇到过做从需求, 设计, 代码实现, 加上整体的功能、 性能、可测性,用户体验等角度来进行测试工作的测试team? 据我所知, 这样的测试team也是属于测试部的, 而不是属于研发队伍的。 Dev交叉测试的确是个不错的方案, 但想提醒的一个问题是测试不仅仅是上一个项目上线了就可以, 这仅仅是一部分, 还需要进行测试相关的知识和bug的沉淀和积累, 还需要有人去开发和维护用来支持测试工作的各种系统, 还需要有人去探索在不同的领域(如网络互连设备、 运维系统、 广告等)更加合理和优秀的测试思想和方案。 你没遇到过的并不代表不存在, 你不了解的并不代表多余的。
再说几句, 有的测试team不仅仅是从代码级别上定位到了问题, 也给出了fix的方案, 而这些问题的发现, 是在Dev在进过了他们自己严格的测试以后还存在的, 有的测试team关注着业界最新的测试理论, 研读测试论文,把最新的有效的成果引到项目中来, 有的测试team时刻在关注着产品的线上问题, 他们也加入了相关的报警邮件组, 他们在收集着线上问题, 并对线上的问题进行分析和给出相关的解决方案以及进行沉淀等等, 看到左耳朵耗子的凭着自己的经历在类推到整体上, 感觉文中的好多情况跟我们身边的并不符合, 忍不住说几句。
@lee68yt
你现在是在做什么?是在创造X Y Z语言 还是拿着现有的编程语言在用?还没讨论就来句:有种你每开发一个新产品都把计算机体系重头到尾再构建一遍。我是针对一部分自以为是的开发人员说的。话说我从测试转到开发后,普遍的来说,开发的技术是比测试的技术要全和深,但这个不是问题,不是技术问题,根本就不是问题。问题在于博主质量部管理层不行,质量部人员不求上进,当中需要掌握的技术没有培训,没有技术财富库。我还是那个观点:除非这个开发团队研发流程规范,成员个个都是技术牛逼,并且认真责任。博主提出这个问题,可能是所在研发部门技术都是顶级的,但是你要考虑到不同公司技术程度是不一样的,规范也不一样。
综上所述,当前国内人员水平达不到测试要求
QA的确需要Dev能力, 但是这个文章里有的话说的太绝了, 有些公司的Dev的素质不足与做到这样(国内并不存在很多具备文中所描述的那样素质的Dev), 没有qa产品质量就搞成屎了…
1,“我的故事”比较荒诞,作者能有这样的经历很难得;
2,“ 开发人员做测试更有效”比较赞同,特别是UT层面,上层的测试则不尽然;
“减少沟通,扯皮,和推诿”这么做是为了提高效率。但是不可能所有的事情都一个人搞定,需要分工(不管是不同模块开发的分工还是同一个模块开发和测试的分工),分工就需要沟通。即便你消除了同一模块的测试开发沟通,模块间的开发和测试分工呢?我想听听,关于这块你怎么来搞,能说的详细一点最好,开发和测试关注的细节或许不一样哦
3,“吃自己的狗食”这句话永远正确,所以测试要为自己的开发负责;测试也要为自己的代码负责,为产品的质量负责;运维要为运维程序、脚本的正确性负责。你的公司里开发全都做了,那你们没有“需求分析,设计,编码,集成,测试,部署,运维,OnCall”这些对应的所有人员喽,还是说只不过每个开发都要有这样的一次体验呢?如果是后者,我觉得在可能情况下,么个职位最好都要有这样的体验,熟悉自己的上下游,永远对于做正确的事情有益,但是这些似乎只有在小公司里面才有可能。
4,“如果一个人懂开发,为什么只让其专职做测试呢?这样的程序员分工合理吗?把程序员分成两等公民有意义吗?试问有多少懂开发的程序员愿意只做测试开发呢?”说得好,我决的这个问题应该是管理层应该多思考的问题。个人觉得你总给我做任何事情我都会厌烦的,工作和生活都要有一些未知,才有乐趣。所以,个人希望,技术部能提供更多内部换岗的机制。你知道什么公司是这样的么?
总体上还是还很喜欢的你这篇文章的。
但是,作为一个自诩做过开发的测试工程师,我经常能感觉到“我理解开发,但是开发不理解测试”,读你的这篇文章也有同感,所以,基本判断你没在测试团队中做过。比如,你说的“QA在做测试的过程中,总是需要Dev对其测试的环境,配置,过程做指导”,这句话是对测试人员的偏见,在开发工程师中同样普遍存在,而且导致这个结果的责任并不都在测试,这里的原因我相信你懂的。
就说这么多,希望你能会答复我,微博上@welkinwalker也可,呵呵
开发要等测试;测试也要懂开发。开发要能抵得上半个测试,反之亦然。这个是基本的。现在的问题是很难碰到优秀的测试,这点在本为引用的文章 http://www.aqee.net/on-testers-and-testing/ 中提到了:
我有一些政治上不正确的话要说。一些大型的软件开发公司会从一些不能胜任开发工作的程序员中选择测试人员。我经历/听说过很多在面试开发人员过程中有人说“他/她做开发不行。也许可以做测试?”这导致了一个被广泛默认,但很少公开宣称的认识:做测试的不如做开发的聪明。正是由于这普遍的偏见,少数一些对质量和测试工作极具热情和天赋的人受到了不公平的待遇。我知道他们,因为我曾经和一些这样的人一起工作过。
这种的结果是优秀的人大部分都去做了开发了,作为一个研究方向为“测试”的学生,工作后面对这种情况感觉很囧,周围人的技术很…,反而是跟开发更有这方面的共同语言。
肿么改变这种现状呢,有时候真想“把那些不懂技术的测试都fire掉,换一批懂技术的人”。虽然我知道这句话挺极端,只能yy一下而已。
忍不住要说2句话了,
测试: 首先,开发愿意做测试的能有多少人, 我敢说 20% 最多
更多的是 价值体现,
开发: 大量的测试是为了让程序员修正一些业务逻辑低俗的bug,当然强大的qa也有,但是很少
试想国内的开发和测试有几个是尊重测试的,
Nice.
其实,好多工作都是需要大家一起讨论合作去解决问题的。这也跟社会现象有关系。也是两种不同的管理模式,开发和测试分开的管理模式,只能说你经历过的做的不好,工作不到位。不能直接否定这种模式。你可以根据需要去决定自己的项目用何种模式,如果开发不懂测试,你没有办法开展开发测试一起进行的模式。
而且,测试就算是懂开发,他们考虑问题的角度仍然是不相同的。我同意,测试应该去了解需求,了解开发的设计理念。这些是作为他设计测试的依据。测试是要从客户的角度去考虑系统的各方面问题。在了解了开发的设计理念和需求后 ,从另一个角度去审视系统。如果不分开,开发既要专研技术上的难题,又要广泛的考虑到客户的感受,你觉得,不会影响他们的思路么?你能保证开发在做的过程中又那么全面的考虑到所有的问题?
任何职位都是一件事按照各种规则分门别类的,简单些说,一个公司员工的事情老总也都可以干,你放到谁身上,只要你会就都可以干,那还要那么多人干嘛。不过就是通过分析,分开之后可以提高效率,有益于发展。才这样的。
总之,我是觉得,这只是你工作过程没有控制好,而不能如此以偏概全!
好文,但是~绝对有点绝对了~
1. 文章中举例子的QA貌似不是合格的测试人员,就像你说“开发人员如果都不知道怎么做测试,这个开发人员就是一个不合格的开发人员”,也许有很多很好的测试员,但是你没碰到~
2. 仅仅从软件质量的角度来考虑,如果开发人员也做测试(交叉测试),那么固然效率高,更能抓住要点来保证软件的质量;但如果考虑成本话?据我了解很多即懂开发也懂测试的开发人员成本比较高,也难找~如果按照你的观点来说~目前“不合格的开发人员”很多。
国内常见的状况:
一群水平不咋地的开发,配备一群水平更不咋地的测试,做出的东西只实现了个大概,就丢给测试:开始测试了。
测试一运行:问题百出,起码的主要功能都走不通。
反反复复,生命都浪费在这些无意义的事情上。
确实,由开发人员来做测试好一点,并且我觉得应该选这个项目中最好的开发人员来做测试,然后给他们奖金,这样既省钱又能保证质量.
唉 不懂coding的 QA 不是 好QA
就我的个人工作经验来看,我是支持有专门的QA团队的。
几个理由:
1、QA有专业的技能在里面,很多技能与编程无关。术业有专攻。微软也有聘请家庭主妇做测试的案例,而且做得不错。
2、目前环境下,雇佣一个程序员的价格,经常可以雇佣几个测试员工。他们做,经济上更合算。比如做一遍回归测试,全部跑一遍测试用例。这些有些机械的活,有的可以自动化,有些还只能人工做。涉及到人工,劳烦程序员,他未必喜欢做。
3、QA的职能,与研发合作+对立,地位平等。从工作私利角度来说,他们的目标并不一致。
4、有些QA技能需要提升,但程序员自己的测试能力,更不能夸大。他们在编程上面需要的质量要求,与QA要做的互补。