你不需要软件测试人员吗?

我曾经和来自不同开发机构的人探讨过关于他们如何管理软件开发,如何组织,他们遵循什么样的开发实践,以及什么样的开发实践真正有效。工作在小团队的大部分人都没有人手帮他们测试程序,因为测试人员们不是真正开发软件的人,所以通常觉得他们是多余的。这就意味着程序员许要自己测试他们的软件 – 或者用户来测试。

  敏捷团队中的测试人员能做什么?

  很少敏捷团队会觉得需要测试人员。测试人员被看作是瀑布时代的产物(需求、设计、编码、测试)。在XP团队,每个人都是程序员,每个程序员都要负责测试自己的代码,写自动的单元测试,使得用户需要的验收测试自动化。Scrum根本没有定义测试要做什么 – 团队会最终找到解决方案,因为他们会检阅自己并调整自己,以获得最佳的实践。

  如果程序员已经测试了他们的代码(也通过结队的方式进行了代码审查),那么他们需要测试人员做什么呢?

  Janet Gregory和 Lisa Crispin写了一本书来说明敏捷团队中测试人员的作用,它向程序员和测试人员说明测试人员是如何配合敏捷开发的,但这仍然没有改变大多数团队的看法,尤其在“工程驱动的文化”(程序员创立的创业团队)中更是如此。

  他们的论点是敏捷团队的步伐相对于测试人员来说太快了,黑盒测试人员们仅仅通过写测试计划,通过手动的测试代码来测试,或许要不断的更新他们的质量中心或SeleniumUI回归测试,这些都不可能追得上在短时间内就要发布新功能的团队的进度。如果测试人员不会用Fitness或Cucumber写验收测试,或者没有足够的业务知识帮助填补客户/产品拥有者的空当,不能回答程序员的问题的话,那么他们又有什么优势呢?

  这个问题在持续开发中更为显著,一些公司如IMVU和Facebook,使得某种编程实践变得流行起来,他们查看自己的工作,写自动测试用例,查看代码看看测试是否通过了,更新都是很快的,然后自动发布到在线系统中去。

  让用户来测试你的代码

   一些公司把持续开发看作是“众包”(crowdsource)他们测试的机会 – 让他们的客户来为他们测试。这实际上很有竞争力。然而也很难用这种方法写出可靠安全的软件 – 可能也是不可能的。针对持续发布给用户的系统的质量问题,James Bach有一篇批评的文章,是关于他们花了20分钟时间去测试一个持续部署的程序,就发现在很短的时间内就发现了问题。

  有一些持续部署的公司更小心些,他们按照Etsy/Flickr的做法,在晚上上线:持续的发布更新,但是在用户量很大之前就进行了测试,他们还会密切关注结果。

   然而,很重要的一点是用户只能测试某些功能,事实上,也只有用户可以测试它们:一个功能是不是有用,一个功能是不是可用的,他们需要什么信息才能正确的 完成一个任务,工作流程应该如何优化。这才是对比测试所应该达到的效果 – 通过实验不同的想法,功能和工作流程,收集数据,然后找到用户最喜欢什么,以及他们不喜欢什么。去尝试不同的方法,并获得反馈。

