北京乐搏信息技术有限公司
服务热线:
15801252839
专访Bill Liu:软件测试是支撑研发前行的一条腿
浏览数:102
文章附图

导语:这是一位工作于世界上最伟大软件公司的软件测试工程师,他拥有一流的软件测试技术,曾多次在微软美国总部的工程卓越( Engineering Excellence)和工程论坛(Engineering Forum) 做技术演讲,同时也被微软全球技术大会(TechED 2010、 2011)、中国软件技术大会和ChinaTest 2012软件测试大会特邀做讲师或评委。为此CSDN记者对这位技术大牛进行了专访并发表成文,希望大家看完后,尤其是开发者和产品经理能对软件测试有个全新的了解,同时也能认识到软件测试对研发的重要性。

Bill Liu,现任职于微软美国总部Windows Azure部门,主管身份验证管理、网络负载均衡和域名服务等模块的测试和质量管理的工作。 之前工作在服务器和工具部门,负责微软中小型企业解决方案的产品测试和努力提高测试工具及测试平台的易用性和有效性。对软件测试、质量控制和流程管理以及测试自动化有着深刻理解,为多个大中型企业提供敏捷测试和测试自动化实战培训和咨询,并受邀与多个企业和高校做技术交流, 编有《详解微软Windows Azure云计算平台》一书。

我愿化身沟通之桥

CSDN:请和大家介绍下你及所从事的工作。

Bill Liu:首先感谢CSDN安排这次专访,提供这么一个宝贵的机会和国内的朋友交流。我是Bill,目前在微软美国总部Windows Azure部门负责管理软件测试和质量管理工作。我负责的工作包括网络基础架构、网络负载均衡、域名服务以及身份验证和管理。

在此之前是在服务器和工具部门,负责微软中小型企业解决方案的产品测试和提高测试工具以及测试平台的易用性和有效性。而在加入微软之前,我是在俄克拉荷马大学学习并获得计算机硕士学位,本科则在国内南开大学获计算机学士,毕业后在南京软件公司做过几年系统集成软件开发工作。

CSDN:根据介绍你毕业一开始是在国内软件公司做系统集成软件,是什么原因促使你加入到出国留学大潮中?在国外工作这么久了,你认为美国公司和中国公司最大的不同在哪?

Bill Liu:其实当时原因很简单,就是想尝试不同的人生经历。毕业后在国内软件公司工作的几年时间,虽然工作比较稳定也还不错,但静下来时总感觉有点迷茫,不知道自己未来在哪?未来的五年,十年又会向哪里发展?而那个时候,周围又有几个朋友在办理出国,于是很自然地就加入了他们的行列。

我觉得就软件公司来说,个人感受比较深的是美国公司总的来说更看重对员工的培养。比如微软有非常完善和成熟的员工帮助成长体系,包括培训、职业发展规划和路径。其实很多美国公司都认为员工只有成长,公司才能持续发展,这让员工真实感受到“员工是公司最大的财富”。另外他们也非常看重个人技术能力,通过技术来赢得别人尊重,通过技术来管理和领导下属。

CSDN:你经常奔波于中美两地做技术交流,实际上你也比较忙,为什么这么喜欢做技术分享?希望借此带来什么?

Bill Liu:我记得在2010年首次回国参加在北京举办的微软全球技术大会,介绍微软云计算产品和技术。演讲结束后很多人围着我问更多的问题,他们中很多人实际上有较深的了解,但是感觉很多人的技术和知识普遍比较“死”或呆板。我回美国后也继续在和国内的人交流,同时我也想明白很多:其实国内很多技术并不落后,因为互联网的原因,他们很容易获得相关知识,不像以前那样信息闭塞。但他们的获得渠道基本上是文章、书籍、博客或微博,缺少面对面的交流。要知道光看别人的文章只能看到写出来的东西,文章背后的东西却看不到,很容易造成知其然不知所以然。所以就开始做起技术交流,希望自己可以在云计算和软件测试方面成为中美之间的一座桥梁,通过面对面的交流,不仅诠释和分享技术,更重要的是传递技术背后的思想,文化和背景。

CSDN:你和方国伟共同编写了《详解Windows Azure云计算平台》一书,在这本书中,你都做了哪些贡献?在编写过程中有什么难忘的回忆吗?

