新宇从成为微软亚洲工程院Exchange 组第一位测试开发工程师到现在任职测试主管,看似偶然,却是有备之人的必然结果。那是03年研二的时候,他在微软亚洲研究院做实习生,帮研究员将图像人脸检测算法移植到DSP芯片上。在这期间,为了帮助提高算法的性能,他写了一些测试工具帮助测试人员在图片上标注人脸,通过和算法计算的人脸位置作比较来测试算法的准确率和误报率。“有时候为了让工具更好用点,我甚至加班一晚上设计更简单明了的按钮。”
辛勤的努力总有回报,新宇开发的这个工具很大地提高了工作效率,他在实习期间的表现也得到了的好评。尤其是当时他所在组的工程总监,对他和他设计的工具印象很深刻,并在一次去美国时,将他设计的工具带到总部演示并推荐使用。
“机会总是光顾有准备的人”。研究生毕业那年,那位总监把他叫进办公室,跟他说微软有一种职位叫做测试开发工程师,问他是否感兴趣。新宇问这个职位是做什么的,结果还没等人家解释完,他就答应了。“用程序的方式来自动分析和找出软件的缺陷是一个很复杂的难题,用程序帮助人们解决难题是我喜欢的挑战。”
三年时间过去了,新宇所在的组主要负责Exchange Server 2007核心模块的测试工作,主导自动化测试平台开发。现任测试主管一职。目前带领团队致力于客户端/服务器(Client/Server)模式的网页图形化界面(Web GUI)及后台服务器的测试和自动化测试平台开发。
最近他完成的测试自动化项目是Exchange server 2007的Exchange 管理控制台(Management Console)的图形界面自动化测试(GUI automation),目标程序是基于可托管代码(managed code)的WinForm UI。在这个项目中,他们开发了一套XML数据驱动测试框架,实现了测试用例只需用一些XML数据就可以驱动图形界面测试。
Exchange server 2007的管理控制台的XML数据驱动测试框架,也是新宇最满意的项目之一。该测试框架一是提供了一个数据驱动测试GUI的稳定实现,二是提供了测试用例write once, test every component的机制, 在测试框架中写一个通用测试逻辑,就可以让测试框架自动将该测试逻辑加载到所有的GUI模块的各个测试用例中去。该测试框架也因此在2006年获得微软内部年一年一度的工程创新大奖。
三年后的一大步
新宇对软件测试工程师的工作内容是这样理解的:寻找软件中的质量缺陷,确保用户功能完备,确保软件开发过程的正确执行,而在做所有前面这些工作的时候尽可能的设计“程序”去代替人去完成。
在他看来,如果没有曾经发布过一个正式产品,软件测试人员也许很难意识到那种责任感。这种感觉和意识是经过日积月累的工作和学习,在一个契机、某个时间突然感觉到的升华。
新宇把那一天记得很清楚——2006年12月8日,微软发布了Exchange Server 2007 。那一天,他真正的感受了所做的工作对保证产品的高质量的贡献。“如果我们的产品因为高质量的稳定性获得用户市场的胜利,我会感到无比自豪。”责任感促使他们去理解所测试的产品在业界的前瞻和趋势。比如所测的是Exchange server,他们就会去理解邮件服务器市场前瞻和趋势,理解用户的功能需求。而理解了用户和产品的发展方向,可以帮助更好地保证质量,确保用户想要的功能最终实现。
“这让我对软件测试自动化的理解从以技术为中心转变为了以用户为中心。无论是多么酷的自动化测试框架,最终都是要高效率地完成对用户使用软件的模拟,来确保当用户使用软件功能的时候不会遇到质量缺陷。”
从3年前进入微软亚洲工程院Exchange项目组成为第一位测试开发工程师到成为项目中的一个测试主管。新宇已经从一个初出茅庐的毕业生成为了有经验的测试自动化从业者,他的职业生涯也往前迈开了一大步。
影响他的人和书
在新宇软件开发的成长中,很多人对他产生过重要影响。大学时候他遇到过一个实验室的老师,两人一同编写一个网络多人游戏程序(MUD),新宇跟着老师第一次学习和使用了面向对象的理念和设计;在微软亚洲研究院实习时候的导师新立,帮助他树立起自己钻研问题、解决问题的工作习惯;在软件测试方面,影响新宇最大的除了带他入微软门的那位工程总监,就是他入职后的经理 Tim 了——“他似乎永远都能指出我的瑕疵和不足. 他做测试经理的时候对测试开发工程师的编程能力要求和开发工程师要求几乎无异。”
“软件生涯里对我产生过重大作用的书, 应该要算是本科时候看的《麦田里的守望者》。”那时候新宇因为编写MUD游戏,荒废了不少功课,回到本专业课时,反倒觉得无所适从。那段时间“觉得人很颓废”。“后来看了《麦田里的守望者》,觉得主人公就和我一样,虽然没有找到什么目标而颓废,但是很有热情,内心很上进。于是心理就安慰了,觉得只要自己喜欢,将来一定会有事情可做。”结果汽车工程没有学好,软件还是到底让新宇学出来了。
技术方面的信息主要来自是“MSDN”,实习生的那一年,新宇几乎每天就是看MSDN。“哦,对了,还有程序员杂志。我喜欢看程序员杂志,从最早主要集中讨论C++和Java,到现在的文章泛及业界各种技术和话题。程序员杂志始终是我了解别人在干什么的一个窗口。”
软件测试之架构设计
除了软件测试,新宇还有另外一个技术兴趣——架构设计。“我觉得架构设计就是如何把一个复杂的问题解耦成复杂程度小一级的问题来继续分析,架构设计也是一个不同层次的工作,每一层次的架构设计师应该能够把他负责的那一个层次的设计分成更小的模块来继续分析。这是通过计算机程序来解决现实世界问题的一个基本方法学。”
所以在新宇看来,架构设计对任何工作都有帮助,当然更包括他的本行——软件测试。他举例说,比如要测试Exchange server的管理控制台,作为一名测试框架的总架构师,首先要明白哪些是需要测试的,这其中哪些又是可以用程序来自动化测试的;然后把问题分解成哪几类自动化测试可以做,比如安全性测试、性能测试、GUI表现层测试、功能API测试等等。
接下来,从总体上看,测试框架应该怎样驱动各种测试,各种测试的测试结果又如何通过统一的接口生成测试报告;完成最上层的各个测试方面公用的模块的设计后,然后你就可以把每一个子测试方面的架构设计放到下一个层面继续分析, 就是子测试方面的架构设计师的工作了。“我认为架构设计就是这么一个抽丝剥茧的一层层分析复杂问题的工作。”
[后记] 在微软这几年的测试工作,新宇觉得最大的收获是遇到很多志同道合的加入测试团队的好朋友, 和他们在一起工作,不但技术上受益匪浅,生活中也平添不少乐趣。比如和恒.他们曾经在一起做过一个自动化测试项目. 那时经常在一起讨论自动化测试技术,开发测试框架.虽然之后分别在各自不同的领域研究自动化测试,但是很希望将来还有机会和一起再合作 。