CHARLIE SAYS

查理如是说
DATE 2026-08-24
THEME
SERIES / ENGINEERING / P-130 · 软件工程方法论

软件工程 010:敏捷软件开发理论及流程

什么是敏捷软件开发

敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系、但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

敏捷开发和传统开发(比如瀑布模型)有何区别

敏捷开发的核心是迭代开发(iterative development),敏捷一定是采用迭代开发的方式。

对于大型软件项目,传统的开发方式是采用一个大周期(比如一年)进行开发,整个过程就是一次”大开发”;迭代开发的方式则不一样,它将开发过程拆分成多个小周期,即一次”大开发”变成多次”小开发”,每次小开发都是同样的流程,所以看上去就好像重复在做同样的步骤。

传统开发(瀑布等)敏捷开发
开发周期一个大周期,一次”大开发”拆分成多个小周期,多次”小开发”
需求变化前期确定,难以变更拥抱变化,随时调整方向
交付到末期才能见到成果持续交付可用的软件

敏捷开发的好处

早期交付

敏捷开发的第一个好处,就是早期交付,从而大大降低成本。

降低风险

敏捷开发的第二个好处是,及时了解市场需求,降低产品不适用的风险。

由于敏捷开发可以不断试错,找出对业务最重要的功能,然后通过迭代,调整软件方向。相比传统方式,大大增加了产品成功的可能性。如果市场需求不确定,或者你对该领域不熟悉,那么敏捷开发几乎是唯一可行的应对方式。

敏捷软件开发的流程

整体上,敏捷软件开发从需求(用户故事)出发,经由迭代计划进入小周期开发,每个迭代都产出经过测试、可运行的软件增量,并通过评审与反馈驱动下一轮迭代:

flowchart LR
    A[需求 / 用户故事] --> B[迭代计划]
    B --> C[迭代开发:设计 / 编码 / 测试]
    C --> D[可运行的软件增量]
    D --> E[评审与反馈]
    E -->|调整方向| A
    E -->|进入下一个迭代| B

敏捷软件开发的原则

Robert 大叔的《敏捷软件开发》大体上给出了 12 个原则:

  1. 我们最优先要做的是通过尽早地、持续地交付有价值的软件来使客户满意。交付得越频繁,最终产品的质量越高
  2. 我们欢迎需求的变化,即使到了开发后期,敏捷过程依然能够驾驭变化,为客户创造竞争优势
  3. 经常交付可以工作的软件,从几个星期到几个月,时间间隔越短越好
  4. 在整个项目开发期间,业务人员和开发人员必须朝夕相处在一起
  5. 围绕斗志高昂的人构建项目
  6. 在团队内部,最有效率也最有效果的信息传达方式,就是面对面的交谈
  7. 可以工作的软件是进度主要的度量标准
  8. 敏捷过程提倡可持续开发。出资人、开发者和用户应该总是保持稳定的开发速度
  9. 对卓越技术和良好设计的不断追求有助于提高敏捷性
  10. 简单——尽可能减少工作量的艺术是至关重要的
  11. 最好的架构、需求和设计都源自自我组织的团队
  12. 每隔一段时间,团队都要总结如何更有效率,然后相应地调整自己的行为

敏捷软件开发常见方式

通过相关报告(大概是 2016 年左右)大致上可以看到敏捷在整个开发方式中的趋势:敏捷中 Scrum 独占鳌头。

常见的敏捷开发方式如下:

  • 敏捷开发 - 面向工程管理:极限编程(XP):极限编程(Extreme Programming,简称 XP)是由 Kent Beck 在 1996 年提出的,是一种软件工程方法学,是敏捷软件开发中可能是最富有成效的几种方法学之一。详见极限编程(XP)
  • 敏捷开发 - 面向过程管理:Scrum 方式:Scrum 是迭代式增量软件开发过程,是敏捷方法论中的重要框架之一,通常用于敏捷软件开发。详见Scrum 方式
  • 敏捷开发 - 面向过程管理:Kanban 方式:看板源于丰田的精益制造实践,核心是 JIT。详见Kanban 方式
  • 敏捷开发 - 开发实践:TDD / DDD:测试驱动开发与领域驱动设计。详见 TDDDDD

参考文章

系列导航

← 设计模式 010:桥接(Bridge) 目录 Java 基础 010:去除多余的if else →
← 返回文章列表