Bill Liu:这本书是国内第一本全面介绍windows Azure的专业书籍。我和方国伟起初并不认识,当时我们都打算写一本有关Windows Azure的书籍,我们在联系出版社的时候被电子工业出版社的编辑牵上了线。于是我们从头开始考虑、策划、组织、编写和审阅该书,我编写了这本书约40%的内容。

写书的感觉是“痛并快乐着”。我写作功底较差,以前从来没想过会写书。写作基本上是在晚上和周末进行的,中间几度想放弃,但是想到国内极缺一本全面和系统介绍Azure的书籍,也就咬牙坚持下来。另外写作过程中为了保证质量,确保技术的精确性和书籍的可读性,我们经常交换草稿,把自己当读者,然后从读者角度提出修改意见。

隔离技术让Windows Azure足够安全

CSDN:Windows Azure在全球部署了多少个数据中心?微软是如何屏蔽不同账户的信息和资源使用互不泄露和冲突?

Bill Liu:Azure在全球共有8个数据中心,其中美国有4个,欧洲两个,亚洲两个。之所以是两个:一是为了负载均衡;二是为了互相备份。

微软是如何屏蔽不同账户的信息和资源使用互不泄露和冲突,这个问题问的非常好。很多用户在使用云计算之前,就担忧他们的数据是否安全?用户共享资源是否会互相受影响?其实微软在这方面做了很多工作,来确保用户安全并且共享之间不受影响。这主要使用隔离技术,包括物理隔离和逻辑隔离。物理隔离是指不同用户的数据和应用运行在不同机器和数据库中,使得彼此不可以访问也互不干扰。逻辑隔离使用更为普遍,虽然不同用户与数据运行和保存在同一台机器及数据库里,但是运用了用户标识符把彼此很好的分隔开来。另外还有节流技术——根据用户的配置来分配相应大小资源,比如CPU内核数量、内存大小和网络带宽等,如果用户实际使用量达到预定值,系统就会对其节流,从而保证一个用户不会耗尽系统所有资源,而不影响其他用户正常使用。

CSDN:能不能简单介绍下云计算常用应用设计有哪些?

Bill Liu:云计算给广大架构师和开发人员带来了新的挑战。根据应用服务的具体特征,常用的设计架构有软件+服务,也就是把应用架构成基于服务的模型,还有异步松耦合,也就是把复杂应用服务模块化,模块之间使用异步通信,这种架构使得每个模块可以独立弹性伸缩,从而充分利用云计算所提供的优势。另外容错也是架构云计算应用时必须要考虑的一方面,使得应用服务有能力处理系统错误。

优秀软件测试工程师修炼之道

CSDN:如何做一名优秀的软件测试工程师?他至少具备哪些技术能力?

Bill Liu:软件测试工程师首先是一个软件工程师,也就是说他必须具备软件工程师的基本技术能力,比如对计算机结构系统(硬件,操作系统,内存,网络等)基本了解,再有就是算法数据结构,以及开发编程能力,最后就是对所工作领域的技术掌握。有了这些基本技术后,下面要掌握一些测试技术,比如黑盒白盒、等价类、边界值、功能测试、性能压力测试和安全性测试等。除了必须懂得技术硬技能外,要想成为一名优秀的软件测试工程师还必须有很强的软技能,这包括对产品质量的热情和沟通协调能力等。其中对产品质量的热情和专注尤为重要,因为兴趣是最好的老师,只有对所做的工作充满热情,你才会从平庸变成卓越。

CSDN:怎么才能进行有效地探索性测试?另外很多优秀的软件测试工程师都能敏锐地嗅到bug,你认为如何训练这方面能力?

Bill Liu:探索性测试不仅需要对产品熟悉,还需要掌握开发产品采用的技术,最后就是自己经验的积累,这三者缺少一个都很容易把探索性测试变成漫无目的的测试。因为探索性测试是边运行测试、边了解产品和边设计新的测试。它根据当前测试步骤产生的结果,加以分析判断,然后使用策略决定下一步会最有可能发现产品中的bug。我曾写过一篇介绍探索性测试的文章,那里面用猜数字的游戏来解释探索性测试,猜数字的第二步也就是根据第一步猜的结果,来决定猜下一个数字所使用的策略非常重要。没有好的策略就会变成乱猜,而策略就需要你对游戏的规则、数字的特征以及二叉树查找等知识的积累和掌握。

