背景资料:李敏,2005年开始在微软实习,半年后研究生毕业成为正式员工,先后经历了 System Center Configuration Manager 2007以及SP1、R2的发布,测试的领域涉及UI测试、AMT feature和安全测试等。
这篇博客,是她想分享给大家的一些体会和故事,一来给不熟悉测试工作的读者描绘一下在微软当软件测试开发工程师是怎么回事情,二来揭秘一下微软的职业发展体制。
2005年的秋天,李敏还在上海交通大学念研究生,还有半年就要毕业了。一天,同学发了个链接给她,是微软在上海招聘实习生的消息,职位的名称叫做软件测试开发工程师(Software Development Engineer in Test,简称SDET),这个职位对学生来说还是个新鲜玩意儿,没几个人清楚具体情况,在好奇心的驱动和微软的吸引力之下,她投出了简历。接着她经历了传说中的微软五轮面试,走出美罗大厦的时候已是下午一点,时至今日她对这个时刻的印象只有两个:饥肠辘辘,大脑高速运转。经过一周的焦急等待之后,她同时收到了SDET实习生和正式员工的offer,所在的组是System Management Server(也就是System Center Configuration Manager 2007的上一个版本)。
就这样,李敏开始了在微软当软件测试开发工程师的旅程。
几个月过去了,当同学好奇地问起在微软工作的感受和SDET的情况时,她说了自己的微软测试初体验:
测试初体验一、软件测试开发工程师,很奢侈很酷
问起对软件测试开发工程师的***印象是什么,她的回答是:挺奢侈挺酷的。
说到奢侈,先看看一个软件测试开发工程师的典型测试财产清单 一到两台配置先进的工作机;两个21寸的液晶显示器,一个屏幕用来显示产品的界面,另一个屏幕用来发bug或者编程序;再加上实验室里面十几台测试机器或是一个16G内存的巨无霸。如果你需要测试Windows Mobile,那恭喜你了,各式各样的smart phone、pocket PC可以装满一抽屉。经过一段时间的了解后,她也知道了这样奢侈的配置一方面可以提高工作效率,更重要的是让测试工程师能够考虑到各种复杂的配置以及模拟客户环境。
说到酷,印象中,软件测试开发工程师总是有机会走在尝试各种微软新技术、新产品的前端,也总是有机会通过动手能力来展示自己的酷。比如工程师会把十几台测试机器装成各种各样不同的Bench, 操作系统从Windows 2000、XP到***的Vista、Longhorn甚至Windows 7,从x86到x64,从英文到德文、中文、日文等;微软***的产品或者尚未发布的产品都可以拿来研究一把,比如Longhorn、Windows 7、Hyper-V等;虽然不一定考过MCSE,但是每个人都会配置DNS、DHCP、AD、network等。
测试初体验二、测试有时候就像是玩游戏,找问题的能力很重要
测试就像是玩游戏?也许你会觉得不可思议。李敏拿了道面试题来打比方,给你一台笔记本电脑,你会怎么去测试它?这是一道典型的开放式问题,即使是没有测试知识的人也可以想出很多的测试用例。比如检查笔记本的型号、颜色、硬件配置、屏幕、电池、操作系统等,相信这是很多人拿到新买的笔记本之后做的***件事情,这些多半都属于常规的正向功能测试;还有些人指出,外观要小巧方便携带,键盘手感如何布局如何,功能键是不是方便易用,这些人对可用性要求比较高;还有些会想到用它来玩3D游戏看看显卡的性能怎么样;有些人想到装上Vista、64位的操作系统,这就是兼容性方面的考虑;还有人思维不走寻常路,提出要把笔记本放在赤道的日照、南极的冰雪环境下试试能不能正常工作,当砧板切切菜,扔下楼看看碎不碎,这就是关于可靠性和压力方面的测试,有趣的答案还可以有许多许多,只要你去想
在李敏的描述中,软件测试开发工程师真实的日常工作跟答这道题一样的好玩,只不过笔记本电脑换成了软件程序。软件测试开发工程师拿到笔记本电脑之后,会像上面说到的一样开动脑筋仔细检查,检查之前需要列出想测试的各个方面、策略、工具、风险以及怎么开展等,这称为测试计划(test plan);每项具体的测试叫做测试用例(test case),每个test case需要列出具体操作步骤(steps);找出来软件的缺陷、问题等称为bug,bug中需要记录怎样去重现它,称为重现步骤(repro steps);找bug的过程中你可以试图找出根本原因在哪里、甚至哪一行代码有问题,这就是debugging。优秀的软件测试开发工程师在这个玩游戏的过程中需要具备足够的好奇心,想出各种各样的主意把软件搞坏,尽可能地找出bug,还要多从客户的角度去想,其***目标就是为发布到客户手中的软件把好质量关。其中,找bug是软件测试开发工程师应该具备的基本功。
不久她就找到机会测试了一把自己的SDET指数,正好高性能计算组举办找bug比赛,优胜者可以获得一些小礼品,她拿到了一个印有Microsoft标志的水杯。
这时候,她的一个高中同学在MSN上面发了条消息:你当了测试工程师,就不用编程了吧?。看来需要澄清一下了:
测试初体验三、谁说软件测试开发工程师不用写代码了?
微软早年也设有只做手工测试而不写代码的职位,称为STE(Software Testing Engineer)。现在所有的测试工程师的职位都叫做SDET(Software Development Engineer in Test),从名字可以看出来,需要具备编程能力,这些编程工作是为了更好地做测试。
举个例子,李敏负责的某个UI模块有1000多个测试用例,手工执行一遍想想都很累。为了偷懒,她写了些代码将其中80%的测试用例实现测试自动化,这样下班前只要让机器开始跑自动化,第二天就可以拿到结果,从而大大减少了验证这些测试用例所需要花的人工时间,又可以及时地捕捉到bug。此外,软件测试开发工程师经常会做一些实用的测试工具和研究测试技术,比如开发UI测试方面的工具,开发测试流程管理工具,和更好地运用基于模型的测试方法等。在坚持创新的公司文化引导下,大家都非常注重运用新技术新方法,不断地把测试工作推进到新的高度。
转眼间,一年过去了,李敏从上海的服务器与开发工具事业部老大谢恩伟的手中接过了一周年的水晶纪念碑,按照惯例还请大家吃了一磅的 MM巧克力。2007年秋天,她所在的团队发布了System Center Configuration Manager 2007。在这段时间里,她亲身体验了微软给员工提供的多种多样的成长帮助:
职业发展体验一、员工成长路上的多种帮助
从加入公司的***天起,部门就分配了一个资深员工给李敏做Mentor,Mentor的意思是良师益友,也就是师傅。Mentor会手把手地教日常工作中碰到的各种问题,很多小问题都可以请教Mentor,比如打印机怎么用、测试用例怎么设计、甚至是开会的时候有个缩写名词没听懂等。***个 Mentor的作用就是师傅领进门。
公司还提供了系统的专业知识培训。半年内,她先后参加了New SDET in Microsoft、Test Automation等培训,这些都是测试工作的基础知识。说起修行在自身,公司MyLearning网站上有不少测试专题,比如性能测试、代码覆盖率研究和安全测试等;这个网站有无数的在线课程录像,在这里可以学习其他员工的知识和经验,帮助自己更好地做测试工作;近期即将进行的技术讲座、培训、会议等也会在这里公布,热门专题一定要早点去注册占座,否则就没位子了。另外,她还发现了一个非常棒的资源MSLibrary,那里有无比丰富的技术书籍、新闻杂志和研究论文等。公司还投资了一系列的综合能力培训,为员工提供从各方面提升软技能的平台:有些培训是语言方面的,比如觉得英文不够好的可以去上课,老外来到中国也可以学中文;还有一些是教你怎么说话的,比如告诉你怎么精准提问、精准回答,怎样做演讲,怎样去沟通得到大家都想要的结果; 还有一些教你怎么思考,比如创新思考,不同情况下的思考方式等。这些培训很实用,一般学完了就可以运用到实际工作和生活中。
再后来,李敏对安全测试的兴趣日渐浓厚,她根据自己的发展需求和兴趣找了美国这方面的大牛来做Mentor,渐渐地在System Center Configuration Manager 2007 SP1中挑起了做安全测试的担子。她还在上海的服务器与开发工具事业部中组建了一个跨产品组的虚拟团队,一方面带领团队成员学习安全知识和安全开发流程,另一方面积极向各个产品组推广实施安全开发流程的***实践经验。虚拟团队的成员来自各个不同的产品组,能花在安全方面的时间都是工作之余,要带领这个团队凝聚力量朝一个目标努力是并不容易的事情。最初组建团队的时候,她会用自己对安全方面的热情感染其他有兴趣的人,接着用事例让大家认识到安全对于微软产品真的很重要,而且安全方面的知识对于长期的职业发展也很有帮助,就这样招募到了团队的最初几个核心成员。接下来就是确定这个组的远景、使命和活动计划,她先提出了一个草案然后组织大家一起讨论,经过一番激烈辩论、修正大家达成了共识。其实,***的困难还是来自于按照计划一步一步地开展活动,在团队成员兴趣减退的时候,需要振作士气让大家重新记起最初的梦想在一些成员特别忙的时候,需要灵活修改计划,让他们能两头兼顾;另外还要考虑怎样能够更好地把安全意识和***实践经验传递给所有员工,比如会选择技术讲座、安全知识简报和展示等多种宣传方式。在这个过程中,李敏学到了很多东西,尤其是 influence without authority的领导方式,通过影响来带动别人,而不是通过上下级的权威去要求别人。
此时,她对微软的职业发展也有了更加深刻的认识:
职业发展体验二、微软的职业发展道路为不断挑战自己的人而设计
关于员工的职业发展,年中的时候会专门有一个关于职业发展的讨论(Mid-Year Career Discussion,在公司内部内部简称MYCD)。经理会和员工一对一坐在一起,评估员工现在所处的发展阶段、能力水平等,讨论员工的未来三到五年的职业发展规划,然后进一步制定实施计划。微软给员工的职业发展道路也比较灵活,总体上有个人贡献者(Individual Contributor,简称IC)和管理(Management)两条职业发展轨迹。
软件测试开发工程师属于IC,也是李敏最初选择的轨迹。在微软,资深工程师很受尊敬也很有影响力。公司为工程师设计了具有挑战性的职业发展道路,所以,在这儿碰到一个为微软服务了十几年的工程师是稀松平常的事情。对于软件测试开发工程师来说,可以一路从Test(初级)做到Test II(中级),Senior Test(高级),甚至Principal Test(***),随之而来的挑战是测试工作的范围、影响力不断扩大。比如一位Senior Test的挑战可能是对整个产品的测试工作做出很大的贡献,而一位Principal Test面临的挑战则是在整个Microsoft倡导新的测试技术,这都需要多年的积累,也很有挑战性。还有一个职位叫做Test Architect,这个职位负责测试Architect设计出来的architecture,光听听就知道很酷了。
员工会选择一条职业发展轨迹前进,但也可以根据兴趣和能力进行调整。从2007年开始,李敏的小组需要将部分测试工作外包出去,李敏在经理的指导下开始参与组建和发展外包软件测试组的工作,这让她发掘了自己在管理方面的兴趣和潜力。组建外包测试组的***步是招人,先确定职位所需要的能力,然后筛选简历,开始面试,多方面考察候选人,最终做出决定。然后是培训工作所需要的知识,老组员带新组员,要求新组员在一周之内学会并可以上手工作。接着是制订一些规范流程,让组员知道怎样去高效地独立工作,也让整个过程更便于管理。比如,为了保证自动化的代码质量,李敏搭建了一个回归测试平台和一个网站,所有的自动化必须在这个平台上通过3次,才能去网站上把它们标记为自动化完成。此时这个组能够较好地运作起来了,李敏会和组员定期会进行一对一的谈话,了解他们的状态和遇到的问题等,综合分析之后会想一些办法去优化流程和提高团队的效率。经过观察,她还确定了一些技术能力和综合能力不错的组员,适当授权给他们去担当更多的责任,发挥他们的聪明才智,也减少自己的管理成本。整个过程下来,她发现管理很有意思也很挑战,自己有兴趣也有潜力去做,于是她在一个 MYCD里调整了职业发展轨迹。经理了解之后也给与了相应的支持和辅导,比如会建议如何去打磨管理方面的技巧,也会抛出问题让她自己去思考该怎么解决、怎样做得更好。
选择不同的职业发展轨迹是一种挑战,而换个产品甚至迈进一个完全陌生的领域是另一种挑战。她身边就有一些同事选择加入其他的产品组。在这一点上,微软多元化的产品结构给员工提供了特别好的机会,从Windows到SQL Server、Visual Studio,从Office到XBox、MSN等,跨度很大,就像是一个IT业界。员工总能找到挑战自己的机会,做熟了这个产品还可以做另外一个产品。在微软,经常可以看到工作了多年依旧保持着高度激情的员工,这恐怕是和公司提供的多元化的职业发展道路是分不开的。
时间如白驹过隙,2009年已经到来,她所在的组正在做下一个版本的Configuration Manager,她也在带领一个小组负责产品的UI测试工作。
回顾这三年半的历程,激动人心的挑战、解决问题的成就感以及团队合作的乐趣始终伴随左右。而抬头向前看时,还有太多未知的探索之旅等待着。
希望大家能喜欢这些心得与经验的分享。
【编辑推荐】