测试发展

源地址:http://qa.blog.163.com/blog/static/190147002201263111159796/?latestBlog

 

       关于测试人员的发展
       那我说一下我的看法吧。因为大家都是搞测试的,这里我也只谈测试。
       首先,我们可以有两条路发展,技术和管理。管理就是做team leader,manager,director这么走。因为我没有走这条路,所以我这里也只谈技术。而且,即使走管理,也是应该具备很强的技术能力才行,所以技术使我们的发展之本。我个人不喜欢技术不精通的领导,也不喜欢被这种人管理。
       技术的发展是分阶段的,基本上你要是能发展到最后的阶段,工作,钱,房子,老婆都不用发愁了。当然要一步一步走,不可能一步升天,而且一路走过来也不是很容易。
       应该说大部分人可能都达不到。不过只要你肯努力,坚持不懈,就一定能达到。
       第一阶段:就是基本功的问题。这个阶段从大学入学开始了,我接触不少人工作几年都没有达到要求。这个要求是一定要达到的,不然以后没法往高发展。大学的一些课程一定要学好,主要是数据结构,算法,数据库,操作系统,计算机网络。争取精通两门。数据结构,算法对软件开发非常的重要,很多大公司面试就考这些。你不过关,根本通过不了面试,一两道算法题一下就把你难住了。另外,我可以告诉你,顶尖公司的面试80%都是考算法,你有没有经验不要紧,做没做过项目不要紧。关键是考察你的基本功,基本功打好了,其他工作就都容易很多了,基本功打不好,什么都白说。操作系统,争取要精通windows或者linux内核,看你走哪条路了,我是搞windows的,不过他们之间很多地方也是相同的。计算机网络,争取精通TCP/IP协议。数据库我不怎么懂,我的理解是要精通oracle,sqlserver,还有sql编程。
       另外就是编程技术了。C,C++,面向对象一定要搞懂,搞熟。大公司面试的算法就是要你用C/C++实现的。这些搞熟了,学习其他语言就是几个小时的事情。(我指的是上手,不是精通)这些东西搞不透,不管你其他语言用多少年,回来学他们还是难。
       再有就是英语水平了,听说读写,各个方面都要达到要求。技术到了一定程度,英语对你的发展就起到了非常决定性的作用了。你英语好,就可以去外企,就可以外派出国,甚至在国外发展。
       以上这些都是在大学应该掌握好的。当然了,能在大学掌握好这些的毕竟是少数。这些少数人就是去了微软,google的那些,一毕业就拿到月薪上万工资的。大部分人都是达不到要求的,这没关系,毕业后一定要找时间把这些基本功补上。不然的话,在下个阶段的发展就很受限制了。
       第二阶段:计算机知识的扩展,行业知识的精通。这个阶段从你大学毕业走向第一个工作岗位开始。工作之后,发现计算机的世界比大学的知识要博大精深很多。一开始工作,就要拼命吸收以前没有接触过的,新的知识。这个就不多说了,大家都会有很多感受的,会觉得很多东西都不会,不会就学。以后你跳槽去面试,人家会看你工作几年,这几年干什么了。工作1,2年之后,很重要的一件事情就是要选择一个行业了。也许是你现在正在从事的行业,也许是一个新的行业。总之,你自己要为自己规划,选择一个适合自己,而且又热门,以后有发展的行业。无论是现在的行业,还是跳槽到一个新的行业,都需要你开始积累在这个行业的经验了,要精通这个行业。有这个基础之后,就要去这个行业里top的公司了,过期,外企都可以,一定要有名气,大公司。比如,通信的华为,搜索的百度,等等。如果你精通了这个行业,去这些公司不是很难。
       另外有一点很重要,如果你本科不是一所名校毕业的话,争取能上一个名校的研究生,全职,兼职都可以。这样可以为下一阶段做好充分的准备,否则的话会有比较大的困难。总之了,是自己的短处都要想办法去弥补,不然发展总会受限制。
       第三阶段:国际著名大公司。有了前两个阶段的积累,加上自己的英文水平,就要找机会进入国际的大公司了。相信这个时候就会有很多猎头来联系你了。选择你这个行业的世界前3,最好是第一或者第二。进去之后要学习两个方面,一是英文,中国人可以学一辈子英文的。另外一个就是大公司的管理。可以这样说,国际大公司的管理有很多类似的地方,因此他们的招聘非常愿意招其他国际大公司的职员。这就是为什么,你一旦踏上一家公司,一辈子都不用愁工作了,可以在这些大公司跳来跳去,工资节节高。到了这个阶段,你基本上可以有个比较不错的生活了,房子,车子都不会是太大的问题。
       第四阶段:向国际化发展。如果你还不满足,觉得自己还有能力更进一步,那我就建议你向国际化发展了。中国的工资毕竟有限,到了第三阶段也不过就是20万左右,你可能还不满足。那么你就可以联系国外的公司了,有了你的英文,你的经验,你的背景,到时候就是水到渠成了。我相信国际的猎头也会盯上你的。
       最后说一下,如果你现在已经具备了我所说的各个阶段的能力,那么你的简历是任何公司都很难拒绝的了。因为目前的情况,具有这些素质的测试人员在世界都紧缺。很多公司都招不到人,即使连google,MS也不列外。他们都在到处寻找这种人。
       最后说一下测试。我一直没有讨论测试的问题,因为我一直没有把测试当做一个难的东西来看待。我认为测试时表面上的,我前边提到的东西要比它重要的多。欢迎大家一起来讨论。我也是进入测试才2年多的时候,其中大多数的时间也像大家一样的迷茫,很多时候也很悲观。不过通过自己的努力,最后终于得到了一个满意的结果。我发现自己对测试这个行业的理解和很多人都不同,希望我的理解能给大家一点帮助。
       测试职业发展的三“步”曲
       进入测试行业也有两年半了,从一点不懂,迷惘的状态,到了现在也有些自己的理解了。常常听到有人问各种各样的问题,不同的人也对测试表达出不同的理解,甚至很多自相矛盾。比如,测试到底有没有前途,测试的带鱼如何,测试与开发哪个好,哪个更重要。我们更看到有些人具有测试十几年的经验出口说“测试不需要懂编程”,可是我们又看到很多手工测试人员由于不懂编程而被公司所淘汰。我们常听到有些手工测试人员讲“自动化不是万能的,很多产品不适合自动化”,可是我们又看到很多大公司又只招自动化工程师。因此出现了测试,开发互相看不起,手工测试,自动化测试互相看不起的奇怪现象。正式因为有这么多的问题,这么多的疑惑,也没有人能给出一个很好的解答,或者大家的解答都各不相同,造成了如此的情景。到底隐藏在这些表面现象的深处,根本的东西又是什么呢?我认为,是大家没有真正理解什么是测试。测试不同于开发,开发经过几十年的发展已经到了很成熟的阶段了,因此大家对于开发就不会有很多的争论与问题。测试发展才多久呢?有人说很长了,可是我们想想大学什么时候才开设有测试知识的课程呢?可能现在也不是所有计算机专业都能在大学就接触到测试的知识吧?不然现在也就没有这么多测试培训班了。测试是一个新兴的行业,它正在快速的发展着。因此,我们对于测试的理解,千万不能只是停留在某一个层次。对于测试人员来讲,不能妄自菲薄,也不能坐井观天,我们需要共同的努力去推动测试流程,测试技术的发展,充分发挥自己的主观能动性,发现或发明更好的测试方法,能在测试的发展上留下自己的足迹,自己的贡献。这里说一下测试相对于开发来说比较吸引我的方面。开发人员的工作实际上是比较死板的,一定要根据设计文档来实现,偏离了设计文档就是bug了,甚至编程的风格也要按照公司的规范来,因此,工作中并没有太多创造性的东西。而测试人员相对来说就会自由很多,因为测试没有什么固定的模式来做,我们的目标就是保证产品的质量,而手段就是找bug。具体怎样找,基本上你可以完全来自我控制,手工找,自动化,看代码。因此,测试工作给我发挥创造力,想象力的机会,所以我喜欢他。
       说了很多闲话了,现在步入正题吧。我说一下目前我的状态对测试的理解,谈一谈测试职业发展的三部曲。说一下每一步的工作内容。
       第一步:手工测试/黑盒测试。这个大家都太熟悉不过了,主要是设计测试用例,执行测试用例,发现bug,报告bug,验证bug fix。每一步都有junior,senior,architect的区别。junior刚入门,就是熟悉学习这些东西,这些东西都搞熟了,加上对产品的较深理解就是senior了。senior要对一些较大的模块能够做计划,能够带领junior的一起工作。architect要能够对整个产品有深刻的理解,可以规划整个产品的测试,包括需要多少硬件,需要什么软件,需要多少人力,需要多少时间,等等。
       第二步:自动化测试。手工测试人员和自动化测试人员最大的区别在于懂编程。不过如果你只是会用script编写一些程序的话,还不能称之为自动化测试人员,至少还要有软件设计的能力。junior刚入门除了要学习手工测试的那些知识以外,还要能过使用某种高级语言,某种测试工具自动化自己所负责的测试用例。senior除了手工测试的那些要求以外,还要能够规划一个较大模块的自动化,能够解决各式各样junior在自动化过程中发现的问题。architect除了手工测试的要求以外,还要能够对整个产品进行自动化的设计,比如采用什么语言,采用什么工具,各个模块自动化的整合,自动化的schedule,自动化的report等等。
       手工测试人员的title,往往叫做SDET(Software Design Engineer in Test),junior SDET,senior SDET,principle/staff SDET。
       还有更常见的title,SQAE(Software QA Engineer),是处于这两者之间的,既要手工测试,也要懂得自动化测试。基本上大多数的测试人员都是发展在这条path上。因此,你可以看看自己,如果是SQAA,就要往SQAE的方向发展,如果已经是SQAE了就要往SDET方向发展。不同的path,虽然有不同的级别,但是工资也是有区别的。比如senior SQAA=junior SQAE,senior SQAE=junior SDET。而且,不同的path可能最终能够发展到的级别也有区别,比如SQAA可能就不会设有principle SQAA的级别。也就是说,如果想达到architect的级别,只是会手工测试时远远不够的。
       达到Senior SDET应该就是比较高级的测试人员了。编程序,自动化这些都是小菜一碟,就是跟开发人员比起来也能做一个准senior的developer了。可是这还没有发展到头,以我现在的观点来看,还有第三步。
       第三步:安全测试。我们知道各式各样产品最终发布出去最头疼的并不是用户找到多少bug,而是安全问题。很多知名大公司发布产品后,还要投入大量的人力去进行安全漏洞的修补。安全漏洞严格来说也是质量问题,那么这些安全漏洞有没有可能在产品发布之前被测试人员所发现呢?答案是肯定的。因此作为我们测试人员的话,把手工测试,自动化测试精通之后,就要努力向安全测试的方向发展了。具备有安全测试能力的工程师基本上都可以称之为测试专家了。这需要有非常强的编码能力,非常深的系统内核知识,甚至黑客的背景。更重要的是,要随时能够从安全的角度来分析产品的质量。我们要了解程序员实现的具体方法与步骤,结合review他们的代码,大量的试验来发现安全漏洞。这里举个例子,前不久学习一个文件加密的实现过程,发现它会把每个要加密的文件做一个备份,加密之后再删除这个备份。备份的作用是一旦加密失败,数据可以被恢复。那么我当时就考虑,这个备份删除之后,是否内容还留在硬盘呢?后来经过试验发现,确实内容还存留在硬盘中。这就是个安全漏洞,虽然你的文件是加密的,可是黑客还是可以通过找到以前备份文件的内容来得到敏感的信息。
       以上是自己对测试先装的理解,自己可以怎样发展?自己也正在有意识的向第三步发展。我觉得测试人员一定不要停留在自己目前的技术水平上,技术没有尽头,上面的发展空间还非常广阔,也许还有四步曲,五步曲。
 