其实对bug的敏感度也是建立在以上三个方面的能力:产品、技术和经验。另外分享一个小技巧,测试人员可以经常把以前的bug拿过来分析和学习,比如当时是如何发现的?找出共性特征,及时做总结,时间长了自然就会提高发现bug的能力。在我带的一个团队中就经常让团队的人找一个自认为最好的bug,轮流在团队会议上和大家分享他发现该bug的过程,从而给团队其他人以启发和学习。

CSDN:可以说微软、谷歌、亚马逊等公司代表着测试软件发展方向,他们是如何做软件测试的?他们在软件质量控制理念和实践方面,哪些地方值得我们借鉴?

Bill Liu:有很多因素决定一个公司如何做软件测试,其中最为重要的就是产品的特点,换句话说就是什么样的产品决定什么样的测试策略。即使在同一个公司,不同的产品也不是使用一成不变的测试方式。微软是传统桌面型产品的代表,由于桌面型产品的特点,使得微软在软件开发过程中做大量的测试,来保证软件发布时候的高质量。而对于谷歌亚马逊等互联网公司,他们的产品以网站和服务为主,于是他们采用不同的测试策略来保证网站和服务的高可用性虽然不同公司团队具体测试实践或手段有所不同,但仔细分析他们在软件质量控制理念上有很多共性值得我们去借鉴,比如强调把质量提前,开发对代码质量负责,整个团队对产品质量负责,产品质量是从一开始就建立起来的而不是后天测试出来的等。

国内软件测试落后的根本原因在观念

CSDN:软件测试工程师就是软件企业中的QA,他对如何写出一个好代码有得天独厚的认识,你认为该如何提高软件质量?又该采取哪些质量控制手段来保证软件质量?

Bill Liu:软件质量的提高是个系统工程,需要整个开发团队共同努力。以前认为软件质量是QA的事情,与开发和项目经理无关。经过多年的实践,现在业界普遍认为,光靠QA在软件发布前的几天几周或几个月突击找bug的方式,提高不了软件质量。QA不仅要在软件开发过程中做质量控制,也要在开发前做需求分析的时候就着手做质量控制,甚至在软件发布之后还需要继续做质量控制。软件的质量不是工程团队闭门造车,而是把客户参与进来,不断使用,不断反馈,不断提高的一个持续的过程。

CSDN:现在国内软件测试有个误区,很多人认为软件测试技术低于软件开发技术,软件测试要求不高,随便找个人做就可以了,对于这个,你是怎么看的?

Bill Liu:造成这样的客观原因很多。简单的测试的确不需要太多技术,把产品给你,你随便用一用,也会找到一些bug,所以看起来非常简单,不要说人了,就是猴子也可以做。但是要找到好的、关键的bug和找到很多bug,不是一件容易的事。而且优秀的软件测试工程师不仅可以找到bug,而且可以帮助团队预防bug的产生,从源头杜绝bug。此外优秀的软件测试工程师不仅是一个人在找bug,它还可以通过开发工具来提高自己和别人找bug的效率。上面就是普通QA和优秀QA的区别,所以QA是入门容易进步难。

另外做QA的也要以身作则,不断提高自己的技术能力。举个例子:在国内培训的时候经常遇到这样一个说法:“(比如测试自动化、工具或流程)的确好处很多,但是它对测试的要求太高了”。刚开始的时候我很惊讶,因为第一次听到对测试要求太高的说法,后来听多了才慢慢意识到问题的所在。如果说国内的测试比国外落后N年的话,我觉得“对测试的要求太高”的观念就是导致落后的根本原因。我一直在观察和对比国内外测试的区别,这有技术、工具、和流程上的区别,但是这些差别都只是表象,根本的差别是观念上的差别,也就是测试在研发中的真正角色。这个不是找到多少个bug的问题,也不是采用什么测试方法的问题,而是是否把测试作为支撑研发两条腿中一条腿的问题。测试是一个专门的职业,和开发一样有不同级别,初级人员解决简单的问题,高级人员必须负责解决复杂,高难度的问题,这样才形成一个完善的测试人员职业发展体系。

也有很多测试经理很困惑地表示,他们加大了在测试上的投资,包括参加很多技术、流程、管理培训,但是效果都不好。原因其实很简单,就是我们学习的某个技术,或某个工具,是无法解决观念上的问题,这当然没效果,也容易跟风。刚学会手工测试,又要测试自动化;刚学会测试自动化,又要ET;刚学会ET,又要敏捷……,没有观念就没有主见。如果QA自己都觉得测试没有难度,没有前途或者对测试要求太高的话,不可能指望别人对QA价值的认可。