但是你不会问你的客户他们是否测试完毕了,代码是否有效,系统是否稳定安全,负载大的情况下是否正常工作

  你需要从测试团队中获得什么?

  就算是最好的,最负责的,最有经验的程序员都会犯错。在我们公司,每个人经验都很丰富,其中有些人工作了10-15年以上了。他们很仔细的测试 代码,每次check-in之后都会更新自动测试用例。在持续集成过程中这些测试都会运行 – 我们非常依赖于这些测试(现在已经有成千上万的测试用例了,并有较高的覆盖率),静态分析的缺陷核查,以及安全核查工具来对付基本的代码错误。所有的更改 都会让另外一个高级的程序员来核查,从来没有过例外。

  但就算有好的方法和工具,优秀的程序员还是会犯错:一些细微的问题(不一致,界面问题,数据转换和建立问题,没有编辑等问题)以及一些基础的问 题 (负载下的运行失败,同步问题,缺少需求,规则错误,异常处理中的错误)。我想确保在用户发现错误之前发现大部分(尽管不是全部)的错误。程序员也是。

  这也就是测试团队起作用的地方了。我们拥有一个小的,但是经验丰富的,有特别专长的测试团队。一个测试人员专注于验收测试,验证功能需求,可用 性,以及业务工作流程。另一个测试人员专注于功能的回归测试以及业务规则的正确性和覆盖率,找到程序员测试用例中的规则漏洞,并在API层让集成测试自动 化。还有个测试人员主要做操作测试,压力测试,以及soak test来找到峰值和垃圾回收的问题,破坏测试 – 尽可能的破坏系统。当其中一个人不在的时候,他们也知道如何担负他人的职责,但他们有自己独特的专长和技能,以及自己的解决问题的方法。

  当我们初次建立系统的时候,我们有一个更大的测试团队,主要通过写测试计划,详尽的手工测试核查表,在UI层编写自动的回归测试,来测试覆盖率和可靠性。但用这种方法浪费了许多时间。

  现在我们更依赖于程序员针对功能覆盖率和回归保护自己编写的自动测试用例。我们的测试团队将精力更多的放在探索性的功能以及操作,基于风险和以 用户为中心的测试中去了,以找到最重要的缺陷,发掘系统的弱点。我们都喜欢这种方法,因为我们在测试中找到了真正的重要的缺陷,那些躲得过代码审查和单元 测试的缺陷。

  当程序员作了更改后,测试人员马上测试更改。他们和程序员一起结队去测试新功能,和程序员一起运行模拟来找出运行错误,竞态条件(race condition)以及现实世界中的时间相关的问题和工作流程问题。他们摧毁系统以确保错误探测和错误恢复机制是成功的。他们测试安全功能,和顾问一起 搭建和管理测试。他们也和操作人员一起,和新用户以及新部门处理集成检查。他们和团队的其他人员一起以非常快的速度,每两周就发布到在线系统(有时更频 繁)。

  测试团队也会负责软件的发布。他们将每个发布都集中在一起,查看依赖,决定发布什么时候进行,什么将会发布,什么不会发布,他们会核对我们是否完成了整个团队同意去做的更改,他们会测试过去的测试用例还有数据转换测试,最后和操作人员一起发布到在线系统中去。

  他们没有让整个团队的进度慢下来,他们也没有阻碍我们发布软件。他们确保了软件上线的时候正常工作。

  测试人员找到更多的缺陷

  我为高可靠性,高集成性的业务工作了很久,没有测试人员是不可取的 – 犯错的代价太高了。我不认为你可以创建真正的软件,而不需要人来测试它。除非你是在创业的早期,还处于概念的迸发期,或者你只有一个小团队,仅仅为内部使 用而写的软件(可能你也没堵到这篇文章),否则你需要人来为你测试系统以确保系统是正常运行的。

  不管你如何工作,不管你用什么方法 – 敏捷开发还是瀑布开发方法,都改变不了需要测试人员的事实。如果你推进得太快了,测试人员需要加快步伐,以适应能够获取信息的方式。好的测试人员可以做到的。

  我就算再蠢也不会认为测试团队能找到所有的缺陷——虽然这是他们的工作。当然,我希望测试人员会在客户发现之前找到明显的错误。

  我需要为他们做的也正好帮自己回答了一些重要的问题:我是否可以发布了?有什么还是粗糙的或者不稳定的或者不完善的?什么需要迟些发布?什么需 要更进一步审查或者重写?设计中什么地方很薄弱?什么地方没有自动测试用例?哪里需要更好的测试工具?什么功能难以理解或不一致或者很难搭建?什么消息漏 掉了,或者容易误导人的?我们是否做太多了,做太快了?我们是否需要更改设计,代码,还是设计或编码的方式,以使得系统更好用,更可靠?

  测试不能提供所有的信息,但能提供一部分。好的测试可以提供许多有用的信息。——James Bach (Satisfice)

  没有测试人员,你不仅发布了一些你本来应该没有错误的代码,你也失去了一些重要的信息,譬如你的软件真的那么好吗,例如你可以做什么让它更好。如果你想构建好的软件,那么现在你的机会来了。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-31 11:48:33

你不需要软件测试人员吗?的相关文章

软件测试人员分工

最近看了点敏捷测试的东西,看得比较模糊.一方面是因 为没有见真实的环境与流程,也许它跟本就没有固定的模式与流程,它就像告诉人们要"勇敢""努力".有的人在勇敢的面对生活,有些人在勇敢的挑战自我,有 些人在勇敢的面对失败与挫折.好吧!他们都实现了"勇敢",勇敢到底是如何去做,也许说不清楚.或者说每个人都有自己的实践方式.但是他们却同样靠着"勇 敢"攻克不自己所面临的困难.当然了,敏捷并不是简单一个词语,经过前人的不探索与总结,还

如何成为一名优秀的软件测试人员

Ryan Yackel分享了一套三步走战略,旨在帮助测试人员巩固知识并在团队中扮演关键性角色. 如果您身为一名软件测试人员,那么肯定对"我们公司正在朝着敏捷软件开发方向努力"的说法不会陌生.事实上,众多已经采纳敏捷开发思路的团队开始将测试工作分配给每位成员,那么未来我们软件测试人员又将迎来怎样的挑战? 好消息来了:软件测试人员仍将不可或缺,甚至在敏捷测试中发挥更大的作用. 但大家也需要适应新的时代要求. 了解业务领域--而非局限于测试 软件测试人员要如何在企业朝着敏捷方向迈进时,证明自

软件测试人员的分工

最近看了点敏捷测试的东西,看得比较模糊.一方面是因为没有见真实的环境与流程,也许它跟本就没有固定的模式与流程,它就像告诉人们要"勇敢""努力".有的人在勇敢的面对生活,有些人在勇敢的挑战自我,有些人在勇敢的面对失败与挫折.好吧!他们都实现了"勇敢",勇敢到底是如何去做,也许说不清楚.或者说每个人都有自己的实践方式.但是他们却同样靠着"勇敢"攻克不自己所面临的困难.当然了,敏捷并不是简单一个词语,经过前人的不探索与总结,还积累与

