微软测试工程师史亮:新的产品,新的挑战

非商业转载请注明做译者、出处,并保留本文的原始连接:http://www.ituring.com.cn/article/114546程序员

史亮,东南大学计算机软件与理论专业博士,研究领域为软件分析与测试。2006年加入微软(中国)有限公司,任职软件开发测试工程师,负责微软在线业务与商业智能产品的测试工做。2011年调至微软总部,从事Microsoft Office 2013的测试工做。2012年与淘宝测试工程师高翔合著了《探索式软件测试实践之路》一书。2014年,独自出版了《软件测试实战:微软技术专家经验总结》。目前,史亮正从事下一代Microsoft Office产品的研发工做。面试

图片描述

图灵访谈:您从何时开始编程?是什么让你决定走上计算机这条路?编程

史亮: 1997年,我进入东南大学计算机系,开始正式学习软件开发。由于时间久远,我已经记不清当时选择计算机专业的缘由。也许只是懵懂地认为计算机行业有更好的发展前景,幸运的是整个行业在随后的十余年时间有爆发式的增加。设计模式

在攻读博士学位时,我阅读了《C++设计新思惟——泛型编程与设计模式之应用》(Andrei
Alexandrescu著,侯捷、於春景译)。这本书引发了我对于软件设计的热情。此后,我阅读了许多软件开发的书籍,并经过实验性项目实践了不少编程技术。从某种意义上,这本书是我职业发展的转折点。这并非由于它提供了我平常使用的技术,而是它激发了个人兴趣,让我有动力去深刻钻研。在学习和实践的过程当中,新问题又引出新的动力,这样的激励循环帮助我持续成长。浏览器

图灵访谈:软件测试的魅力何在?您为何选择测试一行而不作开发?安全

史亮: 2006年,我即将离开校园。在通信软件MSN Messenger上,大学本科同窗尚云飞建议我到北京来工做。当时,他与个人另外一位同窗宋显祖在微软亚洲工程院工做。在他们的热心帮助下,我得到了去北京面试微软测试开发工程师(Software Development Engineer in Test,简称SDET)的机会。随后就加入微软,并工做至今。回顾往事,当年那次聊天令个人人生发生了改变。在此以前,我从没有仔细考虑过离开家乡到异地工做。李笑来老师(《把时间看成朋友》等书的做者)在演讲中曾说:“改变咱们人生的关键事件都是没法预期的偶然事件。”果真如此!服务器

在工做后,我逐步体会到软件测试所面临的困难,而这些有挑战的问题就是测试魅力的根源。其中,根本性的困难是,随着软件行业的高速发展,“软件的复杂度已经超越了人的理解能力”(我在《软件测试实战》第一章有详细的讨论)。为了应对挑战,测试人员须要综合发展自身能力,以实施有针对性、聚焦风险、丰富多样、注重实用的测试。在此过程当中,他须要解决一系列复杂问题,这对他的能力成长颇有帮助。微信

图灵访谈:您在国内和国外都有至关丰富的测试经验,您能对比一下国内国外两种环境下的测试实践的特色吗?并发

史亮:我认同语境驱动测试(Context Driven Testing)的观点:测试实践的价值来自于它的语境。除了测试人员的态度和能力,软件项目和测试团队对测试实践有最大的影响。测试人员须要根据项目语境(项目环境、产品元素、质量标准、产品质量等)选择一组相互支持的测试实践。框架

个人切身体会是,国内外的工做风格确实有所差异,可是测试实践主要取决于产品、项目和团队。并且,随着国内大型企业的国际化,其文化氛围和工做方式与国外企业并无太大的差异。在具体工做中,测试人员总须要研究产品(《软件测试实战》第7章),研究项目(《软件测试实战》第8章)并融入团队(《软件测试实战》第9章)。只要采用积极的态度来面对职业发展,测试人员在各类环境中均可以得到成长。

图灵访谈:国内有一些企业认为相比于开发者,软件测试人员能力差一些也能够,您认同这种见解吗?这种想法造成的缘由是什么?

