六, 俺也说说”找虫子”
哈哈,所谓找虫子,就是找bug, 实际上俺想说的是Software QA/Testing. 坛子里时不时有人提到Software QA (Quality Assurance), 电话会议时也有人问到过. 俺无用绝非QA专家(虽然这是俺的一奋斗目标), 以前本来是一R&D Engineer, 后来一偶然的机会加入一Internet公司的QA部门做过一段时间(时间不长,还不到2年), 最近找工作又碰到一些QA有关的工作机会, 所以想谈谈我对软件QA的一些认识和体会,和大家交流一下. 至于其他行业和领域的QA俺不甚了解, 所以这里仅限于一般意义上的软件QA. 其实即便如此,不同的人有不同的工作经历和看法, 所以俺说的只是一家之言而已,也希望和坛子里的农活能手找虫子专家交流. 只是,很多话说起来会有些Technical, 还请不同行的兄弟姐妹们见谅.
说起软件QA人们一般会想到软件测试(Testing). 其实严格说来两者有点细小差别,不过咱们在这也不是技术/学术讨论, 姑且混为一谈也没啥大碍. 很多朋友对QA工作不是很了解,有人以为QA/Testing就是设计几个test cases,跑上几个测试小程序,看看是Pass还是Fail,就完了.在有的公司里面甚至连test cases都是Developer提供, QA Engineer只是Run一遍就完事. 其实这种做法很不正规, QA工作本身的质量也不高, 以至于一些人误认为QA工作超级轻松, 技术含量低, 如此而已. 但是我所知道的正规大软件公司(如Microsoft, Google, Yahoo)的QA不是这样的. 我以前工作的公司中, QA部门也很受重视, 一些大项目的负责人都把QA当作重中之重. 我们QA部门主要由纯粹的QA Engineer和做开发的Tools Developer组成. QA Engineer基本上不编程序(或者编很少量的程序), 但是公司要求他们的QA Sense 很高, 他们要对各种软件测试方法很熟悉, 能设计出合理而有效的test cases,并能对测试结果进行深入的分析和推理,并对结论负责. 同时QA Engineer 作为很多项目中的QA representative要定期参与项目开发过程中的各种例会和讨论等, 并与development team, operations team, production manager等各方密切合作, 所以communication skills也很重要.
我们QA部门的另一类成员是QA Tools Developer(我曾是其中之一). Tools Developer的任务是与QA Engineer 密切合作, 充分理解他们的test cases, 然后开发出工具,将尽可能多的test cases 自动化(Automation), 并对这些工具的使用者(即QA Engineer, 偶尔也有Production Development Team的Developer)提供Technical Support. 这些自动化的工具可能不是一个个孤立的小测试程序, 而是集成在一个大的测试平台(我们称之为testing harness或framework). 建立这样一个平台的过程实际上也是一个完整的软件开发过程, 所以对软件开发的要求比较高. 同时也要求对被测试的软件产品理解到模块(module)和编程接口(API)一级(有时甚至到程序statement一级,因为发现有问题的时候我们总是千方百计确认是我们工具的问题还是被测代码的问题).所以我们对被测产品的了解比专职的QA稍微深一点,但是对于软件测试方法和test case的设计却相对没那么熟.其实很多时候界限也不是那么明确,QA Engineer人手不够时我们做工具开发的就"越俎代庖"一把也是常有的事.
现在很多公司有SDET(Software Development Engineer in Test).堪称以上两种roles的"完美结合":要了解被测产品到相当的深度,做测试需求分析,设计test plan和test cases,设计并实现自动化,建立起testing harness/framework,收集测试结果并分析汇报,sign off产品的release,并于各方密切合作与协调等,所以整个cycle下来并不是那么轻松.要是有现成的harness/framework可以用的话会好些.当然也不是每个公司的情况都是这样.尤其是中小型公司,其QA的工作范围可能只是可能只是我上面提到的一部分.因此说起工作强度,不同的公司之间差别可能会很大.通常快要到release的时候会很忙,平时相对好些,同时也要看产品release的频繁程度,这些大家在找工作的时候可以打听清楚.
我个人感觉目前工作市场上的QA工作还是不算少的,尤其是一些大一点的公司一直在招人.我本人同时找software engineer 和QA/SDET的工作, 在我碰到的职位中(猎头和HR给我介绍的)大约六成是QA相关的工作(当然可能是因为我的上一个工作是在QA部门).有的大公司有能力开发自己的QA/Test工具,所以他们会比较重视开发harness/framework并有直接做automation的经验.中小公司很多都用一些现成的测试工具(如Selenium, LoadRunner, Jmeter等),所以他们可能会问你有没有使用那些工具的经验.当然如果你两种都有那机会就更大了.类似的,做QA有人可能是以功能测试(functional testing)为主,有人可能是以性能测试(performance testing)为主.如果你有任何一种的丰富经验,应该都有不少机会.如果两者兼备,那更是难得的人选.
有人担心QA的工作容易被外包,这种担心不无道理.我的前公司去年就有一个非核心产品的QA整个转到印度(后来证明那个印度QA队伍比较菜鸟,有时候胡来,给我们制造了不少麻烦,那是题外话),原QA队伍解散,要么离开公司要么转到其它项目组.和coding一样,testing被外包是可能的,但是我个人感觉在美国本土只要还有software development就应该会有QA/testing,因为在比较正规的软件产品开发中,QA的理念不仅存在于后期的testing阶段,还存在于实现(implementation)甚至更早阶段(如Scrum中的test driven思想). 也就是说整个开发过程中tester和coder之间需要密切磨合的地方有增多的趋势,这种密切关系在远程情况下是很困难的。
通常对entry level的QA要求相对稍低,而且从developer转到QA比从QA转到developer相对容易一点。感觉entry level的QA比同级别的developer薪水稍低些,到了senior level的QA薪水和同级别的developer大体持平吧。还有就是一些大公司的QA经验会比较marketable一点,这对于找工作的朋友来说是块敲门砖。目前市场上很senior的QA或QA Manager的职位比较少,但是这样的机会在一些大公司如Microsoft,Google经常会有(当然可能title会有所不同)。
很多人觉得QA/testing很枯燥,我以前也有过类似想法。其实QA工作有它自己的魅力,对于那些喜欢“break something instead of make something”的人,还有就是对有些完美主义者(perfectionist) 来说也许是个不错的职业选择,呵呵。大家不要误会啊, 其实QA工作一般人都有做好的潜力,只是多一些严谨的作风和发现问题的能力会更好. QA工作中并不都是routine work,有很多challenging的地方,而且communication skills是重要一部分。如果在一个重视QA的公司,你能用自己的聪明才智想出一些方法来找到那些“自以为是”(呵呵,俺是说,通常developer把代码交给QA测试时都assume代码应该没问题。谁会把明知有问题的代码交给人测试呢?)的developer们的代码缺陷的话,你同样能有不小的成就感并赢得他人的尊重。:)
在飞机上写下这些文字时,刚好看到一机组人员(一白人小伙)在示范救生衣使用方法。本来看上去挺枯燥的示范,这小伙做得却与众不同,不仅面带笑容,而且还加以夸张的表情和动作,将看似枯燥的示范表演的妙趣横生而又不失正确性,最后竟赢得乘客们的一阵掌声,飞机在笑声和掌声中起飞。俺也不是很少坐飞机的人,却是头一回碰上这样的机组服务人员示范。我突然想到我们很多人都有抱怨过工作枯燥无味的时候,从这个小故事中是否能得到一点点启示呢?
(本文在"职场生涯”论坛中的链接:http://web.wenxuecity.com/BBSView.php?SubID=career&MsgID=264561)