软件测试人员易遗漏的一些隐藏缺陷

通常软件测试会暴露软件中的缺陷,经过修正后可以保证软件系统的功能满足需求并正确运行.但是,在系统测试和 确认测试中,测试人员容易遗漏一些隐藏的缺陷.众所周知,软件测试不可能发现所有的缺陷,而软件开发周期各个阶段仍然存在注入缺陷的可能,但是,有一些缺 陷是测试中容易忽略的,也就是说,通过测试方法和用例可以充分暴露这些缺陷,遗憾的是,它们往往被忽略或者某种原因忘记测试了,这就给软件留下了隐患或者 危机.这些容易被忽略的缺陷包括: 1.安装缺陷 通常项目组完成代码后,发布时候安装打包是最后一个环节,而

软件测试人员的烦恼

软件测试人员在软件开发过程中的作用越来越重要,基本上是一个把关的地位.我们来快速浏览一下主要影响软件测试人员的工作质量的几个方面. 一.软件发布周期的不断加速 为 了应对今天需求的快速性和连续性,软件交付变得越来越快.大多人都认为软件测试在软件交付过程中是一个相当棘手的问题.妄想通过简单的加快开发过程来达到 预期的结果,而且开发过程本身存在问题,这显然是不切实际的.如果没有给软件测试分配足够的时间,那么该公司可能需要重新来审视下自己对于软件开发和测试 的态度.大多数企业都非常在意软件的质量,但是

专业软件测试人员发展的未来

专业软件测试人员发展的未来 根据Google/微软一些大公司开发和测试融合分工新的趋势,未来的IT世界有可能会发展出一种新的场景和分工: 基本的功能测试设计执行和白盒测试技能应该让所有开发人员都所具备,然后才能解放出专业的测试人员去做复杂的测试工作(非功能测试.beta测试.测试执行平台打造等),有时间去研究如何提高整个研发团队的测试质量与测试效率,更好地辅导开发人员掌握基本测试技能,当然开发人员依然要通过交叉测试来解决测试心理学的问题(不能自己测试自己).开发将对自己的局部代码质量负责,测试专

谈软件测试人员定位---三年软件测试总结

因为一直从事web产品的测试,我的观点并不一定适合所有的类型项目.   工作已将近三年了,虽然这三个年头里我都在积极的学习着与测试相关的技术:但是能沉淀的东西很少.相信测试同学都有类似的感觉.     不要为了测试而测试 前几天做了一个测试的PPT ,就是讲项目中要用到的测试技术,总结了半天其实实际的产品中没什么技术,熟悉需求,转化成用例,待项目上线后验证功能就OK 了:对一个自身质量要求不高的项目,我们有时候为了体现自己价值,非要在一些不痛不养的问题上揪着不放. 举个不恰当例子,某钢琴高手开了

好的软件测试人员是什么样的?

这个问题是回应我上一篇博文的.因为我正在雇用一个测试员,我觉得应该给他点刺激.以下是软件测试这个职位一般应该具备的品质. 一个好的软件测试员应该- ● 经常思考,什么是我现在能执行的最好的测试. ● 提交的bug含义明确,有清晰的复现步骤,能用简洁的语言把问题描述清楚. ● 不会因为开发人员的做法受影响.测试员不应该仅仅是因为他们能够理解那些决定开发人员做法的技术难点,就去全力维护自动化.应该做的是交流在当前有意义的领域,自动化是怎么工作的. ● 有能力理解利益相关者的业务. ● 足够专业,能认

如何才能成为一名优秀的软件测试人员

     最近在和一些公司的软件工程师和管理人员交流时,发现他们经常发出这样的感慨:寻找一名优秀的测试人员这是太难了.那么,具备哪些要素才成成就一名优秀的测试人员,下面是我认为比较重要的几点:     1.对分析和测试的激情:任何事情的成功的关键在于你是否对它怀有真正的激情.     2.专业技术:要想成为一个伟大的测试者,必须要具备非常出色的编程能力,这样你才能很好的理解你要测试的系统,才能和开发人员进行更加有效的沟通,才能写出高效的自动化测试程序.     3.良好的分析能力:需具备很强的分

上海:急招vc/mfc, c#, vb.net 开发以及软件测试人员,待遇优厚

问题描述 招一个VB.Net开发工程师:1.精通VB.Net.ASP.Net.SQLServer,具有二年以上的实际开发工作经验.2.计算机或相关专业大学本科以上学历,会日语者优先.3.年龄35岁以下.4.地点:上海浦东5.薪资:5K-8K有意者请发简历到peter@51tiaocao.com找8个有VC/MFC开发经验的VC/MFC开发工程师若干1,一年以上VC++开发的实际工作经验,MFC开发经验者优先.2,计算机或相关专业大学本科以上学历.3,会日语者优先.4,工作地点:上海浦东5,薪资: