微软当软件开发测试工程师的故事

  背景资料:李敏,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测试方面的工具,开发测试流程管理工具,和更好地运用基于模型的测试方法等。在坚持创新的公司文化引导下,大家都非常注重运用新技术新方法,不断地把测试工作推进到新的高度。

  转眼间,一年过去了,李敏从上海的服务器与开发工具事业部老大谢恩伟的手中接过了一周年的水晶纪念碑,按照惯例还请大家吃了一磅的M&M巧克力。2007年秋天,她所在的团队发布了System Center Configuration Manager 2007。在这段时间里,她亲身体验了微软给员工提供的多种多样的成长帮助: