敏捷

为什么软件开发需要敏捷

软件开发具有四个本质特征:

特征 含义
复杂性 需求、技术、人员、环境相互影响
一致性 软件必须和业务规则、外部系统保持一致
可变性 需求和市场经常变化
不可见性 软件过程和进度不容易直接观察

因此,软件项目无法靠充分的前期计划消除风险。 敏捷承认变化,并用快速反馈、持续交付来降低风险。

2. 软件项目成功标准

传统观点

成功 =

  • 按时完成
  • 不超预算
  • 实现原定全部功能

敏捷观点

成功 =

  • 为客户创造价值
  • 项目收益大于控制成本
  • 能适应变化并持续交付有效成果

关键区别:

传统项目管理 敏捷项目管理
重视范围、时间、成本控制 重视客户价值
关注是否符合原计划 关注是否产生收益
变化被视为干扰 变化被视为现实

敏捷知识体系

敏捷知识体系可以分为几层:

层级 内容
价值观 沟通、简单、反馈、勇气、尊重
原则 快速反馈、及早交付、简洁、客户满意
方法 XP、Scrum、Kanban
实践 TDD、CI、结对编程、重构
工具 任务看板、Bug Tracker、单元测试工具

4. 价值观、原则、实践的关系

概念 作用
价值观 判断什么重要,例如沟通、反馈、尊重
原则 连接价值观和实践的指导方针
实践 每天具体做的动作,例如站会、TDD、CI

关系:

价值观 → 原则 → 实践

例如:

重视反馈 → 尽早验证 → TDD / CI / 频繁交付
  • 只有实践,没有价值观,会变成机械模仿。
  • 只有价值观,没有实践,会变成空话。
  • 原则负责把抽象价值观落到具体行为上。

敏捷软件开发宣言

价值观

  • 个体和互动高于流程和工具

    • 干活的人最清楚怎么完成工作

    • 流程和工具应该服务于人

    • 不要把某种工具或流程强行套给所有团队

  • 工作的软件高于详尽的文档

    • 敏捷不是不要文档

    • 有价值的文档可以保留

    • 反对的是不创造价值的流程文档

    • 真正可信的进展是可运行、可测试、可集成的软件

  • 客户合作高于合同谈判

    • 敏捷价值观着重强调,开发团队和客户之间要保持尽可能公开和顺畅的对话

    • 基于合同的项目侧重方向不对。相关各方就像是一群合伙人,齐心协力在规定时间和预算范围内努力构建最有价值的系统

  • 响应变化高于遵循计划

    • 计划驱动型组织通常都有“变化控制”流程

    • 只有在变更可控的情况下,变化控制才会有效果

    • 创造价值才是衡量软件开发成功的标准

尽管右项有价值我们更重视左项的价值

敏捷、精益创业与 DevOps

精益创业

核心循环:

假设 → 构建 → 检验 → 学习

含义:

  • 创新高度不确定。
  • 不能只靠理论规划。
  • 要通过快速试错找到市场可接受的方案。

DevOps

目标:

缩短代码变更从提交到进入生产环境的时间,同时保证质量。

核心动作:

  • 把敏捷思想扩展到运维

  • 加强开发与运维协作的交流

  • 建立共同目标