软件测试员比软件开发员

知乎上有一篇文章: 软件测试员比软件开发员要求低些吗? http://www.zhihu.com/question/20156659

其中有段回答:

陈甫鸼,生长于闽,求学入秦,漂泊适燕,实秦人也。

聊天莫双iamhaha 等人赞同

现实地说,我得承认@pansz 的看法很有代表性。我所知的很多公司的看法都是这样。但这不是我认同的看法。水平差点可以做测试,实际上就是把测试部门当作垃圾收容所。但是实际上说这些话的人,我相信并不理解测试究竟是什么。

如果我们不打算做深入的分析,其实要驳倒这个所谓的理论只需要一个例子就可以了。很多程序员不是总喜欢用架构来形容程序么?架构这个概念来自建筑行业。可是我相信很多人都知道建筑需要专门的人负责质量管理的,也就是保证交付建筑的质量满足需要。我们不会允许建筑公司自己做完工程自己验收然后直接交付使用的。我们都知道测试本身存在的目的是为了保证软件的质量满足需要,那么为什么乐于用架构对比软件的程序员们却认为软件可以不需要测试人员?显然这是荒谬的。

当然,我知道这种对比是驳不倒骄傲的程序员们的。我们从数学家那里继承了高傲的本性,天真地自以为算法就是一切(当然,他们中间的许多人其实多数时间用的算法都不曾超出过大学二年级那一年的课覆盖的内容),却不曾真正接受工程师的严谨。所以我们还是需要详细的分析。

首先,测试是什么?保证产品质量,这个过于模糊的说法说明不了问题。最直接的方法就是数一数测试究竟需要做什么:

  1. 监控产品流程。从时间控制的角度来说,开发新功能和修bug是一个平衡。开发得太快就可能把交付给下一个阶段一个问题较多的版本,从而使得后面的问题更难处理。我们如何知晓每个阶段软件质量怎么样?具体的方法很多,回归测试,代码覆盖、压力测试等等。但是这些信息谁来收集和分析,怎么分析?能得出什么样的结论?有多少程序员会自己做这些?
  2. 搭建复杂的应用场景。谁能知道测试一个完整的Active Directory服务器的回归测试环境需要多少台域控?我搭建的纪录是11台,还不包括中间可能动态加入和删除的客户端。其中包含大量故意的毁坏性操作。每一次毁坏之后都必须恢复现场进行下一个测试。有多少程序员构造过这种场景?
  3. 简化问题报告。当发生用户报告时,他们最初给出的步骤往往过于简化或者过于繁琐,缺乏直指问题所在的步骤描述。很多时候由于步骤不清楚,导致分析过程中存在很多弯路。这个时候需要有一个人来不停地和客户打交道并定位关键步骤。这个步骤总是必须完成的,那么谁来处置?有多少开发人员真正负责处理过这些?

当然我知道很多程序员们会高傲地昂起头:这些我们都不需要。只要我保证每个函数是对的,最后的软件必然是对的,所以只要单元测试就够了。这种理论我不止听一个人说起过了,也实在是没法说清楚。我只能说这些信息是有很多人需要的,既然有人需要,就得有人做。

我承认,有些情况下我们确实不需要专门测试。这种典型场景实际上有一个很简单的前提,即软件本身不包含复杂的应用场景。比如单机软件,比如单服务器网站。但是这不包括那些本身需要复杂使用场景的软件,比如Exchange、比如Active Directory。这类包含集群和分布式要求的软件系统不是一个人花一个小时坐在一台电脑前试一试就能做好的。

当然,对于开源软件来说还有一个方法,就是可以通过大量的发布让使用者做小白鼠。但是这不适用于所有的软件公司。对于一个app,也许崩溃就崩溃了,反正也许无非就是一条微博没发出去;可对于股票软件的服务器系统,你敢崩溃下试试看?我不知道在这里侃侃而谈水平不行就可以做测试的人,是不是确实长时间负责过此类复杂系统。

说了这么多,总结起来就是一句话:测试和开发需要的技能有交集,但基本上是两个要求不同的岗位。开发技术不行去做测试,不等于你能成为一个好测试人员。

当然,我也得承认一点。现在开发和测试分离的做法其实助长了一个倾向,就是开发部门的一些程序员越来越不关注自己的程序质量,也不关心自己的程序是被如何使用的。我记得当初曾经在CSDN的微软测试专家群论坛上看过有人如此发言,他说一个产品到发布的那个时候对他来说就是死掉了,他就不再关心了。时间太久,我不记得说这话的人究竟是谁。但是我得说这代表了我认识的一部分程序员的看法。但这不是程序员的错,也不是分工的错。该指责的是无能的领导,他们设置测试这个职位就是为了丢垃圾的,而没有能力把握两个角色的关系改进产品。这种无能的另一种倾向就是雇用大量的测试人员,以为用人去堆就能堆出好产品。他们忘记了,测试人员起到的是监控质量变化的作用,而不是提高质量。提高质量的唯一办法是开发。

丢包袱能让人轻装前进,但是只知道丢包袱是丢不出好产品的。
——我,现在。

最后推荐一篇文章作为注脚:http://www.aqee.net/on-testers-and-testing/

=== 对@冯东 老哥增补回答的回应 ===
从我的经验上看,我承认测试人员对编码和算法的要求可以比开发低一些(现实告诉我,我这种成天直接给开发扔fix的测试即便在微软不是多数派),但我强调的是对编码能力的要求较低,不表示开发人员可以自动成为一个合格的测试。就像随便拉一个战斗部队的人让他去负责炊事班,他不可能自动地做得很好一样。

测试这个岗位有测试的能力要求,它和开发的主要差异是在于分析和统计的能力。测试的基本能力是能够严格地按步骤执行测试,这个确实是很容易入门的。但好的测试要求的绝对不仅仅是这个。当一个人在测试到达一定程度的时候,他/她就必须开始注意很多流程上的分析工作。我说的流程不是很多人想像的一个老板坐在那里要求手下人做事之前必须做这个做那个,而是对整个开发周期里质量变化趋势的把握,以及如何用合理的技术手段支持这种趋势的分析(比如回归,比如fuzzing,比如压力测试)。从这个意义上说,我承认测试本身是一个相对容易向管理转化的职位。但这本身是可以理解的,就像建筑质量检查员必须了解建筑学常识,但不需要自己去画蓝图一样。反过来,他们需要强化交流和沟通能力以备出问题的时候可以有效地要求开发商承认问题,这不等于谁都能做这些事。

其实开发在这个位置上也是一样的。最开始面试的时候,只要是计算机科班出身大学又大学四年不太混事的,写个排序之类的算法都不是难事。但一个好的开发不是只会这些就够的。当入行时间长了,开发就必须开始注意领域知识(比如东哥最近刚发布的Adaptive Wide Angle滤镜)、架构、设计(比如互操作性,微软已经被人骂了很多年了)等等东西。这些东西都和编码本身无关,但是成为一个好的开发必须掌握这些。这两个职位也许开始时能力要求接近,随着时间的发展则差异会越来越大。但这不是开发部门可以用来鄙视测试部门的理由。

另一方面,也正是因为有了两个职位的差异,所以才会有兴趣爱好方面的区别。有的人一开始不理解测试这个职位,慢慢地越做越喜欢;有人试了之后还是觉得不符合自己的兴趣,所以选择离开。这都很正常。人各有志,这东西勉强不来。

所以再次重申,测试不是开发的垃圾桶。不是说编码技术不行的人就该搞测试去。如果一个人希望把开发作为自己的事业却能力不足,那么他能做的只能是提高开发技术,而不是靠测试混饭吃。

当然了,如果确实是想在微软这样的公司做开发却发现暂时能力不足,申请做测试也是一种为自己争取机会的权宜之计。但是如果这样则更需端正自己的心态,要是觉得做测试是委屈了自己,那么接下来引发的就不是技术问题,而是人事问题了。如果刚开始就抱着一个混饭吃的心态,最后到哪里都是混不下去的。

P.S.:关于我的一些状态变化的解释。
我承认我前一阵子刚刚从测试转到了开发。虽然在这个背景下为测试说话貌似在打自己的耳光,但确实值得说道说道。我必须得说我转岗位的理由和@冯东 老兄所说的理由不符。我之前负责的是服务器相关,现在转到了语音。这两个部门的差别恰恰满足我之前分析中提到的一个关键差异,即从一个对应用场景和部署要求非常复杂而算法要求相对较低的部门,转到了一个对部署要求非常简单而对算法要求很高的部门。平心而论,这个新岗位对测试的要求以及发挥空间其实比原来的部门要低很多。对我来说我两者都可以做得不差,那么我当然会希望找一个更有挑战性的职位来试试看。另一方面是作为一个五年的测试,我也希望换一个角度看看自己之前的岗位是什么样子。对于这个选择,我多少也是遗憾的。