领导奇怪我为什么不跳槽?
        公司不是大公司,我是第一个海归,我后边又来了两个海归,不过都是在短时间内就跳槽了。从此之后,公司基本决定不再招收海归了。
        很长一段时间之后,在跟HR闲谈的时候,谈到了这个话题。她告诉我,领导很奇怪我为什么没有跳槽。我当时并没有怎么回答这个问题,回头想想,可能是这个原因。
       之前工作过3个公司,没有一个超过一年的,各个都是不同的行业。因此自己的感受特别深,跳槽很不利于行业经验的积累,往往要从头做起。而我当时可以说已经得到了除了行业经验之外的所有东西。因此我的目标就很明确,就是要积累行业经验,在自己选择的行业里精通下去。当然当时的目标是开发不是测试,后来目标就调整为行业经验+测试经验。而且我相信只要在自己的领域做到精通,以后待遇都不会有任何问题。因此一直工作了20个月,自己感到成熟的时候才开始考虑。当然最后事实证明也跟我当时的想法基本一样,这个行业世界排第二的公司在面试了我15分钟以后就给了我offer,并且salary远远超出了我的预期。并且最后contract上的salary又比当时许诺我的高了一些。关于待遇问题,我没有negotiate,它们问我要多少,我的回答是,“你们根据我的水平来给就可以了,我个人没有什么特别要求”。关于面试,他们主要让我谈了对这个领域的看法,测试方面并没有问多少,这点也验证了我所说的,测试只是个基础,行业知识的精通才是关键。
        希望我的经历对大家的跳槽决定能有所帮助。
测试人员如何能够受到重视?
        常常听到有人抱怨说公司不重视测试,不重视测试人员。没错,这个在小公司是非常常见的现象。其实,即使工作在大公司,虽然测试和测试人员的地位得到了很大程度的提高,可是相对开发和PM的地位还是有一定的差距,也就是说测试在公司中的地位还是比较低的,这个其实是不争的事实。道理也很简单,测试人员的技术水平,测试工作的难易度和测试在产品开发过程中的相对低位都决定了这个现实。由于测试的性质造成了相对的地位低下,那么如果想使得自己作为一个测试人员在公司或者项目组的地位得到提高,一个行之有效的办法就是超越测试的工作范围。简单来说,一个测试人员在工作中的重要性的大小不是仅仅由测试的工作范围来决定的,更重要的是你能够在多大程度上去cover开发和PM的工作。我知道在很多很多公司,包括很多大公司,都不需要你这样去做,我也不期望很多测试人员会这样去做。可是我最近理解到,去take开发和PM的responsibility对于个人的发展是多么的重要。由于各个公司的测试情况千差万别,个人的测试发展之路也是各式各样,这里主要是谈个人的理解,很可能只适合少数测试人员。这里先讲一些事例:
       1. 本人以前在一个世界前几列软件公司中担任team lead,title是senior SQAE,来到现在的公司是按照最低级别录用的,也就是entry level。为什么差别这么大?主要是各个公司对测试人员的要求差别太大了,这里如果只是满足测试的工作内容的话,都很难升入中级,我可见到不少水平不错,工作好几年的员工连个中级都不是呢。可是这样的员工跳到国内的公司就有做director的。
       2. 以前也给大家介绍过我问director测试应该如何发展,他的回答是“短期要学好C,长期还是学好C”。可见他的回答完全跟测试没关系,应该是完全是开发的范畴。
       3. 在一次会议上有人问director的老板,测试senior的实在太少了,如何才能发展成senior。他的回答主要是强调测试人员要更加贴近客户,从客户的需求去考虑问题,不能局限于技术。可见他强调的又是PM的范畴。
       4. 自己的老板对自己提出的要求也是完全超出了测试的范畴,基本点如下:
a)Debugging: find root cause of a bug (开发)
b)Code review(开发)
c)Answer customers' questions (PM)
d)Researching competitors' products and showing options in functional spec (PM)
e)Don't only focus on my components, responsible for whole feature
       5. 一个印度PM同事就很牛,工作就是超出PM的范畴,开发的东西他知道底下具体是如何实现的,出了什么问题他都能估计出可能是什么问题。测试的设计他也能提出很多好的建议,很多测试的case也得请教他。他就升的特别快,几乎一年至少一级的往上升,最近发现都senior了。
        以上的例子知识向说明作为一个真正出类拔萃的测试人员各方面的功力都不能少。很多人还在争测试开发的地位高低,水平高低。其实对于高级的测试人员和高级的开发人员来说,他们的技术视野都应该是比较一致的。因此,如果作为一个测试人员真的想提高自己的地位,就不要把开发和测试对立起来,要把它们融合在一起才对。最后想说的是,能够把这些都做好的人不会太多,那个印度PM也算是很少见的了,他是真的很努力,负责。我本人以前也习惯性的局限在自己的任务范围之内,看到是其他人的工作就不管了,幸亏得到老板的指点,最近无论是什么问题,只要是跟自己产品相关的豆积极主动地去关心,思考和处理,感觉进步很大。也希望能尽快的达到老板的要求,就是“只要是这个产品的问题,别人第一时间就会想到去问你”。我想这个的时候,自己的重要性也无需争辩了。
       以上是一些个人心得,不知道是否对大家有帮助。
 
