一、学习内容
(一)敏捷软件开发的诞生
1. 传统的软件过程成为过去
- 1970年的瀑布模型弊端:过分强调软件开发的顺序性,导致要到开发后期用户才能看到软件的模样,为软件开发增加了极大的风险;没有迭代和反馈,导致无法应对客户的需求变化;带来了极大的变更成本。
2. 新的软件工程过程发展失控
- 有非常多的约束、非常多的工具已经非常多的方法和步骤;
- 降低了团队的开发效率,使得进度延期,预算超支;
- 降低了团队的响应能力,使得团队经常创建错误的产品。
3. 敏捷软件开发诞生
- 2001年17位专家讨论各种轻量级软件开发方法学;
4. 敏捷软件开发特点
- 强调程序员和业务专家、用户之间的紧密协作、面对面的沟通,这种方法比书面文档更有效;
- 能够很好地根据需求的变化编写代码;
- 频繁的交付新的软件版本;
- 采用紧凑和自组织的软件开发团队;
- 更注重个体在软件开发种的作用。
(二)敏捷软件开发宣言
- 个体和交互胜过过程和工具
- 可以工作的软件胜过面面俱到的文档
- 客户合作胜过合同谈判
- 响应变化胜过遵循计划
(三)敏捷宣言遵循的原则
- 最重要的是通过尽早和持续交付有价值的软件满足客户需要;
- 欢迎需求变化,即使在开发后期;
- 经常交付可以工作的软件,时间跨度越短越好;
- 业务人员和开发人员应该在整个项目过程种始终在一起工作;
- 围绕斗志高昂的人进行软件开发;
- 最有效率最有效果的信息传达方式是面对面交谈;
- 可以工作的软件是进度的主要度量标准;
- 提倡可持续开发;
- 不断追求卓越的技术和良好的设计;
- 尽可能减少工作量;
- 最好的都源于自组织的团队;
- 每隔一段时间进行总结。
(四)对比其他的方法
- 对比迭代方法:两者都强调较短的开发周期提交软件,迭代开发每个周期更新代码和文档,工作量大,容易出现代码和文档不匹配的问题,敏捷开发时间更短,强调高度协作,看重可以工作的软件而不是文档。
- 对比瀑布式开发:瀑布式自由度低,变化难以调整,代价高;敏捷刚好相反。
(五)敏捷软件开发的适用性
- 组织文化必须支持协商讨论;
- 人员彼此信任;
- 人少而精;
- 程序员所做决定得到认可;
- 环境设施满足成员间快速沟通的需要。
(六)极限编程概述
是敏捷开发中最著名的一个过程和方法,供中小型开发团队用于开发需要快速变化的软件。
1. 价值观
- 简单
- 交流
- 反馈
- 勇气
2. 原则
- 快速反馈
- 简单性假设
- 拥抱变化
- 高质量的工作
3. 行为
- 倾听
- 测试
- 编码
- 设计
4. 实践
- 客户作为团队成员
- 用户故事
- 短交付周期:迭代计划、发布计划
- 测试驱动的开发方法:极限编程的重要特点
- 验收测试
- 结对编程
- 集体所有权
- 持续集成
- 可持续的开发速度
- 开放的工作空间
- 计划游戏
- 提倡简单的设计
- 时常对现有代码进行重构
- 隐喻
5. 小结
极限编程是一组简单、具体的实践;
(七)Scrum
1. 一个简单的框架
是一个敏捷开发框架,是一个增量迭代的开发过程。
2. Scrum过程
1. Scrum过程
- 更新产品订单、冲刺计划会议、每日训话、冲刺增量、冲刺检验、冲刺追溯;
2. Scrum的3个角色,3项活动,3种工具,1个冲刺
3. 3个角色
- 产品负责人(Product Owner):负责维护产品订单的人;
- Scrum主管(Scrum Master):负责团队运作;
- Scrum团队(Scrum Team):负责产品交付。
4. 3项活动
- 冲刺计划会议(Sprint Planning Meeting):根据产品负责人制订的产品或项目计划在冲刺的开始时做准备工作;
- 每日站立会议(Daily Scrum Meeting):项目状况会议;
- 冲刺评审会议(Sprint Review Meeting):为了进行持续的过程改进;
5. 3种工具
- 产品订单(Product Backlog):根据商业价值排序和涵盖所有客户需求的产品特性列表;
- 冲刺订单(Sprint Backlog):冲刺计划会议上产出的一个产品特性列表;
- 燃烧进度表(Burn-down Chart):是一个公开展示的图表,在冲刺长度上显示每天的进展,显示当前冲刺中未完成的任务数目,或在冲刺订单上未完成的订单项的数目,是一个反映工作量完成状况的趋势图,是对工程进度进行控制的有效工具。
6. 自适应的项目管理
- 频繁的风险评估和应对措施;
- 通过每日站立会议,让计划和模块开发保持透明,让每一个人知道谁负责什么,以及什么时候完成;
- 以冲刺评审会为主要形式,频繁召开利益所有人会议,以跟踪项目进展,保持项目开发的节奏;
- 没有问题会被藏在地毯下。
7. Scrum较传统开发模型的优点
能尽快的相应变化;
二、小结
- 目标:给客户交付最大可能的价值;
- 敏捷软件开发是一种面临迅速变化的需求快速开发软件能力;
- 敏捷软件开发的原则和价值观构成了一个可以帮助团队打破过程膨胀循环的方法;
- 极限编程是敏捷软件开发中最著名的一个过程和方法;
- Scrum是目前应用最广的敏捷软件开发方法。