写点什么

云时代下的测试过程和技术

  • 2013-08-07
  • 本文字数:2176 字

    阅读完需:约 7 分钟

越来越多的公司把应用和产品部署到云平台上,而测试是软件开发生命周期的一个不可或缺的部分。云技术所提供的弹性和资源自动配置可以改进测试过程,与此同时,云计算的复杂性也对测试提出了挑战,资深技术专家 John Rhoton表达了自己对云平台下测试思想和技术改进的看法。

对于集成测试,John 认为在云中运行很有吸引力:

对于复杂的应用程序,在本地运行所有测试可能变成一项单调乏味且耗时的任务。在云中部署应用程序并进行测试可节省大量时间和本地开发资源。随着测试范围的增加,SDK 与 PaaS 供应商提供的实际云计算环境之间的区别会变得更加明显。具体来讲,如果应用程序拥有复杂的工作流,那么本地测试仅能覆盖实际工作流和数据的一小部分。

云计算的另一个优势是将创新应用到用户的速度。在高度集成的持续部署环境中,只需不到一天,一个特性或修复程序就能执行软件开发生命周期 中的所有步骤。因此,可以快速且频繁地部署新的生产版本,甚至一天可部署多次。

持续集成 (CI) 执行一个连续应用质量控制的过程,从而频繁应用各个较小的工作部分。持续集成旨在完成所有开发后替换应用质量控制的传统实践,从而帮助提高软件质量,缩短交付软件所需的时间。

如果是自动化的,定期(夜间)构建版本的实现并不困难。一个简单的命令应该就能构建系统;举例而言,make 等构建工具已存在多年。其他最新的工具,比如 Apache Ant、Apache Maven、MSBuild 或 IBM Rational Build Forge 常常用在 CI 环境中。自动化的构建应包含部署到一个类似生产的环境中。

在许多情况下,构建脚本不仅编译二进制文件,还会生成文档、网页、统计信息和分发媒体。理想情况下,构建至少还会自行执行部分测试。 用于 CI、测试和发布的流行工具使开发人员能更轻松地将更改集成到项目中,用户能更轻松地获得最新的构建版本。这些工具包括 CruiseControl 和 Hudson,以及 IBM Rational Team Concert 和 Microsoft Team Foundation Server 等商用工具。

John 指出,试机(staging)是一个更加高级的测试阶段,通常在一个与生产环境非常相似的环境中运行。试机不仅对所有功能执行测试,还执行负载测试;此过程应让客户了解,以便在最终产品发布之前获得他们的认可。应用程序变得更加复杂时,常常有必要引入多个试机和测试级别。一些任务关键型环境拥有多达 7 个不同的环境,涵盖从开发到生产的整个过程。每个环境离实际的生产环境更近一步。

云计算有可能大大加快这一趋势。由于可以按需触发实例,所以拥有多个不同的变体来并行测试多个选项的成本很低。如果需要将一个有效系统回滚到以前的版本,云可能也很有用。云中的试机包括使用一个代表性的数据集运行应用程序代码。试机应用程序的实际技术将依赖于所使用的平台。对于构建于基础架构服务之上的自定义平台,比如 Amazon Elastic Compute Cloud (Amazon EC2)、Rackspace 或 GoGrid,开发人员可确定整个试机操作。这非常简单,只需使用生产环境的一个复制实例,并使用不同的域名运行即可。

他举了两个云平台的例子:

  • 在类似 Google App Engine 这样的环境中,此过程包括以主要生产应用程序 ID 下的不同版本来运行应用程序。该工作流将处理位于生产数据存储区中的数据集。因此,如果旧生产环境与新的应用程序试机版本之间存在不同的数据表示形式,则有必要处理与这些表示形式相关的任何潜在的数据存储模式问题。
  • Windows Azure 为应用程序提供了一个独立的试机环境。Azure Service Management Portal 提供了两个环境,一个用于生产环境,一个用于试机环境,而且除了用于调用的 URL 外,这两个环境基本上相同。因此,可以全面测试试机环境,直到确信该环境已准备好部署到生产环境,且不会影响生产环境。