敏捷测试的第一步就是不要敏捷

CSDN:自从敏捷概念从国外引进国内后,敏捷开发和敏捷测试就很火,但有人认为敏捷测试就是一个大忽悠,你是怎么看待这个问题的?你认为如何做好敏捷测试?

Bill Liu:任何东西都有一定的适用范围和使用条件。比如我们看飞机极大地缩短了人们的旅行时间,但是我们不能只看到飞机本身的优势,更应该看到它需要飞行员、跑道和航站楼等配套软硬件设施,这些缺少一个都会把飞机变成一个毫无用处的摆设,成为一个忽悠。敏捷开发和测试也是一样,我们不能只看到国外团队挤在一间大屋子里面,没有文档,没有计划,没有设计,以为那就是敏捷。

其实他们工作的背后有很成熟稳定的工具和基础设施来保障团队的高速运作。我在和许多公司培训做交流时,就告诉他们做敏捷测试的第一步就是不要敏捷,先一步步把自动化做好,把持续集成做起来,创建更多的测试工具来提高测试效率,同时也要把质量反馈系统做起来,把dev提交代码前的质量检查做起来,把在产品中测试做起来,把测试工程师的素质提高上去……,等到这些都建立起来后,你会发现自己已经很敏捷。

CSDN:随着云计算发展,你认为软件测试工程师如何适应时代的发展?未来软件测试路在何方?

Bill Liu:云计算的快速发展,不仅给软件测试工程师带来新机会,同时也带来许多挑战。要想适应云计算所带来的挑战,软件测试工程师必须不断学习和了解云计算关键技术特点,才能在云计算应用测试中使用更加有效的测试技术和手段,才能提高团队工作效率,才能用最有效的手段提高软件质量。比如在传统测试中为了找到bug的原因,我们经常会在测试环境下重现bug或者使用调试器现场调试,这种调试和诊断策略在云计算应用中很难实现,因为云计算应用的真实运行环境很难复制,也无法安装使用调试器。所以开发和测试必须使用其它策略来实现现场调试和诊断。再比如,云计算的应用各个模块通常使用异步通信松耦合架构,这使得功能测试单个模块成为可能而且比较容易。测试团队可以考虑重点测试单个模块以保证单个模块的高质量,然后优化系统集成测试。另外随着云计算的普及和成熟,云计算技也可以更好地服务于软件测试。比如我们花很多时间来搭建和维护测试环境,而使用云计算的产品和技术,我们可以把测试环境移到云里,利用云计算弹性伸缩、按需使用和按使用量付费的特点,甚至可以直接使用第三方更为成熟稳定的云测试环境,从而极大提高团队工作效率的同时,也为企业节省大量研发成本。

未来的软件测试必然向系统化、自动化和用户化方向发展。系统化是指软件测试是个系统工程,它在软件整个生命周期中每个阶段,多种测试手段、测试技术、质量衡量等互相结合使用的综合过程。自动化是指软件测试需要自动化,需要指出的是测试自动化不是万能的,但是没有测试自动化却是万万不能。测试工程师需要从反复,繁琐和易错的测试执行中解脱出来,从而专注于对测试的思考、设计和提高。用户化是指把软件测试延伸到用户使用环境中,让用户也参与到软件测试中,因为用户才是软件质量的最终评判者。测试一方面和开发间的界线越来越模糊,另一方面又保持特有的思维方式和技能,未来的软件测试将会和开发、产品经理以及整个团队共同努力创建高质量的软件产品。

写在最后

记者在和Bill Liu的交流中发现,他具有非常高的技术分享意识。在最近的两年时间里,Bill Liu一直专注于中美技术交流活动,经常回国参加国内的软件和测试会议,经常和国内的企业做技术交流以及提供培训和咨询。

Bill Liu对记者称,他愿化身中美技术交流的沟通之桥,希望为中美两国在软件测试或云计算技术的交流中出一份力,把美国一流公司的软件测试理念、方法和实践带回国内,让国内的软件公司在交流中以借鉴和启发。

此外,Bill Liu还对记者表示,他目前也在带动一些在国外工作的其他优秀工程师回国做技术交流,借此希望能给羸弱的中国软件业带来些新气象,同时他也在挖掘和组织国内特别优秀的工程师和好的企业技术案例介绍到国外的技术会议中,让中国的软件技术不仅引进来而且也走出去。