史亮:这里,所谓“能力差一些”大多指“编程的能力差一些”。在一些软件项目中(国内外皆有),测试人员的主要工做是手工测试,所以对编程能力没有很高的要求。可是,测试是获取信息的技术调查,须要多种能力,例如:

  • 交流协做:对于复杂的软件,任何人都不可能掌握所有的信息。为了更好地理解软件,测试人员须要与项目经理、程序员、领域专家、测试同事等协做,还须要研究项目文档、技术资料、领域专著等资料,并经过实际测试去得到第一手知识。
  • 测试报告:测试人员是项目的“车前灯”,他须要提供高质量的缺陷报告和测试报告,以帮助项目团队掌握项目状况并造成决策。
  • 测试建模:人们处理复杂问题的经常使用策略是“分而治之”。在测试领域,测试人员能够创建产品的模型来帮助测试。在建模过程当中,他用当前测试目标为指导,省略无关的产品细节,突出重要的产品元素。针对简化后的产品模型,能够更有效地实施测试设计。
  • 测试设计与执行:测试人员须要积累多种测试技术,将它们综合运用于当前项目,并在测试执行的迭代过程当中,经过持续地评估和反思来逐步加强测试方案。
  • 测试开发:测试人员可使用或开发恰当的测试工具,以提升测试效率。

可见,测试人员须要多种能力才能胜任测试工做。其能力集合与开发人员有重叠,但不尽相同。不能单纯用“编程能力”的强弱来评价测试人员的水平。

其实,不管主管是否要求,测试人员均可以主动学习编程技术,并应用于实际工做。在测试中,许多活动提供了自动化的机会,例如产品部署、环境配置、机械性的测试执行、信息收集、报表生成等。合理地运用开发技术,构建合适的工具,可以明显提升测试效率。

平心而论,项目主管更看重编程工做有现实因素。软件项目的目标是交付可以赢得竞争的软件,而编程是产生软件的最直接的活动,开发人员的水平对软件质量有最直接的影响。测试人员的工做虽然重要,但不能直接产生代码,因此容易被低估。测试人员应该正视这种状况,但没必要怀忧丧志。做为一个专业人员(professional),他应该经过天天的努力来推进职业发展。

图灵访谈:您与淘宝测试工程师高翔合著了《探索式测试实践之路》一书的过程当中有没有发现一些测试理念的分歧,这样的分歧来源自哪里?最后大家是如何解决的?

史亮:我和高翔经过彼此的博客发现双方都对探索式测试有浓厚的兴趣,因而常常交换意见和分享经验,天然成为好友。后来,咱们一块儿合做撰写了《探索式测试实践之路》 一书,以分享所学所知。由于咱们都高度认同语境驱动测试和探索式测试的思想,因此并无根本性的分歧。咱们的主要差异在于如何论述探索式测试的实践。

下图是测试专家James Bach提出的概念模型,以展现不一样测试方法的风格,其中最左侧是严格脚本化的测试,最右侧是高度机动的自由式探索。高翔在论述探索式测试时,更着力于自由式探索并提出了一批他总结出的测试模型,我则没有特别喜爱的方法,较宽泛地介绍了一些技术和工具。从某个角度,咱们的论述内容构成了深度与广度的互补。

01fsHE1YDI2q

图灵访谈:有人说Microsoft算是在软件测试方向上偏传统的,您认同吗?您能向咱们介绍一下其余互联网公司如Facebook、Google以及Amazon的测试风格吗?

史亮:我并无在其余互联网公司工做过,虽然阅读过一些报道,可是不能提供更多的信息。所以,难以置喙。我阅读过原版的《Google软件测试之道》(中文版由人民邮电出版社引进)。该书较生动地介绍了一些谷歌的测试实践,部份内容颇有启发性,值得一读。

正如我以前提到的,测试实践主要取决于产品、项目和团队。在很长的一段时间内,微软最知名的产品都是发布周期为2~3年的套装软件,如Windows和Office。这些产品的测试实践很成熟,成为微软测试的表明。《微软的软件测试之道》(Alan Page, Ken Johnston, Bj Rollson著)较好地总结了相关方法和经验。

随着互联网成为新的计算平台,商业社会的运做已经深度依赖于互联网服务,所以互联网服务的开发和测试成为新的热点。并且,智能手机和平板电脑主导了移动计算的发展,基于App Store发布的移动应用成为用户的新宠。相比之下,套装软件显得不那么“时髦”。所以,微软的测试给人以“传统”的印象。

