从微软的今天看软件测试的明天
来源:网络转载
陈天的办公室并不小,但却因堆满了机器而显得狭仄不堪。他解释说,因为微软亚洲工程院(ATC)部门准备扩充,而“新的几个实验室还在装修中”,所以就形成了现在的这个局面——几十台Dell主机和一箱箱显示器堆放在眼前的办公空间里。当听说微软亚洲工程院的测试工程师人均拥有四五台计算机、且正在搭建的测试实验室将拥有上千台机器时,我跟陈天开玩笑说,看来你是微软亚洲工程院最大固定资产的拥有者,陈天微笑着对这一判断表示认同。
“人机比例”如此悬殊,并不是说微软亚洲工程院的测试工程师都是多臂超人——事实上,这是由微软独特的测试文化所决定的。陈天表示,“微软的软件测试80%-90%都是自动化的。所谓自动化,就是由测试工程师写出测试程序来运行测试案例,而并非人们所想象的人工点、点、点的那种测试方式。”
在拜访微软亚洲工程院之前,提到微软的测试,我会想到比尔盖茨说的一句话:“很多人都认为微软是一家软件开发公司,而事实上,我们是一家软件测试公司”。这种说法也让我们对微软亚洲工程院的测试团队充满了好奇。
微软亚洲工程院创立之初,仅有两位从微软亚洲研究院转过来的测试人员,而且这两个人还不属于任何一个组,只是在项目组有测试需求的时候临时帮一下忙。对于一支完整的产品开发体系,软件测试团队是极其重要的组成部分。因此,院长张宏江对此高度重视——于是,从微软总部找来了在微软从事测试五年的陈天和周庆晖担当起了搭建微软亚洲工程院软件测试团队的重任。
招募到合适的测试人员是工作的第一步,由于国内对软件测试工作的重视不够,有经验的人员因而少得可怜,培养刚毕业的学生便成为了优先的选择,不过,“我们的学生由于勤奋好学成长得很快”。到现在,微软亚洲工程院已拥有一百多名测试工程师,其中有一些人已经成长为技术骨干和Leader。
在微软的测试体系中,主要的测试人员分为两种,一种是SDET(Software Design Engineer Tester),一种是STE(Software Test Engineer)。对SDET编程能力的要求和对开发人员的要求基本上是一样的。他们都须有扎实的计算机基础知识和编程能力。区别可能在于开发人员对算法更加精通,或某一方面的技术钻研的更深入一些。而微软亚洲工程院要求SDET的技术面很宽,要能使用很多种技术,比如可以用C、C#、脚本等来写程序。陈天说:“我喜欢在面试的时候看他们直接在电脑上编程。如果一个人经常写程序,他调试程序的表现会与编程不熟练的人有很大的不同。”
因为SDET懂开发,有扎实的编程能力,所以他能够做一些其他普通测试人员做不了的工作,比如可以将源代码打开做代码的静态分析,还可以做测试用例的代码覆盖率调查。所谓的代码覆盖率调查,是指考察测试用例能否将所有的源代码都调用到,是一种对测试质量的初步评估标准。
更高深的一些测试方法还包括错误注射(Fault Injection),也就是将错误注射到源程序中。因为很多错误很不容易在某种机器环境中出现,比如一个用户的机器内存特别少的时候,微软要求程序仍然不能丢失数据和发生安全漏洞,但测试人员不能把测试机器的内存拆下来,也不能非常精确的把内存消耗到期望的数值,这时他们会通过注射一段代码来模拟内存的分配。要做到这点,需要掌握编程及熟悉操作系统的内存分配算法。由于SDET的存在,微软可以更加有效地对软件进行测试。
当然,STE的角色也很重要。这些人必须非常聪明,解决问题的能力特别强;有钻研精神,绝不放弃;很细心,而且很有创造力。陈天说:“好的STE不是只按照规定好的测试用例来执行,而是可以想到很多一般用户想不到的地方,他可以用非常规的思路来寻找软件的bug。而且他会懂很多各种各样的软件。事实上,很多bug不是在程序本身找到的,而是在其与其它程序交互时找到的。”不过,就测试工作而言,微软未来的趋向是,纯粹的STE将越来越少,而且微软会要求STE“也要学会用程序工具去进行测试”。
普通的测试工程师若想臻至“优秀”,需要经历很长的阶段。除了要学习很多测试方面的技巧外,还需对测试全局有着全面的了解和充分的掌控——这同样是实现个人成长的重要前提。“测试人员一开始学到的信息都是分块的,比如开始会写测试用例,后来知道了要做代码覆盖率,而后可以学到更深的知识,但最终是要把这些知识都融会贯通起来,大家都需要经历这样一个过程,这是很难避免的。”陈天说,“因此,我要求大家不要只看自己做的部分,而要看其他人做的事情,要看产品开发到哪个阶段,就像玩拼图一样, 只有对整个软件开发流程了解,这个时候你才知道每块拼图应该在哪里。” 为了让测试工程师更快速地成长,微软亚洲工程院经常让大家转换角色,轮流负责不同的任务,或者将一个大的部分拆分为几个小块,每个人负责其中一个小块的全部测试内容。
对于微软亚洲工程院的测试工程师新手来说,工作既充满挑战又非常充实。不过,首先要改变的是“心态”。一方面,不能仅仅满足于完成自己的工作。陈天表示,“如果让一个新人进行浏览器的测试,他可以写很多测试用例,比如测试各种按钮是否可用等等;但对于软件来说,是不是只要经过了这些测试,就立刻可以上市销售了?不能仅仅满足于找到BUG, 要真正做到质量保证. 时常问自己,是不是这样的质量软件明天就能上市?很多新来的员工没有这样的意识,也就是对整个产品质量负责的意识。我经常给我们的工程师讲,尽管微软有几万名工程师,但测试某一个功能点的人就你一个,如果漏过了任何一个bug,等到上市之后,受到影响的可能是数以千万计的微软用户。所以我们要求责任感对一个测试工程师甚至比他的测试技能更加重要。”
当然,对于新人来说,有一套学习的途径可以让他们实现快速地成长——除了陈天等资深测试经理和Test Lead的指导外,微软内部还积累了一整套测试流程、工具和模板。首先,测试工程师要对负责的产品非常了解,要看PM和开发人员的文档,然后根据模板进行工作,而Test Lead也会审查他们的工作。“每个产品的测试都包含了基本的测试,如功能测试、压力测试、代码覆盖率校验、插入测试、与其他产品交互的测试,还有全球化和本地化测试。”在测试用例上,几乎永远是越多越全面越好。在陈天测试Windows XP操作系统某项目时,仅对几个Dll文件的测试就写了两千多个测试用例。陈天说:“微软的测试工具基本上都是自己开发的,虽然商业性比较差,但对产品的针对性很强。除了常用的十种左右的测试工具外,往往需要测试人员针对项目开发很多测试工具。”
谈及未来的发展,陈天对自己的测试团队充满了信心。从院长张宏江到技术总监林斌,微软亚洲工程院阖院上下都对测试工作非常重视。陈天希望将他的团队变成“微软最好的测试组之一”。他说:“虽然目前还不是,但对此我非常有信心,我们的员工技术水平还可以提高,我们的测试流程还可以更适合开发的需求,员工们的测试理念也还应不断增强, 最后,,我们也正在形成自己的测试文化并用次来推动ATC的进一步高速发展。”
分享到:
相关推荐
总之,《[微软怎样测试软件].How.We.Test.Software.at.Microsoft》是一本全面介绍微软软件测试流程和最佳实践的专业书籍。无论是对于希望深入了解微软内部运作的读者,还是寻求提高自身测试技能的专业人士来说,都...
8. 新兴领域的关注:文章提到了软件测试和软件工程等新兴领域的重要性,并强调了这些领域的研究对软件产业的影响。 9. 投资与资本市场:文章同时涉及了与软件产业相关的资本市场情况,提到了《机构投资的管理与创新...
结合提供的压缩包文件"**TFS和TAIR的昨天今天和明天——楚材.ppt**",我们可以推测这是一个关于TFS和TAIR发展历程、现状及未来的专题讲座或者报告。其中可能详细讨论了两个工具的发展历程,它们在当前科研和软件开发...
我们已在软件中针对上述操作系统做了大量的测试和实地检验,保证 Discuz! 可以在上述系统中安全稳定的运行,但您仍然需要做好服务器操作系统级的安全防备措施,例如Windows用户需更改 MySQL for Windows 的初始 root...
SQL Server 2008是由微软公司开发的关系型数据库管理系统,它提供了强大的数据存储、管理和分析功能,广泛应用于企业级的数据处理。而SQLyog则是针对MySQL数据库的图形化管理工具,以其简洁的界面和高效的性能,深受...
C#是一种由微软开发的面向对象的编程语言,它在.NET框架上运行,旨在提高软件开发的生产力。C#的设计灵感来源于C、C++和Java等语言,它结合了这些语言的优点并引入了许多现代编程特性。C#在游戏开发、Web应用、移动...
2.5 Internet的明天 16 2.5.1 下一代Internet(NGI) 16 2.5.2 超速骨干网服务 16 2.5.3 Internet2(I2) 17 2.6 Internet管理组织 17 2.6.1 Internet协会 17 2.6.2 Internet体系结构组 17 2.6.3 Internet工程任务组 17 ...
2.5 Internet的明天 16 2.5.1 下一代Internet(NGI) 16 2.5.2 超速骨干网服务 16 2.5.3 Internet2(I2) 17 2.6 Internet管理组织 17 2.6.1 Internet协会 17 2.6.2 Internet体系结构组 17 2.6.3 Internet工程任务组 17 ...
2.5 Internet的明天 16 2.5.1 下一代Internet(NGI) 16 2.5.2 超速骨干网服务 16 2.5.3 Internet2(I2) 17 2.6 Internet管理组织 17 2.6.1 Internet协会 17 2.6.2 Internet体系结构组 17 2.6.3 Internet工程任务组 17 ...
3. **IDE与工具**:Visual Studio是微软提供的集成开发环境(IDE),支持C#开发,提供了代码编辑、调试、版本控制、单元测试等功能,极大地提高了开发效率。 4. **编译与运行**:C#程序需要先编译成中间语言(IL)...
项目的实施过程中,开发团队可能会遵循软件工程的最佳实践,如需求分析、系统设计、编码、测试和维护。需求分析阶段确定了应用的功能需求,系统设计阶段则考虑了架构和接口设计。编码阶段将设计转化为实际代码,而...
这个压缩包很可能是该软件的源代码或部署包,用于在服务器上运行一个在线商城系统。 描述中提到“建议使用VS2017以上最好2019”,意味着开发环境是Visual Studio 2017或更新版本,特别是VS2019,这是微软提供的用于...
C#是一种现代化、面向对象的编程语言,由微软公司开发,广泛应用于Windows平台的软件开发。ZSokoban选择C#作为基础,意味着它具有良好的性能、内存管理和类型安全性。开发者可以利用C#强大的库和.NET框架来快速构建...
LDAP:目录服务 153 16.1 为什么使用目录服务 153 16.2 目录服务的功能 153 16.3 IP上的目录服务 154 16.4 OSI X.500目录模型 156 16.4.1 早期的X.500 157 16.4.2 今天的X.500 157 16.5 LDAP...
在这个项目中,我们可以深入学习C#编程语言、数据库设计、面向对象编程原则以及软件工程的最佳实践。 1. **C#编程基础**:作为项目的编程语言,C#是一种现代、类型安全的面向对象语言,由微软开发,广泛用于Windows...
LDAP:目录服务 153 16.1 为什么使用目录服务 153 16.2 目录服务的功能 153 16.3 IP上的目录服务 154 16.4 OSI X.500目录模型 156 16.4.1 早期的X.500 157 16.4.2 今天的X.500 157 16.5 LDAP...
2.5 Internet的明天 16 2.5.1 下一代Internet(NGI) 16 2.5.2 超速骨干网服务 16 2.5.3 Internet2(I2) 17 2.6 Internet管理组织 17 2.6.1 Internet协会 17 2.6.2 Internet体系结构组 17 2.6.3 Internet工程任务组 17 ...
标题“emptyMSProj:我的主要空项目(MediaStyle)”暗示这是一个关于软件开发的项目,主要使用了MediaStyle的设计或布局。MediaStyle通常与Android应用相关,它是一种UI设计模式,用于创建类似于媒体播放器的界面,...