生产环境部署是软件开发生命周期的最后一个阶段。部署必须能够扩展以满足整个用户群的需求,而且应做到基本上没有错误,因为支持可能需要很高的成本。执行平台通常包含一组运行时环境(比如 Java Virtual Machine、Python 或 PHP)和编程语言。该平台可能还提供了一组库函数、数据存储工具和集成机制(比如排队系统),用于与其他内部和外部的模块通信。John 认为发行期间要考虑的两个主要因素是:

  • 部署是否已成功完成。假设在试机阶段对软件执行了广泛的测试,那么主要目标就是确保部署过程本身会保持服务的完整性。因此,在部署用户可见的主要服务之前,一定要使用非关键型服务来测试复制并公开软件的流程。
  • 在过渡期间尽可能减少服务中断。关心的是应用程序在上线期间的宕机。在一些云环境(比如 Google 或 Azure)中,只要对部署进行了良好规划,就可以实现零宕机时间和无生产中断的部署。在其他情况下,部署的规模应尽可能小,以最大限度减少生产中断的任何可能性。

John 举例说,一些云 SDK 提供了很好的工具来自动化部署。这些工具的优势是消除了部署不完整的风险,而且也可加速部署流程,进而最大限度减少宕机时间。例如,Google App Engine 的 SDK 中有一个部署工具,可用于使用一个不同的应用程序 ID 或版本将应用程序从 SDK 迁移到一个测试环境,或者使用应用程序的不同版本迁移到试机和生产环境。使用 Azure,只需要请求一次本地升级,或者使用服务控制台交换试机和生产插槽的虚拟 IP 地址。类似地,对于基础架构服务,通常只需更新域名系统条目,以在新部署的服务准备好时指向它。

InfoQ 的读者对云计算时代下测试技术的改进有何实践经验,欢迎发表自己的看法。

2013-08-07 10:261940
用户头像

发布了 501 篇内容, 共 259.4 次阅读, 收获喜欢 61 次。

关注

评论

发布
暂无评论
发现更多内容

Java | 数组工具类Arrays、数学工具类Math

陌上

编程 Java、 10月月更

强烈推荐!商业洞察就用这个工具

产品海豚湾

产品经理 产品设计 产品运营 商业化 10月月更

MyBatis之识别器

Andy

EMQ助力构建工业生产数字孪生基础架构|智慧工厂系列专题03

EMQ映云科技

物联网 IoT 工业互联网 数字孪生 10月月更

投资成本低且无需专人维护!华为云会议让沟通更高效

秃头也爱科技

企业业务沟通新选择,华为云会议支持全场景智能协作

秃头也爱科技

MyBatis初步理解

Andy

安全架构师的运营一二事

I

运营 安全架构 企业安全 安全运营

MyBatis之缓存机制和动态SQL

Andy

深入浅出Python——Python高级语法之文件操作

何极光

Python 文件操作 10月月更

SQL的基本介绍

芯动大师

Python 数据库SQL 10月月更

Java | 继承

陌上

Java 编程 10月月更

开发者新手指南:进入 Web3 前,你需要掌握哪些必备技能?

TinTinLand

区块链 程序员 开发者 编程语言 招聘

深入浅出Python——Python高级语法之异常、模块、包

何极光

Python 异常 模块 10月月更

MySQL向表中添加列

okokabcd

MySQL

袋鼠云平台代码规范化编译部署的提效性改进实践

袋鼠云数栈

MyBatis之Annotation

Andy

一文读懂:开源大数据调度系统Taier1.2版本新增的「工作流」到底是什么?

袋鼠云数栈

MyBatis面试题(部分)

Andy

Spring整合MyBatis

Andy

SpringMVC之文件上传

Andy

Java | 面向对象(二)

陌上

编程 Java、 10月月更

SpringMVC 基础

Andy

SpringMVC之拦截器

Andy

华为云桌面——云端上“最卷的云”

秃头也爱科技

深入浅出Python——Python高级语法之面向对象

何极光

Python 面向对象 10月月更

MyBatis之关系映射(上)

Andy

赴一场开源盛会丨10月29日 COSCon'22 开源年会杭州分会场,这里只差一个「你」!

袋鼠云数栈

MyBatis程序基础实现

Andy

MyBatis之关系映射(下)

Andy

深耕稳定安全会议服务,华为云会议具备会议全球接入能力

秃头也爱科技

云时代下的测试过程和技术_服务革新_崔康_InfoQ精选文章