微软的Principle SDET到底是什么样的牛人?
        如果你要问起微软的测试人员关于Senior SDET的话,可能很多人都会说没见过,或者很少见。如果你要问起微软的测试人员关于Principle  SDET的话,可能立即就会有人指出微软不存在这样的人。可见,在微软Senior SDET都是凤毛麟角,就更不要说Principle SDET了。那么微软到底是否存在Principle SDET呢?如果存在,他们又会是什么样的人呢?这是很多人心里的一个很大的疑问,尤其是对于想在技术这条路上(区别于管理的路)提升自己的测试工程师。本人有幸接触到几个这样的牛人,这里我想分别从他们的教育背景,工作经历,以及他们对于测试人员的建议来归纳总结一下。里边有些人的背景可能离我们很远,我基本上是由远及近的顺序来介绍。
       TV
       教育:本科三学位:计算机,数学和物理(是不是很牛呢?)研究生:计算机硕士
       Before MS:第一家公司做操作系统开发,第二家公司做应用科学家,研究领域包括图像处理,编译器以及模拟器,第三家公司做卫星分析工具的开发
       MS:2001年加入微软做开发lead,创新一种高速远程文件系统,并且获得操作系统和数据库方面的专利无数,后转行做Principle SDET。
       建议:
1. Deep product and scenario knowledge(personal knowledge, customer interactions)
2. Strong analysis skills(RCA, dEBUGGER, cause-effect)
3. 3P's- Persistence, Passion, Positive Attitude
4. Leadership skills(vs management skills)
       总结:
       这位无论从教育背景还是开发背景都是牛的不得了。本科的计算机,数学和物理的三学位就可见他的个人能力是多么的突出了,加入微软之前的开发经验也不是闹着玩的,因此进入微软就是team lead。在微软的成就也不是一般人所能比拟的。这种人想做什么不行呢?
      JM
       教育:本科
       Before MS: 一年开发
       MS:1996年加入微软作测试,然后lead,中间曾经做过测试经理,然后又回到测试lead,一共在五个不同的team做lead/manager之后,做Test Architect,最后做到Principle SDET
       建议:
1. Dependable
2. Productive
3. Persistent "Relentless individual contributor" .
4. Pragmativ/Analytical
5. Malleable/Adaptive
       总结:
       这位测试盒管理的经验都极其丰富,在微软这么多team都混过,这么多职位都混过自然很不简单。都已经做过测试经理了,虽然跟上边那位好像还是有差距,不过做Principle SDET也是顺理成章了吧?
       BK
       教育:本科双学位:计算机和机械
       Before MS:在三家公司做过,包括医疗,网络设备等等。具体工作内容不详。
       MS:加入微软9年,一直工作在一个team
       建议:
1. Ensures tests owned are highly reliable and stable
2. Possesses in-depth component/feature knowledge
3. Possesses strong debugging skills(can narrow down issues)
4. Works towards continuous self-improvement
5. Provides critical feedback during Spec/Design reviews
       总结:
       这位在微软一个team一做就是9年,真是兢兢业业呀。从我对他的解出来看,他在技术以外的东西也是非常厉害。有时间我好好整理一下他的语录研究一下。
       LV
       教育:计算机本科
       Before MS:罗马尼亚计算机研究所工作13年,具体工作内容不详
       MS:1997年加入微软做测试,期间换过三个team
       建议:
1. Possesses in-depth product knowledge AND is big picture expert as well
2. Most of the time works in pro-active mode(anticipates rather than reacts)
3. Able to generate support from others in order to achieve  the desired outcome(impact and influence)
4. Understands the business
5. Demonstrates strong leadership skills
       别的不说,他加入微软之前就已经在研究所工作了13年了,加入微软也已经11年了,24年的工作经验做Principle SDET是不是会水到渠成?请问中国有人踏踏实实搞技术这么多年的人物吗?
       最后说一下,好好看看他们的建议吧?有几点都是好几个人不约而同提到的,对我们会有很大帮助的。
 
牛人为什么要做测试?
       不久前写了一篇文章,微软的Principle SDET到底是什么样的牛人?有个网友问了一个问题,我觉得非常的好,这里想简单解答一下。这个问题是
       “够牛。不过,为什么非要做测试呢?Principle SDET相当于什么职位(与管理职位对比)当了Principle SDET还要受一个小teamleader领导,受得了吗?”
       首先,Principle是一个级别,很难跟管理职位相比较,级别主要决定了工资水平。从管理的职位上分,有Principle Team Lead,Principle Manager,Principle Director等等。级别是不会降的,比如如果一个Principle SDET想做Team Lead,那就会是Principle Team Lead,如果想做Manager,那就是Principle Manager。因此对应的是级别,而不是职位。当然各个职位的侧重点不同,比如Principle SDET当然侧重于技术了,未必能一下子转成Principle Manager。但是,可以先转Principle Lead,再转Manager,从而在管理的发展上能够循序渐进。从我个人的理解上,Principle SDET是不可能转成Senior Lead,或Senior Manager的,因为这样就降级了。微软的发展一般在早期就会确立路线,技术或管理,因此一般某人会在一条路线上坚持下去的。在高级别的技术和管理来回转的情况应该很少,但不排除有全才在两方面都很出色,当然就可以转来转去了。
       由于Principle SDET的级别已经很高了,它们不可能被小team leader领导,至少也得是Principle Team Lead领导。我查了一下这四个人,其中两个是被Principle Test Manager领导,一个是被Partner Test Manager领导,一个是被Test Director领导。因此不存在受不了的问题。
       对于为什么要做测试的问题,牛人TV曾经做过一些解释,我个人很赞同他的观点,当然只有牛人才能从这么高的角度去看待测试。
       Why move from development to test?
       1) Hardest problems for Microsoft right now are in test
       2) Test is wide open and needs leaders
       3)Breaking code is as much fun as building it
       4) You get to write more code in test(10:1)
       5) Continuous ship cycle
       6) Really know the product from the customer perspective
       7) Get to solve more complex issues earlier in career
       我根本不算牛人,我也觉得测试技术含量还是比开发低(从我的层次上看),但是经过了3年多的测试经历,我相对更喜欢测试一些,其中主要的原因如下:
       测试的工作非常的灵活:开发相对来说压力太大,PM,TEST都盯着他,程序不能按进度完成就必须要加班,程序的编写一定要按照各式各样的规范,更多的时间是fix bug而不是write code。而测试人员的工作就没有太多固定的模式,完全可以按照自己的想法去进行,比如自己安排自己的时间,进度,自己决定什么case手工,什么case自动化。自己可以选择自己喜欢的测试工作工具,编程语言等等。
       测试的生命周期更长:开发一般专注于某种技术,或者某类技术。一旦市场上淘汰这种技术,它们就存在很大的转型的痛苦。并且,想跨行业跳槽也相对来说很困难。而测试一般不需要对某种技术做非常深刻的研究,因此有大量的时间去接触其他的技术,加上测试工作对技术的深度要求不算太高,转行相对要容易很多。以你此,测试人员搞技术的生命周期更长,职业发展也更灵活。
       测试行业还很不成熟,里边有大量潜在的机会。
       测试人才相对来说比开发水平要低,因此更容易上位。
       测试的缺点
       毕竟工作技术含量有限,在公司的重视程度不如开发
       职位的晋升和工资的水平相对开发还是有差距
       测试行业的普遍环境还不是很好,仅仅几个大公司才能给你充分发展的机会
       我个人的想法是要测试,开发两手抓,两手都要硬。在大公司搞测试挺好,万一因为什么原因离开大公司,去小公司就要做开发了,因为我不相信小公司能给我提供发挥我测试技术的平台。
 