所以我换了一个岗位,但是我换岗位的前提是我两者都能做,而且领导也愿意给我这个机会。这和两个岗位孰高孰低并无干系。

------------------------------------------------------------------------------------------------------------

我的思考

从开发者角度讲,开发者对自己写的代码的质量负有不可推卸的责任,必须自己担起质量的重任。

从测试者角度讲,测试的主要目的是提供一个监控软件质量的功能,一定程度上降低在快速开发的时候引入bug数量,防止对已有稳定的代码造成负面影响,提高开发效率。

从管理者角度讲,提高软件质量关键还在于提高开发者的技术水平和素质,可以从几个方面入手:

1.减少测试人员的数量。

不能让开发人员对测试人员形成依赖,比例要控制在一定的范围之内,比如谷歌的开发人员和测试人员比例为10:1,怎么做到的呢?

经过与段念先生的交流,我了解到Google中国的测试工程师只有十多个,外包大约二十多个。从绝对数量上看,测试工程师的数量确实不多。但,在Google,测试有一个721的原则:70%的测试工作在底层接口测试和单元测试;20%的测试工作在集成测试;10%的测试工作在界面测试。之所以做这样的选择,源于Google工程师对测试的一些看法。Google工程师认为底层接口测试及单元测试的自动化成本比较低,自动化的程度高、稳定性好。在段念先生看来,基于界面的自动化测试时最难的(他反复向我强调这个观点)。我基本上认同这个观点。然而,关键的问题在于,这与1:10之间有什么关系呢?

从软件产品质量控制来看,开发工程师提交的代码质量越高,测试成本也会相对变小。首先,高质量代码的可测试性强,自动化成本低,测试成本会明显降低;其次,高质量的代码会使系统bug绝对数量减少,测试工程师消耗在bug上的时间减少,因而与开发之间的沟通成本明显降低;再次,高质量代码的返工率会降低,研发流程更加顺畅,效率更高;最后,单元测试和接口测试的自动化持续集成也可以有效降低回归测试的成本。Google工程师的价值在于将70%的工作花在提高系统架构和代码质量上。因此,1:10也不难解释了。

”(摘自http://www.taobaotest.com/blogs/show/1171

2.提高开发人员的能力和素质,怎么提高呢?

一方面招人的门槛要高些,起码有潜质,且做人方面踏实认真负责;

二,在团队内部”惩恶扬善“,褒奖好的,树立学习的榜样,惩罚最不好的,杜绝懈怠心理,但是惩罚的方式有很多种,扣钱属于最下等,最好是比较有意思一些的惩罚。

三,多搞一些团队一起参与的活动,增加同事间工作之外的联系,互相信任对方,把团队的力量拧起来,要让团队成员内部知道,一个成员做事做不好整个团队会受到影响,接受惩罚,只有大家互相帮助,整体提高才是目标,有人不认同这种方式要离开也没关系,寻找合适的人,组建一个强大的团队而不是参差不齐的团队成员。等等。尊重并满足员工的合理要求,关怀员工,这是公司对员工的好,“惩恶扬善”,光明磊落,不要让你的员工对公司产生怨气,员工自然从心里更认同公司,从而对激发员工从内心真正的想要做好这样一件事的心态有帮助。

时间: 2024-12-28 12:57:46

软件测试员比软件开发员的相关文章

软件测试员的要求比软件开发员的要求低吗?

首先,表面上是这样的,但是本质上并不是,想知道原因,我用一篇文章告诉你看到的都是表象.很多小公司对于测试的流程和要求并不是很高,就更加显得测试比开发的要求低. 即使说经过这几年的发展,测试行业已经比以前成熟和正规许多,但是你拦不住很多公司并不在乎什么流程,什么计划.因为对于很多小公司来说,开发人员是他们的命脉,可能有10个开发,但是只有1个测试.在这些老板的主观认为,开发解决的是有无的问题,而测试是解决好坏的问题.在缺乏长远目光.追求眼前利益的情况下,对于产品的态度也就是只求"过的去"

10年以上Java程序员的软件开发总结

在很多时候,我们总是一直往前走却忘了对过往做一个总结,继续往前走.复盘这件事情,一直都在强调,却很少人做. 以下是作为一名java程序员经过10年时间总结出的一些有关于Java软件开发的经验规则: java编程真的不是一件容易的事 不管你多喜欢或是多会Java编程,在学习和解决问题上总会碰到障碍.工作的时间越久就越能明白这个道理.不过这倒是一个让人进步的机会,因为你要一直不断的学习才能很好的解决你面前的难题.如果你已不有了进取心,那么当遇到难道无法解决时你就会想要放弃. Java编程也是最让人沮

这个软件开发员造出了一个没有汽车的世界

这是一个不在交通堵塞中,就在交通堵塞路上的世界.中国估计有 4 亿人在路上行驶,就算在高山荒野,都很难不听到那滴滴的噪音,看见那混浊的尾气. ▲ 图片来自:Visit Redwoods但现在有人制造出了一个不可能的想象:一个无车的世界是怎样的?软件工程师 Chris Harris 周一在 Twitter 上发布了一个 AI 软件在手机上使用的视频.短片里,只见他走过一排排不断闪烁着消失的汽车.只要他把相机对准汽车,汽车就会变得透明,那数百万吨死亡金属机器打嗝的碳排放全都消失. 虽然有些闪烁不定.

测试员和开发员的‘爱情’

回想初来项目组与学长们初认识,感觉开发员好厉害呀,自己测试员心里明显感觉处于下风除,但是经过半年的相处,感觉其实测试员和开发员的'爱情'也是很幸福的,都需要用心去维护去沟通. 作为测试员,在工作中接触最多的当然是团队中的开发员,所以在项目组中如何和开发员进行有效的沟通交流是测试员面对的重要问题.我觉得,在一个项目组中,总是有开发人员喜欢和不喜欢的测试员,测试员也有喜欢和不喜欢的开发员,这两者之间的工作效率和效果都有很大的差异.当然,不能武断地说开发员不喜欢的测试员就一定是效率低下的开发员,或者说

漫谈程序员系列:程序员的生活就这样吗

我当了快十年程序员了,终于老得可以来谈谈程序员的生活是什么样子了. 或许陈奕迅的<十年>中的一段歌词,可以表示很多程序员和软件开发之间的感情纠葛: " 十年之前 我不认识你 你不属于我 我们还是一样 陪在一个陌生人左右 走过渐渐熟悉的街头 十年之后 我们是朋友 还可以问候 只是那种温柔 再也找不到拥抱的理由 情人最后难免沦为朋友 怀抱既然不能逗留 何不在离开的时候 一边享受 一边泪流 " 这首歌的词作者是林夕,香港才子.林夕的歌词写得真不错,我还因为这个在 13 年时买了他

从一个程序员笑话看软件开发管理(转载)

从一个程序员笑话看软件开发管理 原文出处:猛禽的编程艺术 原文链接:http://blog.csdn.net/raptor/article/details/727299 有一个笑话是这样的: 1. 程序员写出自认为没有Bug的代码. 2. 软件测试,发现了20个Bug. 3. 程序员修改了10个Bug,并告诉测试组另外10个不是Bug. 4. 测试组发现其中5个改动根本无法工作,同时又发现了15个新Bug. 5. 重复3次步骤3和步骤4. 6. 鉴于市场方面的压力,为了配合当初制定的过分乐观的发

程序员带你十天快速入门Python,玩转电脑软件开发(二)

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到熟悉的效果. 声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群538742639.群马上就满了,名额不多. 上节课主要讲解了以下内容: 为什么学习Pyth

程序员带你十天快速入门Python,玩转电脑软件开发(三)

声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群538742639.群马上就满了,名额不多. 这是高级程序员快速入门Python语言课程.助你快速学习Python语言.这是第三课. 程序员带你十天快速入门Python,玩转电脑软件开发(一) 程序员带你十天快速入门Python,玩转电脑软件开发(二) 因技术知识连贯性,还没有学习前两课的同学,建议点

程序员带你十天快速入门Python,玩转电脑软件开发(一)

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到熟悉的效果. 声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言的你.有梦想的你,立志做全栈攻城狮. 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群538742639.群马上就满了,名额不多. 目录: 为什么学习Python? Pyt