什么是敏捷软件开发
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系、但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
敏捷开发和传统开发(比如瀑布模型)有何区别
敏捷开发的核心是迭代开发(iterative development),敏捷一定是采用迭代开发的方式。
对于大型软件项目,传统的开发方式是采用一个大周期(比如一年)进行开发,整个过程就是一次”大开发”;迭代开发的方式则不一样,它将开发过程拆分成多个小周期,即一次”大开发”变成多次”小开发”,每次小开发都是同样的流程,所以看上去就好像重复在做同样的步骤。
| 传统开发(瀑布等) | 敏捷开发 | |
|---|---|---|
| 开发周期 | 一个大周期,一次”大开发” | 拆分成多个小周期,多次”小开发” |
| 需求变化 | 前期确定,难以变更 | 拥抱变化,随时调整方向 |
| 交付 | 到末期才能见到成果 | 持续交付可用的软件 |
敏捷开发的好处
早期交付
敏捷开发的第一个好处,就是早期交付,从而大大降低成本。
降低风险
敏捷开发的第二个好处是,及时了解市场需求,降低产品不适用的风险。
由于敏捷开发可以不断试错,找出对业务最重要的功能,然后通过迭代,调整软件方向。相比传统方式,大大增加了产品成功的可能性。如果市场需求不确定,或者你对该领域不熟悉,那么敏捷开发几乎是唯一可行的应对方式。
敏捷软件开发的流程
整体上,敏捷软件开发从需求(用户故事)出发,经由迭代计划进入小周期开发,每个迭代都产出经过测试、可运行的软件增量,并通过评审与反馈驱动下一轮迭代:
flowchart LR
A[需求 / 用户故事] --> B[迭代计划]
B --> C[迭代开发:设计 / 编码 / 测试]
C --> D[可运行的软件增量]
D --> E[评审与反馈]
E -->|调整方向| A
E -->|进入下一个迭代| B
敏捷软件开发的原则
Robert 大叔的《敏捷软件开发》大体上给出了 12 个原则:
- 我们最优先要做的是通过尽早地、持续地交付有价值的软件来使客户满意。交付得越频繁,最终产品的质量越高
- 我们欢迎需求的变化,即使到了开发后期,敏捷过程依然能够驾驭变化,为客户创造竞争优势
- 经常交付可以工作的软件,从几个星期到几个月,时间间隔越短越好
- 在整个项目开发期间,业务人员和开发人员必须朝夕相处在一起
- 围绕斗志高昂的人构建项目
- 在团队内部,最有效率也最有效果的信息传达方式,就是面对面的交谈
- 可以工作的软件是进度主要的度量标准
- 敏捷过程提倡可持续开发。出资人、开发者和用户应该总是保持稳定的开发速度
- 对卓越技术和良好设计的不断追求有助于提高敏捷性
- 简单——尽可能减少工作量的艺术是至关重要的
- 最好的架构、需求和设计都源自自我组织的团队
- 每隔一段时间,团队都要总结如何更有效率,然后相应地调整自己的行为
敏捷软件开发常见方式
通过相关报告(大概是 2016 年左右)大致上可以看到敏捷在整个开发方式中的趋势:敏捷中 Scrum 独占鳌头。
常见的敏捷开发方式如下:
- 敏捷开发 - 面向工程管理:极限编程(XP):极限编程(Extreme Programming,简称 XP)是由 Kent Beck 在 1996 年提出的,是一种软件工程方法学,是敏捷软件开发中可能是最富有成效的几种方法学之一。详见极限编程(XP)
- 敏捷开发 - 面向过程管理:Scrum 方式:Scrum 是迭代式增量软件开发过程,是敏捷方法论中的重要框架之一,通常用于敏捷软件开发。详见Scrum 方式
- 敏捷开发 - 面向过程管理:Kanban 方式:看板源于丰田的精益制造实践,核心是 JIT。详见Kanban 方式
- 敏捷开发 - 开发实践:TDD / DDD:测试驱动开发与领域驱动设计。详见 TDD、DDD
参考文章
- 《敏捷软件开发》
- https://www.mindk.com/blog/iterative-development/
- https://baike.baidu.com/item/%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91/5618867
- https://www.ruanyifeng.com/blog/2019/03/agile-development.html
- <https://www.scrumalliance.org/ScrumRedesignDEVSite/media/ScrumAllianceMedia/Files%20and%20PD Fs/State%20of%20Scrum/State0fScrum_2016_FINAL.pdf?aliId=261272923>