步入安全测试(兼谈个人测试技术发展轨迹)
        进入测试领域已经满四年了,最近感觉自己可能有点里程碑似的改变了,因此回顾一下四年的测试技术发展轨迹供大家分享。
        有个网友说的很好,从测试的难度上来讲应该是自动化测试,性能测试,安全测试。我从来都是忽略性能测试的,原因也很简单,因为我基本没有从事过跟性能测试相关的工作,谈不上什么理解与感受。但是,我还是能感觉到性能测试的难度确实要大于自动化测试。一两年前还在热烈地跟大家讨论自动化测试的重要性,如何自动化测试等等,现在已经觉得没什么意思了。手工测试,自动化测试,黑盒测试,白盒测试,等等不过都是一种种测试方法而已,我们的目标很简单,就是要发现bug。而在发现bug的过程中,你是不可避免的要用到任何可能的测试方法和测试工具,包括自己编写测试工具。单纯地讨论他们孰优孰劣,哪个更高级并没有根本的意义。下面回顾一下自己的四年测试发展路径。
        1)第一个半年忙于手工黑盒测试(很枯燥)
        2)第二个半年开始考虑自动化测试(很迷惘和无奈)
        3)一年之后有一些自动化的ideas,学习C#,.NET,TestComplete等等,把自己设计的自动化平台实现(自己对自动化有一些自己的理解和实践)
        4)一年半之后在以前的基础之上开始寻找更高端的测试职位,实际就是寻找专门的自动化测试的职位(选择面很小,适合自己的也没几家公司,尤其是在国内,被迫出国发展)
        5)将近两年的时候如愿以偿,入职自动化测试的职位(开始把自己对自动化的理解和新的公司和同事交流,发现还是match的)
        6)入职之后的一年内,也就是进入测试的第三年,在自动化测试方面有了大量的工作经验(觉得自动化测试还是比较简单的工作)
        7)进入测试的第四年开始按照老板的要求进行debugging和code review的工作(在自己的feature上做到了测试支柱)
        8)四年之后也就是现在忽然发现自己有了比较大的进步,把以前零零散散的东西都能够联系起来了,感觉自己真正的走入了right path。最近一两个月的提升好像顶以前半年的,debugging技术已经比较熟练,code review也觉得比较轻松,并且在debuging和code review的过程中任何不明白的东西都会尽力去搞明白,这样在C语言,Win32,Windows Kernal,汇编,编译,还有Security方面都有了一个突然提升,在脑海里这些东西变得立体起来。也是最近才明白为什么以前director给我的建议是“短期学好C语言,长期也是学好C语言了”。
        以前也曾经hack过一个网站,并且在与那个网站的developer的较量中明显占据了上风。以前也曾经发现过security的bug,但是基本属于瞎猫碰到死耗子的情况。周六晚上突然有点idea,由于太晚没回公司。周日早上5点多睡醒脸也没戏就去了公司,一直工作到12点多,file上了bug。其实大概工作了一两个小时就攻击成功,可以远程把一个server crash掉。但是为了弄明白里边的一些情况以及这个漏洞的范围和黑客攻击的难易程度,又花了大量的时间。
         终于有了一些安全测试的感觉了,而回想起来也完全是由于前几年测试工作中知识,技术和经验的积累所成就的。以前一直觉得没有多年开发经验的不太可能做到安全测试,现在自己证明也未必,虽然确实不容易。最近两年由于英文的障碍使得自己的发展慢了不少,虽然也是average的速度,有些遗憾。更大的遗憾在于我30岁之前浪费了太多的光阴了,不说大学之前,就是大学之后到30岁的这段工作时间也基本上是浪费,没有真正地区深入过任何领域。30岁之后才寻找到了自己正确的道路,是有些悲哀,但总比没有找到强。我知道很多测试同行都像我以前那样迷惑,迷惘。希望大家在黄金年龄的朋友不要让青春太快的溜走,抓紧时间去寻找自己的道路吧。
 
