为了让测包掌握未来的测试必须打破两个关键的技术壁垒:测试中产生的人工产品的重用性以及用户环境的可达性。让我解释一下这两个概念。      重用性:得益于20世纪90年代面向对象及其衍生技术的普及,软件开发所产生的人工产品实现了重用。我们开发的大部分软件都是由预先写好的库拼接在一起所构成的一个整体。不幸的是,测试还没有这样做。写一个测试用例并简单的传递给另外一名测试人员让他重用,这样的想法在实践中很罕见。测试用例过于依赖测试平台:他们是特定于某个待测的应用程序的;他们依赖于一些其他测试人员没有的工具;他们需要一个自动化测试架构、软件库以及网络配置等,而这些东西很难被潜在的重用用户所复制。

  用户环境:全面测试需要针对不同的用户环境,这些用户环境的数量让人生畏。假设我编写了一个应用程序打算让它在各种各样的手机上运行。我可以从哪里得到这些电话来测试自己的应用程序呢?我如何配置这些手机,才能把它们看作是自己心目中客户所拥有的手机呢?其他类型的应用程序也会遇到同样的情况。如果我写了一个web应用程序,我如何才能把这些不同的因素考虑进去:操作系统、浏览器、浏览器设置、插件、注册表配置、安全设置、机器设定和存在潜在冲突的应用程序类型?

  对于这两个问题,目前浮现的答案是虚拟化技术,它正在有条不紊地变得更便宜、速度更快、功能更强大,它正在被应用于从实验室管理到IT基础设施部署的整个应用领域当中。

  虚拟化具有很大的潜力,使“众包者“能够提供众包服务。专业的测试套件、测试平台和测试工具都可以被一键化到虚拟机中,供任何人在任何地方使用。正如的软件开发人员人员能够重用同事和前辈们的代码一样,众包者中的测试人员也可以通过这种方式,来重用测试套件和测试工具。重用让一个给定的开发人员能够可靠地扩展应用程序的范围,同样地,它也会增加一个应用程序测试人员可以测试的类型。虚拟化使得重用复杂精密的测试框架能够在将来成为可能。

  对于用户环境的数量问题,虚拟化同样帮了测试人员的大忙。用户只需一键可以将他们的整个计算机传到虚拟机,并通过云端计算提供给测试人员。如果我们能够存储世界上所有的影片,给任何人在任何地方即时查看,我们为什么不能对虚拟用户环境做同样的事呢?虚拟化技术已经存在(对于个人电脑而言),或者是近乎存在(对于移动设备或是其他特殊设定的用户环境而言)。我们只需要简单地将它应用到测试问题。

  终这样做的结果是,任何测试人员,在任何地点,都可以广泛利用一个多样化的、可重用的自动化测试平台和用户环境。这样有助于众包者更好地提供服务,并从技术角度来看,他们甚至可以和有特殊才能的外包者媲美,由于他们的人数远远超过外包者(至少在理论上,如果不是在实践中的话),这种新模式的优势显而易见。

  市场也青睐那些得到虚拟技术支持的众包模式。用户环境将具有经济价值,众包测试人员人员为了获得竞争优势会对这些用户环境垂涎三尺。他们会激励用户点击那些一键化按钮来虚拟并共享用户自己的环境(是的,这一模式会受到隐私问题的影响,但是那些问题都是可以解决的)。由于存在问题的环境比那些工作良好的环境更有价值,假设遇到停工的驱动器和应用程序错误,此时,用户的态度将会完全颠倒过来:因为这意味着他们创造的虚拟测试更具有金钱价值……在那些错误中有黄金!同样地,人们激励测试人员共享他们的测试宝藏,并使他们尽可能的被重用。市场力量的作用使得未来将是可重用测试产品的天下,而虚拟化使得这一未来成为可能。

  那么,这个有着虚拟化技术支持的未来对测试人员本身意味着什么呢?嗯,让我们快进20~30年(或更长的时间,如果你对此表示怀疑),在那个时候将会有以百万(或更多?)计的用户环境被收集、克隆、存储并共享。我能想象这些环境像公共图书馆一样可以让测试人员可以免费浏览,或者像私人图书馆似的进行订阅。测试用例和测试套件可以如法炮制,视其价值和可用性进行收费。

  也许,随之未来的时代将只有很少的人类测试人员,只有少数的东西和特质的产品(或者是像操作系统一样的极端复杂性的产品)需要他们进行干预。对于大多数的开发者来讲,可以雇佣一名测试设计者从海量的可用虚拟测试环境中挑出所需要的,然后并执行他们:由于所有的自动化和终用户配置已经设好并随时可用,以百万人年计的测试将在几个小时内结束。这是测包的世界。

  这是我们目前所知道的,软件测试的后结局,但对于从事测试工作的人员来说,要对付其他有趣的挑战和问题,这只是一个全新的开端。这样的将来是能够实现的,它并不需要除了虚拟化之外的以外的东西,其他所需要的那些技术要么已经存在,要么已经呼之欲出。这也意味着,随着我们转变成了设计人员(也是执行测试),或者担任开发人员的角色(也是编写和维护可重用性产品),测试人员需要付出更加倍的努力。我们不要成为在软件开发晚期的“英雄”,测试人员在虚拟化的未来世界中,应该是一等公民。