敏捷
为什么软件开发需要敏捷
软件开发具有四个本质特征:
| 特征 | 含义 |
|---|---|
| 复杂性 | 需求、技术、人员、环境相互影响 |
| 一致性 | 软件必须和业务规则、外部系统保持一致 |
| 可变性 | 需求和市场经常变化 |
| 不可见性 | 软件过程和进度不容易直接观察 |
因此,软件项目无法靠充分的前期计划消除风险。 敏捷承认变化,并用快速反馈、持续交付来降低风险。
2. 软件项目成功标准
传统观点
成功 =
- 按时完成
- 不超预算
- 实现原定全部功能
敏捷观点
成功 =
- 为客户创造价值
- 项目收益大于控制成本
- 能适应变化并持续交付有效成果
关键区别:
| 传统项目管理 | 敏捷项目管理 |
|---|---|
| 重视范围、时间、成本控制 | 重视客户价值 |
| 关注是否符合原计划 | 关注是否产生收益 |
| 变化被视为干扰 | 变化被视为现实 |
敏捷知识体系
敏捷知识体系可以分为几层:
| 层级 | 内容 |
|---|---|
| 价值观 | 沟通、简单、反馈、勇气、尊重 |
| 原则 | 快速反馈、及早交付、简洁、客户满意 |
| 方法 | XP、Scrum、Kanban |
| 实践 | TDD、CI、结对编程、重构 |
| 工具 | 任务看板、Bug Tracker、单元测试工具 |
4. 价值观、原则、实践的关系
| 概念 | 作用 |
|---|---|
| 价值观 | 判断什么重要,例如沟通、反馈、尊重 |
| 原则 | 连接价值观和实践的指导方针 |
| 实践 | 每天具体做的动作,例如站会、TDD、CI |
关系:
价值观 → 原则 → 实践
例如:
重视反馈 → 尽早验证 → TDD / CI / 频繁交付
- 只有实践,没有价值观,会变成机械模仿。
- 只有价值观,没有实践,会变成空话。
- 原则负责把抽象价值观落到具体行为上。
敏捷软件开发宣言
价值观
-
个体和互动高于流程和工具
-
干活的人最清楚怎么完成工作
-
流程和工具应该服务于人
-
不要把某种工具或流程强行套给所有团队
-
-
工作的软件高于详尽的文档
-
敏捷不是不要文档
-
有价值的文档可以保留
-
反对的是不创造价值的流程文档
-
真正可信的进展是可运行、可测试、可集成的软件
-
-
客户合作高于合同谈判
-
敏捷价值观着重强调,开发团队和客户之间要保持尽可能公开和顺畅的对话
-
基于合同的项目侧重方向不对。相关各方就像是一群合伙人,齐心协力在规定时间和预算范围内努力构建最有价值的系统
-
-
响应变化高于遵循计划
-
计划驱动型组织通常都有“变化控制”流程
-
只有在变更可控的情况下,变化控制才会有效果
-
创造价值才是衡量软件开发成功的标准
-
尽管右项有价值,我们更重视左项的价值
敏捷、精益创业与 DevOps
精益创业
核心循环:
假设 → 构建 → 检验 → 学习
含义:
- 创新高度不确定。
- 不能只靠理论规划。
- 要通过快速试错找到市场可接受的方案。
DevOps
目标:
缩短代码变更从提交到进入生产环境的时间,同时保证质量。
核心动作:
-
把敏捷思想扩展到运维
-
加强开发与运维协作的交流
-
建立共同目标