本篇文章主要用于记录敏捷开发相关的基础知识。
几种常见软件过程模型
- 瀑布模型
- 迭代模型
- 增量模型
迭代 vs 增量
敏捷开发
敏捷思维总结
- 价值驱动:从经济价值的角度思考
- 适应变化:交付正确的产品
- 自组织团队:释放团队内驱力
什么敏捷软件开发
- 敏捷软件开发是基于敏捷宣言定义的价值观和原则的一系列方法和实践的总称。
自组织、跨职能团队运用适合他们自身环境的实践进行演进得出解决方案。
敏捷开发简史
20世纪90年代初,一些轻量级的软件开发方法越来越受到公众的关注,这些方法包括:
- 1991, Rapid Application Development(RAD)
- 1994 Dynamic systems development method (DSDM)
- 1995, Scrum
- 1996, Crystal Clear ,Extreme Programming (XP)
- 1997, Feature-driven development(FDD)
这些方法论强调了开发团队和业务干系人之间的密切合作;商业价值频繁交付;紧密合作的自组织团队,以及代码匠艺、验证和交付代码的巧妙方法。
- 2001年,17位软件开发人员聚集在犹他州的 Snowbird,讨论他们的共同想法和各种软件开发方法。经过讨论他们达成了在价值观和原则的共识,并共同发布了敏捷软件开发宣言和相应的十二条原则,宣告了敏捷开发运动的开始。
会议之后,敏捷联盟成立,鼓励业界从业者进一步探索和分享想法和经验。
敏捷软件开发宣言
我们一直在实践中探寻更好的软件开发方法,身体力行,同时也帮助他人。由此我们建立了如下价值观:
- 个体和互动 高于 流程和工具
- 工作的软件 高于 详尽的文档
- 客户合作 高于 合同谈判
- 响应变化 高于 遵循计划
也就是说,尽管右项有其价值,我们更重视左项的价值。
敏捷开发十二原则
-
我们最重要的目标,是通过及早和持续不断地交付有价值的软件使客户满意。
-
欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。
-
经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
-
业务人员和开发人员必须相互合作,项目中的每一天都不例外。
-
激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
-
不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
-
可工作的软件是进度的首要度量标准。
-
敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
-
坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
-
以简洁为本,它是极力减少不必要工作量的艺术。
-
最好的架构、需求和设计出自自组织团队。
-
团队定期地反思如何能提高成效,并依此调整自身的行为表现。
使用哪种敏捷软件开发方法
- 常见的敏捷软件开发方法有:极限编程,Scrum,DSDM,自适应软件开发,水晶系列,特征驱动开发
- 我们使用的是 Scrum
Scrum
什么是 SCRUM
- Scrum 是用于开发、交付和持续支持复杂产品的一个框架,是一个增量的、迭代的开发过程。
- 在这个框架中,整个开发过程由若干个短的迭代周期组成,一个短的迭代周期称为一个 Sprint,每个 Sprint 的建议长度是一至四周。在 Scrum 中,使用产品 Backlog 来管理产品的需求,产品 backlog 是一个按照商业价值排序的需求列表,列表条目的体现形式通常为用户故事。Scrum 团队总是先开发对客户具有较高价值的需求。在 Sprint 中,Scrum 团队从产品 Backlog 中挑选最高优先级的需求进行开发。挑选的需求在 Sprint 计划会议上经过讨论、分析和估算得到相应的任务列表,我们称它为 Sprint backlog。在每个迭代结束时,Scrum 团队将递交潜在可交付的产品增量。
- Scrum 起源于软件开发项目,但它适用于任何复杂的或是创新性的项目。Scrum 目前已被用于开发软件、硬件、嵌入式软件、交互功能网络、自动驾驶、学校、政府、市场、管理组织运营,以及几乎我们(作为个体和群体)日常生活中所使用的一切。
SCRUM 框架
Scrum框架包括3个角色、3个工件、5个事件、5个价值:
3个角色
- 产品负责人(Product Owner)
- Scrum Master(通常也可以是开发团队的一员)
- 开发团队
3个工件
- 产品 Backlog(Product Backlog)
- SprintBacklog
- 产品增量(Increment)
5个事件
- 产品 Backlog 梳理
- Sprint 计划会议(Sprint Planning Meeting)
- 每日站会(Daily Scrum Meeting)(实践中可能不会每天都进行)
- Sprint 评审会议(Sprint Review Meeting)(专注于前一个 sprint 产品的商业价值最大化的工作结果)
- Sprint 回顾会议(Sprint Retrospective Meeting)(专注于流程和持续流程改进,实践中可能不会进行,只有4)
5个价值
- 承诺 – 愿意对目标做出承诺
- 专注– 把你的心思和能力都用到你承诺的工作上去
- 开放– Scrum 把项目中的一切开放给每个人看
- 尊重– 每个人都有他独特的背景和经验
- 勇气– 有勇气做出承诺,履行承诺,接受别人的尊重
常见的敏捷工具
- Jira(公司使用)
- teambition(个人使用)
- Leangoo
- 飞书的多维表格/Excel
极限编程
虽然没有使用,但是下面的概念需要了解一下
- 持续集成
- 结对编程
- 测试驱动开发(TDD)
敏捷开发实践集
用户故事
用户故事是从用户的角度来描述用户渴望得到的功能。一个好的用户故事包括三个要素:
-
角色:谁要使用这个功能。
-
活动:需要完成什么样的功能。
-
商业价值:为什么需要这个功能,这个功能带来什么样的价值。
用户故事地图
为故事写验收条件
确定故事优先级
故事点(Story Point)
故事点是一个度量单位,用于表示完成一个产品待办项或者其他任何某项工作所需的所有工作量的估算结果。实践过程中故事点的单位可以是人天。
敏捷估算
- 估算故事点