1 第一部分 - 成为资深软件测试员的四条进阶之路
在这篇文章中,我认为我们的软件测试员有四条潜在的进阶道路。它们是:
1)成为专业的QA。知道如何使用不同类型的测试工具开展网络测试,性能测试,负载测试和压力测试;
2)成为领域专家。可以像最终用户一样来使用你正在测试的产品;
3)成为测试架构师。可以领导整个团队和整个公司的测试以及质量保证;
4)成为工具和框架的开发人员。可以开发出世界一流的测试工具; 我还将讨论工程师的其他进价道路,比如转行去开发人员或PM,改变你的工作领域。
1.1 成为专业的QA
在本节中,我想讨论成为资深软件测试员的第一条进阶道路,是成为一个专业的软件测试员。在许多公司里,我们称软件测试员为QA(质量保证),QA这种角色在微软成立软件测试员(SDET)这种角色之前,便存在了很长的时间。你可能想知道的质量保证和软件测试员(SDET)的区别是什么。我们的测试员是质量保证吗?
让我引用这里的QA定义来开始我们的讨论:
QA 代表质量保证,它是一个框架,以确保在符合规定要求下进行开发和制造产品,例如药品,农药和医疗器械。
这是一个需要个人成长 ,实现和持续改进的质量体系 ,不,这不仅是另一份工作。事实上,这是一个跟其他工作都不一样的工作。
作为一个专业QA意味着你会得到一个真正的机会,去影响工作实践和提高质量的标准。这个职位,能够提供多种个人的、职业的发展选择,在不同的项目、过程和地方里扮演不同角色。这是一个真正负责任的职业,同时也要求个人的真正能力。
你可以从上面的定义看到,QA是一个专业的职位,如牙医,教师一样,它需要自己的技能。在我担任软件测试员的整个职业生涯中,我关注了许多专业QA的博客。比如James Bach , James Whittaker , Elisabeth Hendrickson , Cem Kaner 和许多微软内部测试架构师。他们教会我什么是软件测试,为什么我们需要测试,以及我们如何做测试。那么,他们之间有什么共同的地方吗?他们都是世界上的最好QA。他们都有非常深厚的测试知识,如基于模型的测试(Model Based Testing),探索式测试(Exploratory Testing),生产环境测试(Testing in Production),基于情景的测试(Scenario Based Testing)。他们乐于分享,活跃在社交网络之中,常常把他们想法分享给我们广大的软件测试员。这非常棒,让我们可以看到现在有许多很好的测试技术和技术日新月异的变化。
正如你看到的,成为一个专业的QA,重要的因素不是编码的技能,而是测试的技能。另一方面,软件测试员(SDET)可算是一种专攻的测试用例自动化的软件工程师。换句话说,SDE们(软件开发工程师 - Software Development Engineer)为实现产品而编写代码,而测试员(这里实际指SDET 软件测试开发工程师 - Software Development Engineer in Test)们为自动化测试而编写代码。编码技能,是我们的测试员应有的最重要的技能之一(如果你的代码能力不够强,我预计,微软将不会聘你为测试员)。
然而,作为一个软件测试员并不妨碍你成为一个专业的QA,反而你还有很多成功的机会。在我们的日常工作中,我们有很多机会去学习新的测试方法并可在我们的项目中进行实践再掌握它们。能够深刻得理解测试方法,并能够在你的测试策略中使用它们,对测试项目成功来说是非常重要的。
那么,如何才能胜任一个专业的QA?你必须做到:
- 知道并使用不同的测试方法,比如基于模型的测试,探索式测试,用户界面测试(UI Testing);
- 在一些领域有深入的测试知识,比如性能测试,网页(web),手机应用测试,安全性测试(或一个安全专家);
- 熟悉一些测试工具,比如JUnit,NUnit,MSTest,Selenium或商业QA工具,如HP负载测试工具(HP Load Running),或VSTS负载测试工具;
让我解释一下,成为一个专业的QA,我们为什么需要第二个和第三个技能。当一个公司想雇用一个QA,他们通常都有一个明确的期望,他们想雇用一个什么样子的QA。由于不同领域的测试方法可能有着显着不同,因此QA趋于更专业,一些QA擅长安全测试,而另一些QA具有网页设计经验。公司想要招聘一些在某些领域内有经验的人,那才能够解决他们的迫切需要。例如,当正在开发一个网站时,我们可能会想雇用一些熟知性能测试、网站基础设施的人,以帮助测试网站的可扩展性。如果你能熟知流行的网络测试工具,那将是你的一大优势。例如,如果你知道Selenium,最流行的Web UI测试工具之一,它会给你在就业市场上的增加你的竞争力。在大公司里工作,比如微软,它同时会带有优势和劣势。就优势而言,你将有机会做不同类型的测试,并培养你相应技能。另一方面,你可能会使用内部测试工具(不公开性质的那些工具)。你也可能只是测试系统里的一小部分(也就是说,你可能对你负责的那块进行了非常深入功能测试),但很少有机会测试整个系统。如果你在一些领域有深厚的功底,如安全领域,或性能领域,你会在未来有更好的职业生涯。
成为一个专业QA的另一个关键技能,不是测试的技能,而是其他的技能。想象一下你希望加入一家规模较小的公司或初创的公司,只有测试技能,可能无法确保你能应聘上这份工作。但是,如果你能够做些其他工作,如自动化编译版本,搭建Web服务器,创建部署脚本。你将有更大的机会被录用(因为你可能不是全部时间都在做测试,所以,如果你能在同一时间做很多不同的事情,那你将是一个非常不错的候选人)。
为什么我们应该立志做一个专业的QA,而为什么不干脆永远做一个软件测试员?
做一个优秀的软件测试员,是同时需要编码技能和测试技能。然而,我们需要在未来选择一个领域来深入,要么编码要么测试。这真的取决于你是否对软件测试有激情,和是否把它作为一种事业。如果你喜欢测试本身,成为一个专业的QA是一条很适合的职业发展道路。此外,同时拥有编码技能和测试技能将是你去应聘其他公司的QA职位时的亮点之一。另一方面,我也看到很多软件测试员对今天的工作并不满意,而且我认为根本原因是,他们有着工程师的根(engineering root),并不喜欢测试。如果你真的喜欢编码,转行到开发或做更多的测试自动化,测试类库的开发可能是你的方向。在过去,我们曾经有两个独立的角色:SDET,STE(软件测试工程师),一个专注于自动化,另一个专注于测试,和许多公司一样,他们也有类似的角色,如亚马逊,谷歌。我认为这有一定道理。
我们可能会从上面的定义中注意到的一件事,质量保证是许多行业都有的职位,不仅仅在计算机软件行业。例如,在汽车行业,QA是负责审查我们的汽车是否符合质量要求(meets the quality bar)。不幸的是,在软件行业的QA还不够成熟。今天,几乎没有哪个学院设立软件测试专业或者设置一个软件质量保证的学位。我们中的许多人选择软件测试员作为我们的职业,因为我们被雇用来担任测试员,并不是我们喜欢做测试。我们看到了很多关于测试员(SDET)在公司内外职业发展的博文和文章,我们还将在不久的将来持续看到这种情况。只是因为测试作为一个专业的职业还不够成熟,我可以预言,这里面很快就会发生很大的变化(例如,在必应(Bing)团队中,我们做了一种改革, 没有单独的测试员, 所有人都是软件开发工程师, 每个人都负责自己的程序的质量时,我们采用在生产环境测试(Testing in Production),把测试员的角色调整到更广的服务监测和运营领域中)。
1.2 成为测试架构师
在本节中,我想讨论我们如何能够成长成一个测试架构师。在这里,测试架构师不是一个头衔(title),而是一个角色(role)。例如,如果你在很多测试工具 / 框架上都做出了突出的贡献,你可能有一个测试架构师的头衔,你也可能不是一个测试架构师。同样,一些软件测试员在他们的公司中扮演测试架构师的角色,但他们没有一个测试架构师的头衔。
测试架构师的角色意味着什么呢?在这里,我列出了测试架构师应该着眼的几个重要领域:
- 定义一个功能的整体测试策略,比如,如何测试一个浏览器,如何测试一个云数据库等;
- 某个测试领域的专家,如安全性测试,性能测试,云测试;
- 在团队中引入或发明新的测试方法,如探索性测试,众包测试(crowd sourcing testing);
- 根据具体情况指导和培养团队;
- 思考测试的未来和测试员的职业发展的未来,并为未来做好准备;
- 参与测试相关的活动,如测试访谈,会议,博客;
怎样才能成为一个测试架构师呢?首先,它不是一个简单的事情,你需要先成为一个专业的软件测试员。作为专业的软件测试员,你会在你的日常工作,提高上述的能力,再成长为一个测试架构师。另外,许多架构师都在不同的公司、团队中接触过了不同的项目,所以都是非常有经验。参与到不同类型的项目之中,你总是能得到一些新的想法。最后,你必须有一种能力,即在任何项目中能迅速地适应变化(adopting change),并做出贡献。这个技能对测试架构师来说非常重要。
今天有一些测试架构师为其他公司提供咨询服务。他们通常有广泛的知识,敏捷开发,项目管理,沟通技巧和风险管理,并帮助拯救许多几乎失败的项目(help to survive many nearly failed projects)。他们是最好的专业软件测试员,并在相关领域中获得了尊重。
1.3 成为一个领域专家
今天,我想说我们软件测试员的职业生涯中最重要的一条路,就是成为一个领域的专家。我们必须认识到,我们当中许多人最终是不会成为测试工具的开发人员或测试架构师。他们将成为专业的QA,一个领域专家或只是转行到一个新的岗位。就个人而言,我更喜欢你考虑在领域专家这个方向努力。
领域专家是谁?
让我来回答这个问题。假设你测试特定的软件测试五年,那你有资格成为一个领域专家吗?答案是不一定,取决于领域专家的定义。
举例来说,我已经测试了SQL Server六年。我很熟悉数据类型,排序规则(collation),并能编写基本的SQL查询语句。“领域专家”在这种情况下,应该能够设计数据库应用程序或者管理数据库。为什么我这么来定义领域专家,因为它是搞数据库的人在其他公司找工作时一个基本要求(一个数据库开发人员或一个DBA)。我能胜任领域专家吗?我并不这么认为,因为我只知道SQL Server的一小部分。而我对这些都没有经验,比如,设计一个数据库架构(database schema),开发一个使用的数据库的应用程序或者管理大量的SQL Server实例。所以我很难找到一个数据库开发人员的工作或一个DBA的工作。
正如你可以从上面的例子中看到,“领域专家”是的的确确取决于上下文。如果你在Windows团队中工作,“领域专家”就应该知道安装 / 配置 / 管理Windows或者能够编写基于Windows的软件。如果你在Visual Studio团队中,“领域专家”就应该知道如何使用Visual Studio和.NET编程。如果你在Windows Azure和SQL Azure中,你就应该知道如何通过使用所有可用Windows Azure的技术来构建一个可伸缩的应用程序。从这个意义上说,领域专家,需要你有一个全面理解,而不只是在某一小块里非常深入而已。他同时还关注于最终用户是如何得使用我们正在测试的软件或服务。
我们为何要成为一个领域专家?
有一天,你可能会考虑离开目前的职位,你可能选择加入另一个团队或另一个公司。你可能会问自己的一个问题是,从我过去作为一个软件测试员的经验中,学到些什么样的技能,或者我能胜任什么样的职位。不幸的是,今天我们很多的软件测试员只对他们的所负责部分有着深刻的理解,但他们缺乏测试产品应有全面的视野。其中一个原因是,今天我们的测试员过于注重功能性测试,我相信这是我们不太注重用户的使用场景或者我们的最终用户是怎么在使用我们产品。这也是我即使测试了SQL Server六年,我依然没有资格担任一个数据库开发人员或一个DBA的主要原因。
你可能会问,为什么我们应该考虑成为一个领域专家,或另一种问法,为什么不就永远待在测试角色上。原因是,它会为你的未来打开一个非常宽广的门,让你有一个更好的职业。领域专家的需求将远高于专业的QA,另外补偿金(compensation)也将更高,尤其是当你成为一个解决方案提供者时。
对微软的软件测试员,更是如此。我们公司有大量的优秀产品,有非常多的客户。对熟悉微软产品,并知道如何打造端到端解决方案的领域专家或专业人士都有着很高的需求。你越了解微软产品,你的职业发展越好。
给软件测试员的建议
现在,我想给我们的软件测试员提供一些建议。首先,问问自己,你三年后想成为什么样子的人,要成为一个领域专家,或者想成为一个专业软件测试员。这个问题,我建议你尽早地思考和作出决定。
然后,如果你想成为一个领域专家,你需要有一个成长计划。这里有一些可以帮助到你的步骤:
1)选择一个你想专注的领域。我们在微软实在是太幸运了,我们有这么多伟大的产品,因此我们有许多领域可以专注。近年来,IT技术的变化日新月异,我们应该谨慎选择那些IT趋势的领域。在这里,我想有几个你可能有兴趣知道的领域:
- NoSQL和BigData是数据库管理领域的热点。市场对熟悉NoSQL(例如Hadoop,MongoDB等)的人有着巨大需求。
- Windows Azure是微软的云计算平台。完全理解的这个系统和知道怎么构建可扩展的系统,将是你的职业发展中的一大优势。
- Windows Phone和Windows 8是我们下一代的操作系统。能为这些平台构建应用程序,能让你轻松地找到一个开发人员工作。
- 企业客户希望整合社交网络,office,移动和必应(Bing)搜索以提供更大的生产力。熟悉Office 365,微软其他的产品能够可以让你成为一个解决方案的提供者。
2)在你的工作中培养你的技能。一旦你有对你想熟悉什么样的领域有一个想法后,你需要培养的相应技能。如果你目前的工作领域不是你的兴趣所在,考虑转到其他团队。此外,做一些副项目(side project),参与车库项目(Garage projects)中做些基层创新始终是一个不错的方式来提高你的技能。作为一个微软的员工,你有着很多优秀的资源可以利用,我强烈建议你发掘,总结你的知识。我强烈建议你设定了一个目标,并持续不断地提高你的技能。这是你的事业,你应该认真地投入时间来对待。请看我的其他博文,你可以从中找到另一些提高自己的建议。
给主管和经理(Lead and Manager)的建议
亲爱的主管和经理,我希望你能认识到并非你所有的员工,在最后都能成为一个专业的软件测试员。我们应该帮助我们的成员,增长他们的领域知识,并给他们一个更好的职业。有一天,当你的员工决定转行或离开公司时,他们会感谢你提供的机会,以帮助他们学到自己的知识,并感谢微软提供了一个让他们能成长的平台。
有时,建立一个健康、快乐的团队,比完成的任务更为重要。微软拥有的优秀员工正是我们宝贵的财富。作为主管和经理,我们应致力于让我们的员工感到开心,并有一个更好的职业发展。鼓励人们学习新东西,让员工能在某些领域里投入自己的时间,始终是一个培养员工的不错的方式。你也将认识到,如果这样做,你的员工也会引入一些新东西到他们的日常工作中。拥有领域知识和了解顾客如何使用产品,一直对测试都有很大益处,这将是软件测试的趋势。
1.4 成为一个工具开发人员
今天,许多我们的软件测试员编写了测试类库和测试框架,协助测试自动化和测试运行自动化。在整个公司里我们有很多的测试框架,测试运行系统。编写测试工具是一项重要的技能,它可以帮助我们的软件测试员增加他们的编码能力。如今,很多软件测试员开发测试框架和测试类库。他们和其他开发人员一样写一些代码。测试工具开发人员和软件测试员之间的一个很大区别是,编码技能是开发人员最重要的技能,而对软件测试员来说最重要是测试技能。
我们的工具开发人员面临的一个挑战是,你应该与使用你所创建的类库的其他人紧密合作,并确保你的确提高了工作效率。请记住,编写工具不是你的目标,让其他人更敏捷才是你的目标。
我能给想要成为工具开发人员的软件测试员一个建议是,你可以大体上看看,编写一个测试工具跟编写的其他软件是一样的,所以如果你有良好的编码能力,你可以在很多团队中有着潜力无穷的成长,所以不要限制自己去寻找一个软件测试员工作或只编写测试类的工具。
另一种观点认为,测试工具开发人员和编译器开发人员,UI开发人员或数据库开发人员一样,他们只是在不同的领域具有专业知识的开发人员。这是我之所以把本节的标题写成“成为工具开发人员”,而不是“成为测试工具开发人员”。
它带来了另一个有趣的观点,就是我们的测试员(SDET)角色实际是专业软件测试员和测试工具的开发人员的混合体。我们希望大家通过编码(开发的角色)来做更多的测试自动化(测试的角色)。但是,在某些情况下,我们发现在这两个领域,我们都不太擅长。它可能潜在地限制我们的软件测试员长期的职业规划。
1、学习思路和方法
这个大纲涵盖了目前市面上企业百分之99的技术,这个大纲很详细的写了你该学习什么内容,企业会用到什么内容。总共十个专题足够你学习
2、想学习却无从下手,该如何学习?
这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。
3、软件测试/自动化测试【全家桶装】学习中的工具、安装包、插件....
4、有了安装包和学习资料,没有项目实战怎么办,我这里都已经准备好了往下看
最后送上一句话:
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦!