隔离技术让Windows Azure足够安全

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

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

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

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

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

  软件测试工程师修炼之道

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

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

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

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

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

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

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

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

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

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