敏捷方法与过程

一. 敏捷过程模型

变化无处不在,难以预测变化何时发生,要在每一项开发活动中贯穿变化的意识

《敏捷软件开发宣言》

image-20211220210615264

总结:小步快跑,及时反馈

本质:以快速的增量和迭代的方式进行软件开发

  • 不强调文档而强调可运行软件片段
  • 开发者与客户频繁沟通
  • 快速开发,快速反馈,快速修改,增量交付
  • 持续不断的短周期迭代
  • 不看重形式和工具,看重人和内容,保持简洁

image-20211220211147830

敏捷开发前期开发成本比传统开发过程高,而后期成本要比传统开发过程低

敏捷过程中最重要的因素:人

(这里的人应该指的是开发者和客户)

image-20211220211654269

目前广泛使用敏捷开发方法论

略,包括极限编程和Scrum,XP是Scrum的基础

二. 极限编程(XP)

  • 极限:把事情做到极致
    • 了解客户需求 客户时时刻刻都在身边,时时了解需求
    • 测试/单元测试提高质量 TDD(先写测试,测试驱动开发)
    • 代码复审找到错误 一开始就处于“复审状态”,即结对编程
    • 变化块 频繁增量开发,重构和频繁发布

image-20211220213551697

image-20211220213556594

1. XP Planning 计划阶段

用户故事、权值(价值和风险)、验收测试准则、迭代计划

  • 用户故事:描述输出、特性、功能等
  • 客户指定用户故事优先级:按照价值或风险评估
  • XP团队指定用户故事成本(开发周数):超过三周则拆分
  • 指定下一次发布的增量的若干个用户故事
  • 规划整体进度
  • 开发过程增删改拆用户故事

2. XP Design 设计阶段

  • KIS原则(Keep It Simple)
  • CRC卡片(Class Responsibility Collaborator)
  • Spike Solutions 原型(刺探性的解决方案,问题拿不准做实验尝试)
  • 设计方案不断重构

3. XP Coding and Testing 编码与测试阶段

3.1 XP Coding

结对编程:两个人一起编程、实时讨论评审

TDD(测试驱动的开发):先写测试用例(单元测试用例),再写代码;

3.2 XP Testing

自动化单元测试、集成测试、持续进行回归测试、验收测试(见10章)

验收与用户故事是否相符

4. Pair Programming 结对编程

驾驶员,领航员

双方只有水平上的差距,没有级别上的差异(平等的决策权)

质量取决于一对程序员中各方面水平较高的那一位

三. Scrum

image-20211220221838041

Scrum的六项活动

image-20211220222052966

image-20211220222504943
  • Product Owner:确定产品功能,维护Product Backlog、deadline、priority、ROI(投资回报率),验收结果
  • Scrum Master(Strum Team Leader):保证开发过程按计划进行;组织会议:每日站会、Sprint计划会议、完成工作后的Sprint评审会议和Sprint回顾会议;通过外在/内在协调,确保团队资源完全可被利用并且全部是高产出的
  • Team(Scrum团队):在每个Sprint中将Product Backlog中的条目转化成为潜在可交付的功能增量(可以认为是Sprint Backlog);规模在4-7人;具备交付产品增量所需要的各种技能

每日站会

  • 团队成员站着开会——短时间(15分钟。每人不超过三分钟)内高效讨论问题,保持注意力集中
  • 每个人向同伴报告进度:我昨天做了什么、我今天要做什么、我碰到了哪些问题
  • 简明图表展示项目进度

Sprint Burndown Chart 燃尽图

Task Board 任务墙(parking 表示任务堆积)

image-20211220224416747

四. 与传统开发过程模型对比

image-20211220224432368

image-20211220224507774

五. 敏捷案例分析

客户对功能需求还不明确

需要快速推出抢占市场

适合敏捷过程的项目

敏捷方法希望快速交付可用的软件,实现软件的快速交付是通过迭代来完成

业务分析师???