引用评论里的一句话:hurt but true 
抛开作者某些偏激的想法外,作者暴露出来的问题还是需要测试思考的:
1、TestCase,TestData,TestConfiguration 没有进行版本控制,凌乱,覆盖补全,参考意义相当低,但耗时却很高。
2、TestCase的设计,只根据需求,未兼顾到系统实现,且因为对系统实现不够了解,导致用例覆盖不全
3、除功能测试外,测试还能做什么?
4、测试对于开发、以及整个团队的帮助在哪里?仅仅是工作流最末端的查缺捡漏吗?
5、如何提高开发测试时间比?(工具?不同的测试形式?)
6、bug管理,提出的bug文档是否完整?是否有借鉴意义?
 
与作者观点不同的是,我认为一个团队里还是需要专职的测试的,但不仅仅是执行功能测试,测试应该跟进开发的每一个环节,了解系统实现,根据系统实现和需求,制定测试计划与用例。开发完成后,可以将用例分发到不同的开发,共同测试或交叉测试,跟进并分析bug,给出开发修复建议,项目完成后,构建自动化维护体系、测试过程的沉淀管理。
 
测试应该思考的,是如何提高产品质量,且减少工时。即在保证项目质量的基础上,提高开发测试比。
 】
 

我们需要专职的QA吗?

2012年4月11日陈皓发表评论阅读评论38,350 人阅读    

这个文章必然是有争议的,我在我的微博上讨论过很多次了,每次都是很有争议的。有不同的观点,有争论总是一件好事,这样可以引发大家的思考。所以,对于我的这篇博文,如果你赞同我的观点,我会感到高兴,如果你会去认真地深入思考,我也会高兴,如果你反对,没关系,可以讨论。

在此之前,我想说明一下我观点里的这个“专职QA”是怎么定义的。

  1. 其是很多公司成立的专门做测试的技术人员,仅测试不开发。
  2. 这些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部门的同学们就像没发生什么事似的,依然正常上下班。哎……

为什么会这样?我觉得有这么几点原因(和邹欣的观点一样)

  1. 给了QA全部测试的权力,但是没有给相应的责任,
  2. QA没有体会过软件质量出问题后的痛苦(解决线上问题的压力),导致QA不会主动思考和改进。
  3. QA对Dev的开发过程和技术完全不了解,增加了很多QA和Dev的沟通。
  4. 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.cn ,请勿用于任何商业用途)

 

我们需要专职的QA吗?的更多相关文章

  1. 《大话移动APP测试:Android与iOS应用测试指南》

    <大话移动app测试:android与ios应用测试指南> 基本信息 作者: 陈晔 出版社:清华大学出版社 ISBN:9787302368793 上架时间:2014-7-7 出版日期:20 ...

  2. 由苹果的低级Bug想到的

    2014年2月22日,在这个“这么二”的日子里,苹果公司推送了 iOS 7.0.6(版本号11B651)修复了 SSL 连接验证的一个 bug.官方网页在这里:http://support.apple ...

  3. 软件质量保障初探_Chris

    关于软件质量保障的体会 首先,软件质量保障的重要性不言而喻,书中说软件质量体现在以下方面 软件开发过程的可见性 软件开发过程的风险控制 软件内部模块,项目中间阶段的交付质量,项目管理工具的因素 软件开 ...

  4. IQC,QA,FQC,OQC,IPQC的定义与职责

    进货检验员(IQC):CLInetLabIQC(以下简称IQC)是CLInet在多年开发维护EQA(实验室间质量评价)系统后,成功开发的一套完善的实验室内部的质量评价.质量控制的软件.它不仅包含了每家 ...

  5. 质量管理三个概念:QC、QA和QM,你能分得清吗?

    今天这里谈的QC.QA和QM,不是岗位或职位,而是一种概念或质量管理的不同时期所关注的重点. 1.产品 早期的质量管理(工业化雏形期)侧重于对终产品的检测.测试,即QC(品质控制)时代. 这个时期的质 ...

  6. 百度测试架构师眼中的百度QA

    百度测试架构师眼中的百度QA(一)   发表于2013-04-09 15:31| 4004次阅读| 来源架构师Jack的个人空间| 13 条评论| 作者董杰 百度测试QA 摘要:一直以来百度质量部在业 ...

  7. 敏捷团队中的QA由来

    QA,全称为Quality Analyst,即质量分析师(有些称为Quality Assurance,即质量保证师).为什么它总跟质量扯在一块?感觉这个角色明明做的都是测试的事情,为什么不直接叫做te ...

  8. The difference between QA, QC, and Test Engineering

    Tuesday, March 06, 2007 Posted by Allen Hutchison, Engineering Manager and Jay Han, Software Enginee ...

  9. QA is more than Testing

    前话:在测试这个行业做了挺多年了,都快忘记自己大学的专业是国际经济与贸易,一个选择可能就决定了一生的方向. 但既然做了选择,就走下去. ----------------- 在这么多年的工作中,测试始终 ...

随机推荐

  1. Tools - Windows

    1)文本操作 Ctrl + C / Ctrl + V / Ctrl + X / Ctrl + Z / Ctrl + A:复制/粘贴/剪贴/撤销/全选. 2)窗口左右分屏 Win + 方向键:上(最大化 ...

  2. LeetCode-96. Unique Binary Search Trees

    Description: Given n, how many structurally unique BST's (binary search trees) that store values 1.. ...

  3. mysql: you can't specify target table 问题解决

    首先创建一个表: CREATE TABLE `t1` ( `id` ) NULL DEFAULT NULL, `name` ) NULL DEFAULT NULL ) 插入几条数据: mysql> ...

  4. js页面跳转整理(转载未整理)

    js方式的页面跳转1.window.location.href方式    <script language="JavaScript" type="text/java ...

  5. .NET 配置文件简单使用

    当我们开发系统的时候要把一部分设置提取到外部的时候,那么就要用到.NET的配置文件了.比如我的框架中使用哪个IOC容器需要可以灵活的选择,那我就需要把IOC容器的设置提取到配置文件中去配置.实现有几种 ...

  6. VS2013 编译程序时提示 无法查找或打开 PDB 文件

    "Draw.exe"(Win32):  已加载"C:\Users\YC\Documents\Visual Studio 2013\Projects\Draw\Debug\ ...

  7. sencha 报错问题汇总

    store的url必填 否则报错:Uncaught TypeError: Cannot read property 'indexOf' of undefined ext-all.js store必须在 ...

  8. 世界上不存在什么RedBSD,SuseBSD或者ArchBSD,Turb...

    世界上不存在什么RedBSD,SuseBSD或者ArchBSD,TurboBSD之类的东西.

  9. 字符串中Emoji表情处理

    吃了经验的亏,因为Emoji表情引起的项目bug被撸主遇到两次了,总有一些调皮的小朋友爱用表情来搞点事.第一次把当时那个表改为utf8mb4解决了,第二次说啥都不好使.网上找了半天,发现好多人不去实验 ...

  10. [moka同学笔记]yii2.0小物件的简单使用(第一种方法)

    这是第一种方法,还有另一种方法,其实都差不多. 1.在创建widgets\HelloWiget.php <?php /** * Created by PhpStorm. * User: Admi ...