代码改变世界

基于云计算的软件测试服务

2010-05-24 20:07  liangshi  阅读(3078)  评论(0编辑  收藏  举报

James A. Whittaker在《探索式软件测试》中展望了“软件测试的未来”,其中提到了基于云计算的软件测试服务。受大师的启发,我也斗胆展望一下云计算在软件测试领域的应用(简称“云测试”)。本文的许多想法只是推测或遐想,未经深思熟虑和广泛调研,想必包含许多错误,权当是抛砖引玉吧。

在走上“云”之前,先审视一下本地(local)测试环境的现状。

  • 硬件快速发展,性价比持续升高目前,高端的移动CPU已经支持4个内核(8个硬线程)、8M二级缓存,其配置与若干年前的工作站无异。再过一两年,主流的笔记本电脑都将具备此等计算能力,这意味着任何一个开发者都可以拥有真正的“移动工作站”。企业也可以用至强等“廉价”硬件,用相对小的花费,搭建测试实验室。
  • 虚拟化技术日趋成熟。利用现有的操作系统虚拟化技术,可以在一台物理主机上构建出多台虚拟机。而且,Intel和AMD加强了x86 CPU对虚拟化的支持,使得虚拟化软件更加高效,虚拟机的性能有了很大的提高。
  • 虚拟化管理快速发展。主流的虚拟化软件开发商都提供了完整的虚拟机管理软件,能够在一个界面中管理虚拟机及其宿主物理机。构建一个由虚拟机的组成的测试环境非常方便,而且维护代价相对物理机要低很多。
  • 测试工具将内建虚拟化。Microsoft Visual Studio 2010所提供的Test Manager就是一个基于虚拟机的测试管理、运行、诊断工具。测试人员定指定拓扑结构后,它能够生成由虚拟机组成的测试环境。测试人员在该环境中执行测试用例,它可以记录执行的轨迹(注册表访问、系统日志访问、屏幕录像等),为进一步的诊断提供线索。
  • 许多测试将依赖于模拟器。随着iPhone、iPad等移动设备的爆发式流行,许多开发者已经将注意力投向移动平台。他们一般使用厂家提供的模拟器来开发、测试、调试软件。对于他们,模拟器就是整个测试环境。

可见,随着硬件和虚拟化技术的发展,测试人员利用本地的计算能力很容易构建出强大的测试环境。对于个体开发者和小型企业,笔记本电脑的计算能力可能已经足够;对于具备一定规模的企业,小型机房就能提上百台不同软硬件配置的虚拟机和不同网络拓扑的测试环境。

那么,本地测试有什么困难,使得云计算可以一展身手呢?

  • 软件价格昂贵。Microsoft Test Manager使用虚拟机搭建测试环境,每台虚拟机需要单独的许可证;Test Manager是客户端-服务器架构,服务器要许可证,每个客户端也要许可证。不只是Microsoft,其他的商业测试软件也是如此(例如,商业性能测试工具根据虚拟用户数收取费用),这些都是不菲的开销。目前,软件开发者的困境是购买了昂贵的软件,却使用寥寥,待两三年后新版本上市,又要破费升级。利用云计算技术,可以将先期的高额投入,分摊到多个测试用户上,降低使用门槛。例如,公共云可以利用虚拟桌面将测试环境提供给企业或个人,私有云可以实现公司内多个团队的测试平台共享。
  • 难以获得超大规模的计算能力。在某些情况下,需要模拟出上百万个虚拟用户以进行性能和压力测试。对于小型企业或个人,他们的硬件难以提供如此规模的计算能力。此时,他们可以租用云测试服务,以获得强大的运算能力。
  • 许多应用基于云计算,利用云计算来进行测试顺理成章。当前,许多开发者将其应用部署在Windows Azure、Google App Engine等云计算平台上,一些端到端的功能测试、性能测试、容量测试也可以在“云”上完成。例如,微软可以考虑提供Windows Azure应用的性能测试服务。它接受开发者提供测试用例(用MSTest、NUnit等指定测试框架编写)和测试参数(如虚拟用户数、带宽设置、浏览器设置等),在云上运行测试,并返回详细的测试报告。测试报告除了包括常见的性能指标,还可以提供Windows Azure的特有信息,例如:“您现在租用的计算能力最多支持1000个并发用户,根据最近三个月的服务日志,您的并发用户数将在一个月后超过1000人,建议您提高计算能力至XX,以满足业务发展的需要”。
  • 运行环境配置复杂。大部分软件受到运行环境的影响。以一个需要访问互联网的应用程序为例,它能否正常运行受到以下因素影响:防火墙配置、本地网络配置、企业防火墙配置、本地安全性设置、注册表设置、UAC配置、同时运行的其他的应用程序等。参数的组合呈现爆炸性增长。即便有虚拟化软件辅助,在短时间内也难以完成相应的配置测试。云测试服务商可以预先构建好大量配置各异的虚拟测试环境,提供详细的配置说明,推荐给测试人员。测试人员可以选择少数典型的测试环境,自行实施配置测试,也可以将测试用例提交给云,让测试并发地运行在大量的测试环境中,以在短时间内获得大量的测试反馈。
  • 缺乏测试积累。许多软件缺乏测试用例,在模糊测试(Fuzzy Testing)、安全性测试等需要专家经验的领域尤其如此。云测试服务商可以预先准备海量的测试用例以租用给测试人员。例如,它可以为Office兼容性测试提供大量的Office文档:包含大量格式、图片和宏的真实文档(抹去用户信息)、包含攻击指令的恶意文档、包含特殊符号与格式“极限”文档(旨在考察排版引擎的健壮性)等。相比提供虚拟化的测试环境,此类服务专注于特定的测试领域,提供了稀缺的专业技能,附加值更高。

归纳以上几点可知,云测试的最大优势在于立即可用、装配完备和专家服务。

  • 立即可用。云测试提供一整套测试环境,测试人员利用虚拟桌面等手段登录到该测试环境,就可以立即展开测试。这将软硬件安装、环境配置、环境维护的代价转移给云测试提供者(公共云的经营者或私有云的维护团队)。以现在的虚拟化技术,在测试人员指定硬件配置、软件栈(操作系统、中间件、工具软件)、网络拓扑后,创建一套新的测试环境只要数2~4个小时。如果测试人员可以接受已创建好的标准测试环境,那么他可以立即登录。
  • 装配完备。云测试不但可以提供完整的测试环境,还可以提供许多附加服务。对于测试机,它可以提供还原点,以便测试人员将虚拟机重置到指定状态。对于测试执行,它可以监控被测试程序程序的一举一动,例如注册表访问、硬盘文件读写、网络访问、系统日志写入、系统资源占用率、内存映像序列化、屏幕录像等。将这些信息与测试用例一起展现出来,可以帮助测试人员发现问题,定位错误。对于大规模的测试,云测试可以提供多台测试客户机,他们从主控机上下载测试用例,执行并汇报测试结果,主控机将结果汇总后报告给测试人员。实际上,这些功能已经被各种工具所实现,云测试平台的任务是整合它们,提供统一、完备的功能。这样,测试人员就可以将精力最大限度地投入到专属的测试领域中,而不是与各种工具搏斗。
  • 专家服务。最高级的测试服务是提供专业知识的服务。这些知识可以通过测试用例、测试数据、自动测试服务等形式提供。例如,许多应用需要读取文件,云测试可以提供针对文件读取的模糊测试。测试人员将被测试的应用程序提交给云,云将其部署到多台测试机上。在每一台测试上,应用程序要读取海量的文件,每一个文件都是特意构造的攻击文件。一旦栈溢出、堆溢出等问题被发现,立即保存应用程序的内存映像。一段时间后,测试人员将获得云测试返回的测试结果:一份详细的分析报告和一大堆内存映像文件。

以当前的技术发展水平,云测试会在以下两个方面率先展开。

  • 提供测试环境。云测试提供彼此独立的测试环境,测试人员登录之后,运行自己的测试用例。这种服务对平台的要求较低,相关技术也已经成熟。
  • 提供测试运行服务。测试人员编写好测试之后,将其提交给云测试平台,云测试平运行测试并返回测试结果。例如,测试人员编写了一组Load Runner测试,他将该组测试与测试用例执行概率、虚拟用户数、网络连接配置等性能测试参数提交给云测试平台。云测试平台将测试部署到多台测试代理(Test Agent)上执行,最后生成性能测试报告。此类服务仍旧基于现有的成熟技术,虽然要集成多种工具,但实现难度不大。

目前,云测试还处于起步阶段,相比廉价硬件+虚拟化的本地测试环境还没有明显的优势。随着云计算服务的发展,云测试也会快速演进。Google Chrome OS提供Web API将绝大多数应用置于云端,那么将一部分测试用例部署在云上也是自然的选择。

最后提供一些云测试服务提供商的链接。