可是,若是仔细观察,不难发现微软的产品已经发生了深入的变化,且还在持续演变中。伴随而来的是软件开发和测试方式的转变。如下是一些例子。

  • 必应的一些在线服务已经作到每日部署(daily deployment),即代码签入以后,若是成功经过编译和自动化测试,能够在24小时内部署到产品环境,整个流程(代码编译、自动测试、服务部署、在线监控)不须要人工操做。其自动化水平与其余互联网领军企业至关。
  • Visual Studio是强大的集成开发环境,提供了很是丰富的功能。目前,Visual Studio团队可以作到每一年发布一个新版本(如Visual Studio 20十二、Visual Studio
    2013和即将到来的Visual Studio 2014)和3个重要更新(如Visual Studio 2013 Update
    一、二、3)。对于如此复杂的产品,可以作到持续交付,说明Visual Studio团队拥有较高的研发和管理水平。
  • Windows团队已经将Windows重要版本的发布周期从3年压缩到1年左右,例如Windows 8.1的研发用时约1年,Windows 8.1 Update 1的研发用时约半年。
  • OneNote团队在多个平台(Windows桌面、Windows Store、Windows Phone、Mac、iPad、iPhone、Android、Web)上推出了产品,并公布了OneNote
    API,使第三方应用能够将内容发布到云端的OneNote笔记本。其产品覆盖桌面应用、平板应用、手机应用、Web应用、Web服务等,且在持续发布中保持了较高的质量。

我相信,随着微软业务模式的转变,微软的软件研发会持续演化。在此过程当中,好的思想和经验会被传承下去,而新语境势必催生出新的实践,并让一些在其余公司得到成功的方法在微软获得应用。此外,微软拥有许多有特色的项目,项目组之间的交流经验会催生出一批优秀的实践。

图灵访谈:手动测试和自动测试各自的优缺点是什么?微软在实践上是如何结合这两种测试方法的?

史亮:微软是一家大型企业,拥有多种类型的项目。不一样的项目对于测试提出了不一样的要求,所以项目小组每每会采用不一样的测试策略。通常而言,微软要求测试人员具有较高的技术水平,可以熟练地开发自动化测试和测试工具。在许多项目组,测试人员须要编写大量的代码来测试产品,也须要花费至关的时间来手工测试产品。一般,第一线的测试人员最了解产品和技术,他们会主动探索各类技术,以发展出多样性的测试策略。

在此,我介绍一些个人我的观点(《软件测试实战》的第5章对详细地讨论了测试开发)。

首先,测试活动是相辅相成的。测试专家Johnathan Kohl将不一样的测试活动比喻为不一样的交通方式,每种方式都有优势与不足。

我喜欢走着上班。我很享受风景、运动,以及一边漫步一边思考问题的时光。在户外新鲜的空气中,在远离电脑的思考中,我得到了一些极好的想法。沿途的观察激发了灵感,将我引向创造性的解决方案。

可是步行是缓慢的,若是我驻足观赏可爱的动物或享受日出霞光映红的山脉,我极可能会迟到。因此,在赶时间的时候,我会搭乘公共交通。虽然公共汽车或列车仍旧伴随着步行,可是我能用快得多的速度及时地到达目的地。我极少驾车上班,由于这让我无暇去观察并思考。可是,当别人驾车时,我可以从旅途中得到不少。例如,最近我坐城铁去上班,在路上发现了之前从未注意到的河谷峭壁。我曾经屡次通过河谷,可是直到坐上轻轨的那天,在没有步行或驾车分心的状况下,我才能用全新的角度观察到新的景色。

-- Jonathan Kohl, Man and Machine

在以上隐喻中:

  • 手工测试是步行。在漫游产品的过程当中,测试人员能够观察到丰富的细节,可以随时暂停预约的测试路线,对感兴趣的局部进行细致的测试。其不足是推动的速度较慢,有时不能在短期内完成长距离的旅行(覆盖更多的测试目标)。
  • 自动化测试是驾车。其优势是速度快,能在短期内测试大量的内容,其不足是自动化测试只作规定的检查,会忽视其余全部细节。即使软件出现一望即知的问题,只要测试代码没有作相应的检查,自动化测试就会放过它。其实,自动化测试更像地铁,能够将大量乘客快速准时地送到目的地,可是全部旅客都没法观察到地面的风景。
  • 计算机辅助测试是他人驾车。自动化测试或测试工具完成繁重的工做,带着测试人员快速地漫游产品。在测试过程当中,测试人员监控产品的表现,若是发现问题,他能够“下车”调查。该策略综合了手工测试和自动化测试的优势,利用软件工具来提升测试效率、丰富测试手段,让测试人员可以更好地观察、思考与行动。

