3.1.1 从瀑布模型到敏捷开发
瀑布模型和敏捷开发是具有代表性的开发流程。本节将通过对比这两种开发流程,阐述为什么我们选择敏捷软件开发方式。
1.瀑布模型
瀑布模型是经典的软件开发流程标准,最早应用于制造业、建筑业等传统工业领域,用于实现如客户关系管理系统(Customer Relationship Management,CRM)、企业资源计划系统(Enterprise Resource Planning,ERP)、办公自动化(Office Automation,OA)等。瀑布模型将软件开发生命周期按照先后顺序分为需求分析、系统设计、开发实现、测试与集成、发布与部署、运营与维护六个阶段,并要求各个阶段必须顺序执行,每个阶段必须有明确的产出。另外,每个阶段只能执行一次,且只能发生在上一个阶段被执行之后。瀑布模型是典型的计划驱动流程,要求在项目初期收集尽可能多的需求,并预先制订计划,分配资源。简而言之,瀑布模型有着详细的计划、明确的需求边界与清晰的团队分工。
2.敏捷开发
敏捷开发旨在帮助团队更快地交付客户的需求。敏捷开发要求软件开发过程是迭代的、渐进的。每个迭代周期通常是1~4周。迭代开始阶段会与产品团队确认需求,从而确定迭代目标。迭代结束时需要有一个可用的版本,并向产品团队展示。此外,敏捷开发也会引入代码重构、设计模式、结对编程、测试驱动开发、持续集成等多种实践来提升产品的质量。敏捷开发的流程如图3-1所示。
图3-1
敏捷开发与传统的瀑布模型相比,有着诸多的优点,具体如下。
● 敏捷开发是一种迭代式的开发方式,开发周期短,迭代快,拥抱变化;瀑布模型是一种顺序的开发方式,开发周期固定。
● 敏捷开发的需求收集和分析是迭代式的,与客户的沟通是持续的;瀑布模型的需求分析是一次性的、无反馈的。
● 敏捷开发的测试可以和开发并行甚至先于开发而发生;瀑布模型的测试只能发生在开发完成后。
● 敏捷开发只需要必要的文档;瀑布模型对文档有着严格的要求。
遵循敏捷开发指引(从软件开发到部署再到组织体系)的很多企业取得了实际的效果。但随着企业规模与业务复杂性的不断增长,这些敏捷先驱企业或多或少地面临了单体应用带来的缺乏稳定性、缺乏弹性收缩能力的问题。Amazon、Netflix、SoundCloud正是在发展到一定规模时遇到了架构上的瓶颈,因而最终拥抱了微服务。微服务也正逐渐成为敏捷进程中构建敏捷架构的重要手段。
微服务架构有着服务组件化、去中心化治理、设计演进化的特点。采用基于Scrum的敏捷开发流程,一方面满足了快速迭代的需求,另一方面解决了服务自治带来的团队自治问题,从而能够应对微服务的诸多挑战。