-
敏捷方法:是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。
-
敏捷开发:是一种以人为核心、迭代、循序渐进的开发方法。
-
敏捷实践:精益软件开发(LSD)、SCRUM、KanBan、极限编程(XP)
敏捷实践简介
精益软件开发(LSD)
在创造价值的目标下,通过改良流程不断地消除浪费。现被广泛用于生产制造管理、IT系统建设。
精益开发的基本原则:
-
消除浪费:将所有的时间花在能够增加客户价值的事情上。
-
推迟决策:保持可选方案的开放性,但时间不能过长。
-
加强学习:通过短迭代周期、重构、集成测试和频繁的客户反馈会议增强学习。
-
快速交付:短期迭代或小批量立即交付价值,促进有效的决策制定。
-
打造精品:使用恰当的方法确保质量,如构建自动化测试、安装和持续集成。
-
授权团队:精益专注于团队,让创造增值的员工充分发挥自己的潜力。
-
优化整体:快速试错,快速学习
Scrum
Scrum一个用于开发和维护复杂产品的框架,是一个增量的、迭代的开发过程,强调团队的自组织和跨功能性。一般由多个Sprint(迭代冲刺)组成,每个Sprint长度一般为2-4周。 具体介绍见下一篇:「17 敏捷开发-Scrum(2)」。
-
三个角色:产品所有者(Product Owner), Scrum Master,开发团队(Team)。
-
核心:Product Backlog(产品待办事项)、Sprint Backlog(迭代待办事项)、迭代目标。
-
流程:需求梳理、Sprint Plan(迭代计划)、Sprint (迭代)、Daily Scrum(每日站会)、Sprint Review(迭代评审)和 Sprint Retrospective(迭代回顾)
- 五个会议:待办事项整理会议(Backlog Grooming Meeting)、迭代计划会议(Sprint Planning Meeting)、每日站会(Daily Meeting)、评审会(Review Meeting)、回顾会(Retrospective Meeting)
Kanban
Kanban 是把敏捷的过程和产品进行可视化的方法 。把过程中的协作、分工、范围、工作、需求、进度、速度、提交物等直观地展现出来。且通过限制「进行中」的任务数量来保持工作流畅。
-
基本看板三步工作流程:「待办」、「进行中」、「完成」。
-
在制品 (WIP): 限制设定了工作流中每个状态所能允许的最大制品量。限制在制品数量更易于发现团队工作流中的低效率现象。
-
看板卡片:通过帮助团队成员之间信息共享。
极限编程(XP)
一种基于频繁交付周期的软件开发方法,强调团队协作、快速反馈和持续改进。
- 方法核心实践:测试驱动开发(TDD)、持续集成(CI)、小版本发布和团队协作。
- 核心价值观:沟通、简洁、反馈、勇气、尊重。
敏捷开发的优势
-
加速交付:注重迭代开发和快速响应变化,更快地交付。
-
更灵活项目管理:允许在项目进行中灵活调整计划和需求,以更好地应对变化的市场和技术环境。
- 增强客户满意度:强调与客户的密切合作和持续反馈,有助于团队更好地理解客户需求并及时调整开发方向,从而提高客户满意度。
- 促进团队协作:强调团队协作和自组织,有助于激发团队成员的创造力和责任感,提高工作效率和质量。
敏捷开发的挑战
-
资源规划难:并不是一开始知道产品"最终的样子",是在过程中挖掘用户需求逐渐知道终局状态,给前期规划带来很大挑战。
-
有效度量难:敏捷是以增量的方式交付,边走边看意味着开始如果设置了KPI,这跨周期的开发进度使得衡量进度相对困难。
-
必要文档缺少或分散:频繁交付会导致成员依赖于讨论,缺少文档支撑,一些原型设计、UI设计、需求文档分散于各个迭代,不利于后期维护和交接。
敏捷宣言 12条原则
-
为满足客户,尽早并持续交付高价值软件。
-
积极面对需求变化,即使是在软件迭代后期,敏捷方法依然是帮助客户获得市场竞争优势的重要手段。
-
频繁交付可用的软件,交付周期越短越好。
-
在项目过程中,业务人员、开发人员应当保持高度合作关系。
-
为软件开发人员提供必要的环境和技术支持。
-
保证高效的面对面交谈机会。
-
软件可用性是衡量软件开发进度的首要标准。
-
敏捷流程倡导可持续开发。软件供应的甲方和乙方要保持长期稳定的合作关系。
-
持续地追求技术卓越和良好的设计,增强敏捷能力。
-
简单是敏捷流程的根本,尽最大可能减少不必要的工作。
-
强调软件开发过程需要形成最佳架构、需求和设计方案。
-
软件开发团队要以提升效率为主。