可见,手工测试和自动化测试并非相互排斥的。若是综合它们的优势,就可能开发出更具威力的测试策略,以实现单独的手工测试或自动化测试不能达到的效果。

第二,测试是为了得到产品质量信息的技术调查,任何有助于周密调查的方法都是有价值的。在罪案侦查中,刑侦人员会利用多种方法,从各个信息源收集情报。他们会利用高精密的仪器提取证据,也会大范围走访以得到线索,更重要的是,他们会反复思考当前的情报,以随时调整调查方向。与之相似,测试人员也须要综合运用多种技术和工具,去探究新的信息,并根据新发现及时调整测试方向。在调查过程当中,学习、分析、推断、反思等思惟活动是必不可少的,而这些是没法自动化的。

第三,利用自动化测试,测试人员能够实施更有效的技术调查。如下是一个案例。

模糊测试是一种修改输入数据来暴露软件缺陷的方法。若是产品须要读取复杂的文档,测试小组可使用文件模糊器,对原始文档进行随机修改,生成大量的模糊文档。而后,模糊测试框架启动产品,令它读取这批被篡改的文档,并严密监控可能的异常状况。在测试结束后,测试人员分析测试日志中记录的错误,以识别安全缺陷。模糊测试是一种暴力测试方法,一轮模糊测试会使用数万个甚至更多的模糊文件。若是运用得当,模糊测试能够发现许多手工测试或简单的自动化测试没法发现的问题,这对于提升软件的安全性极具价值。例如Microsoft
Office团队在开发Office 2013时,经过模糊测试发现并修改了2100多个缺陷。

可见,新的测试挑战要求测试人员从新思考自动化测试的使命,用创新思惟去充分利用计算资源,以提出更具威力的测试策略。

图灵访谈:从测试人员的我的发展角度来看,您更鼓励他们参与什么样的测试工做(手动测试、自动化测试,仍是测试用例的设计)?

史亮:我建议测试人员多方面的发展。一个测试新人须要避免的思惟误区是用某个职务头衔限制自身能力的发展。例如,我在测试论坛中发现一些测试人员常讨论“白盒测试工程师”、“黑盒测试工程师”和“性能测试工程师”等职位。一部分人认为它们是相互排斥的,即作白盒工程师就不用考虑用户情景,作黑盒工程师就不要考虑代码实现,作性能工程师就只要钻研性能测试工具。其实,这些名词只是某些公司所设定的职位而已,只表明他们对工程师的要求,并不体现软件行业对高水平测试人员的指望。实际上,国内外的高水平科技企业都要求工程师可以独当一面,可以独立完成一个领域的大部分任务。对于测试人员而言,他须要可以独立完成一个产品或组件的测试。不管测试活动是白盒测试、黑盒测试仍是性能测试,只要工做须要,他就应该有能力完成。所以,为了长远地发展职业生涯,测试人员不该该被头衔所约束,而是要积极地拓展本身的知识储备。

图灵访谈:对在线服务的测试和对传统软件的测试有什么不一样?

史亮:通常说来,互联网应用与客户端软件有以下不一样。

  • 互联网应用运行在云端,客户端软件运行在用户计算机上。对于云端服务,运营团队只要发布新版本就能够当即覆盖全部用户,因此部署缺陷修复变得很容易。这推进项目团队以更快地速度开发并测试软件。反观客户端软件,许多用户并不常常更新软件,这推进项目团队花较多的时间来稳定产品,以减小错误。
  • 互联网应用大可能是“服务器—浏览器”端,其中服务端的全部代码都运行在受监控的环境中。项目团队能够经过服务日志等了解用户行为和软件行为,这为分析用户习惯、发现程序错误、优化系统性能等提供了重要资料。这些信息经常是内部测试所不能提供的,对项目团队提升产品质量有很大帮助。反观客户端软件,项目团队一般没法访问其运行环境,也很难收集到丰富的用户反馈。这样的信息缺口要求测试小组更努力的测试、更积极地与用户交流,但很难到达互联网项目的效果。
  • 互联网应用每每拥有涉及多个软件系统的工做流,每一个系统每每有不一样的实现技术和测试策略。这要求测试人员掌握更多的方法和工具,并准备复杂的测试环境。客户端软件经常只有一个进程,测试人员只须要深刻了解它,就能够胜任工做,且搭建测试环境比较简单。

