本节我们先大致了解一下近几年在软件产品行业中出现的重要概念——DevOps、微服务架构和自动化测试。三者都是目前软件开发中的最佳实践方法论,旨在提升项目或产品的交付效率和交付质量,并最终提升产品竞争力。
(1)DevOps
DevOps(Development & Operations,开发和运营维护)是一套实践方法论,提倡打破原有组织和限制,目前职能团队已经开始接受DevOps所倡导的高度协同,研发、测试、运维及交付一体化的思维。随着DevOps和敏捷热度的不断提升,无论是互联网企业还是传统软件企业都开始拥抱敏捷,实践DevOps。持续集成、持续交付(Continuous Delivery,CD)作为DevOps的最佳实践,越来越受到重视。图1-2所示为DevOps的流程。
图1-2 DevOps的流程
(2)微服务架构
微服务架构(Microservice Architecture)起源于DevOps的意识形态和工程实践,采用的是软件架构风格。使用微服务架构有一系列好处,例如能够简化可部署性、提高可靠性和可用性等。虽然原则上可以使用任何架构来实践DevOps,但微服务架构正在成为构建持续部署(Continuous Deployment,CD)系统的标准架构风格。使用微服务架构的项目,会将需求拆分成微小的服务去逐一实现。由于每项服务的规模都很小,因此微服务架构允许通过连续重构来实现单个服务的功能模块,从而降低对大型项目前期设计的需求,实现尽早发布软件并且持续交付。微服务和DevOps是天然的共同体,两者共同推进软件开发行业的变革。
微服务架构在解决了应用大小、应用开发规模等方面存在的问题之后也带来了一些新的问题,比较突出的有微服务数量增多、服务间调用关系复杂等。复杂的关系导致即使是项目资深开发人员也很难全面梳理出所有服务之间的关系。
微服务和传统的单体应用相比,在测试策略上会有一些不太相同的地方。简单来说,在微服务架构中,测试的层次变得更多,需要测试的服务和应用也呈指数级增长。手动执行所有的测试是低效的,无法满足互联网快速迭代的要求。这时必须引入自动化测试来减轻测试团队的压力,提高测试效率和测试质量。
(3)自动化测试
随着敏捷和微服务架构的引入,持续集成和持续交付成为构建和部署的标准,即使在没有采用微服务架构的项目中也是如此。为了保证已定义的流程和事务按照预期进行,测试必不可少。而在应对现代软件产品频繁的更新和发布上,传统的手动测试方式在人员和效率上都存在严重不足,因此自动化测试已经成为现代软件研发过程中一个关键的组成部分。自动化测试是打通持续集成和持续交付的核心环节,没有有效的自动化测试作为保障,持续集成和持续交付就变成“没有灵魂的躯壳”。