自动化测试
关于我的自动化测试系统
        首先,这里介绍的是architecture,我基本上想设计一个open,flexible,extensible的系统。并且我也希望能学习新的知识和技术,因此用到了对我来说比较新的东西。
       系统共分4层,所以是一个layered framework。从上往下,依次是application layer,service layer,module layer and environment layer。
        1. Application layer:就是一个网站,作用是system configuration,test case creation,test distribution,test case scheduling, test execution monitoring,and test results reporting。也就是说在这个网站上进行测试系统的配置,测试用例的生成与分发,schedule,检测测试用例的执行情况,还有就是观看最后生成的测试报告。
        用到的技术有:C#,ASP.NET,ActiveX,Web service,SOAP,XML。
        2. Service layer:就是一个Web service,作用是从Application layer接受到所有的测试任务(写在xml里),负责解释XML,并且调度测试机,给测试机发命令,回收测试结果,组合结果返回给Application layer。
        用到的技术有:C#,ASP.NET,Web service,SOAP,XML,TCP/IP,Client/Server。
        另外一个在Service layer的是一个Windows service,它的作用是接受Web service的命令,执行并返回结果。
        用到的技术有:C#,TCP/IP,Client/Server。
        3. Module layer:就是一个动态链接库dll,负责给Service layer提供basic interface,把一些公用的功能封装起来。
        用到的技术有:C#,Dll,TCP/IP,XML。
        这层是整个系统的技术核心,其他层都是从这个层扩展出去的。
        4. Environment layer:就是测试环境层。这一层就完全是根据所测试产品的需要来设计了。我的设计时一台real machine上边运行VMware,这台machine的作用不是进行测试,是负责根据需要打开不同的虚拟机。真正的测试是在虚拟机上进行的。虚拟机上的测试有command line和GUI两种。Commandline就直接运行,GUI的测试时用Test Complete+Jscript来实现的。
        用到的工具与技术有:Jscript,Java,Test Complete,VMware workstation。
        有一些关键的设计有一定的原因。Application Layer就是一个网站,它具有能力去集成所有需要测试的项目。每个项目需要具有一个Web service,因此多个项目就会有多个Web service。每个项目的XML文件的输入格式都是不一样的,这个可以在Application layer在自定义。Application layer只是负责编辑XML,Service layer需要进行解释,也只有它才能进行解释。这是因为,每个项目的测试工程师才真正的明白他们想测什么,想怎么测。由于Service layer把不同的项目分隔开,因此,不同的项目也可以设计不同的Environment layer。测试的logic是掌握在Service layer的手里。
        因此整个一个测试的流程是这样的:在网站上自定义XMl的结构,因此生成相应的Test case界面。进行系统和test case的设计,生成相应的XML文件。通过Web service,传送XML到Service layer,Service layer解释XML,一个case,一个case的去执行。每一个case需要不同的虚拟机,Service layer告诉那台real machine去打开相应的虚拟机,之后告诉虚拟机需要执行什么样的任务。虚拟机启动command line命令,或者调用Jscript脚本通过Test complete来执行GUI的操作。之后返回结果给Service layer。所有case执行完毕,Service layer生成最后的报告传递给Application layer。Application layer负责显示报告给用户。还有就是Service layer间隔一定时间把测试情况返回给Application layer,这样用户可以监视测试的状态。
posted @ 2012-08-20 00:28  阿King2088  阅读(296)  评论(0编辑  收藏  举报