不过,目前的趋势是客户端软件也在“云端化”,客户端软件的测试人员须要更多地借鉴互联网应用的测试实践。

  • 许多客户端软件已经作到持续更新。例如,一些软件会自动下载更新,而后提示用户更新。有些软件甚至会自动安装更新,因此用户每次启动都是该软件的最新发布版。在智能手机和平板电脑上,App Store也会提示用户更新应用,并且在用户容许的状况下,有些App Store会自动安装新版本的应用。此外,有些应用的显示内容是HTML渲染的结果,只要服务器推送新的HTML页面,应用的内容就会变化。从某种角度,此类应用与互联网应用的浏览器端没有什么差别。
  • 许多客户端软件已经能够持续收集质量信息。成熟的App Store都向开发者提供了丰富的质量信息,包括用户下载次数、购买次数、用户评价、软件崩溃信息、软件错误信息等。这都有助于开发者提升应用质量。此外,许多软件会使用遥测(telemetry)技术,在用户容许的状况下,向服务端发送运行数据。这让客户端软件的项目团队也能得到丰富的质量数据。
  • 许多客户端软件都须要访问互联网服务。我回忆了一下平常使用的软件,大部分都要与某些服务器通信——这也是大多数用户的广泛状况。将来,纯粹的“单机软件”会越来越少,客户端软件与互联网服务的结合会更紧密。所以,相关测试人员也须要掌握一些互联网服务的测试技术。

客户端软件不会和互联网应用如出一辙,可是它们将拥有更多的类似之处。在高速发展的软件业,技术工做者须要“拥抱变化”,向同行学习一些新技术,作一些恰当的尝试,会收获好的成果。

图灵访谈:在《软件测试实战》的结尾,您总结了不少帮助测试工程师高效学习的方法,其中提到了“耐心”、“坚持”和“知行合一”。您能总结一下一位优秀的测试工程师应该具有的性格特色吗?

史亮:我认为任何性格特征的测试人员均可以得到成功,并且从团队建设的角度,一个由不一样性格成员所构成的团队每每更有活力。

得到我的成功并不容易,我认为最重要的基础是对项目、对本身负责任的态度。对项目负责,测试人员须要提供高质量的测试服务来帮助项目成功;对本身负责,测试人员应该以专业人员(professionals)自居,坚持专业主义(professionalism),追求精湛的技艺和卓越的成果。好的态度会推进持续的努力,努力将得到项目成功和技能成长,它们会激发热情,而热情会燃起更积极态度。这样的激励循环将帮助测试人提高能力,并发展出适合自身特色的职业之路。

图灵访谈:测试过程当中,工程师须要对产品和业务有至关地了解,是否是说测试工程师在某些方面对于产品的了解甚至超过了产品经理?

史亮:对于复杂的软件,任何人都不可能掌握所有的信息。测试人员的主要任务是经过技术调查提供产品的质量信息,为项目的关键决策提供支持。一方面,技术调查要求测试人员掌握产品和业务的知识,另外一方面,深刻的调查会帮助他更深入地理解产品和业务。因此,在许多问题上,测试人员的理解超过产品经理是很天然的状况。

《软件测试实战》第7章“研究产品”从静态分析、动态分析、业务研究等方面入手,讨论了如何从测试视角来研究产品。所谓“优秀的测试”并非使用最前沿、最高级的测试技术,而是根据产品和项目的实际状况选择恰当的测试方法。因此,测试人员须要在整个项目过程持续地调研,并将研究成果应用于当前的测试。

图灵访谈:将来办公软件产品将会朝什么方向发展?Office系列产品在将来是否会出现重大革新?

史亮:微软的总体战略是“Mobile First, Cloud First” (移动优先,云端优先)。在Microsoft Office方面,该战略大体有以下表现。

  • 除了Windows和Windows Phone,Office套件会进入其余主流移动平台,包括iPhone、iPad和Android等。目前,OneNote已经在这些平台上发布了相应版本。
  • Office套件会和微软的云服务(OneDrive、SharePoint Online等)深度集成,让用户能够随时随地经过Office应用来访问存放在云端的信息。
  • Office365(Office套件与云服务的集合)会在商业智能、团队协做、业务管理等领域持续发力。 将来,移动计算与云计算会深度集成,Office产品也须要“与时俱进”。

更多精彩,加入图灵访谈微信!

图片描述

相关文章
相关标签/搜索