Part 1 敏捷开发知识体系总体框架
敏捷开发:一种基于更紧密的团队协作、持续的用户参与和反馈,能够有效应对快速变化需求,快速交付高质量软件和增量的新型软件开发方法。是一种轻量级的开发方法,通过迭代和快速用户反馈管理不确定性和拥抱变化。
敏捷开发知识体系的三层构架:
1.核心价值层:12个原则
2.敏捷开发方法框架:XP、Scrum、精益开发、OpenUP等
3.敏捷开发实践层:包括用于指导敏捷开发的各种实践
敏捷开发方法框架的三个假设:
- 项目需求总是变化的,提前预测哪些需求是稳定的,哪些需求是变化的,客户优先级的变化也是难以管理的。
- 对于很多软件来说,设计和构建是交错进行的。
- 从指定计划的角度来看,软件的分析、设计、构建和测试并不像我们设想的那么容易。
Part 2 敏捷开发核心价值观和原则
敏捷开发宣言:
个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
各户合作 高于 合同谈判
响应变化 高于 遵循计划
敏捷开发的核心价值观:
- 以人为本:将总是个体潜能的激发和团队的高效协作作为其所推崇的第一价值观。
- 目标导向:软件的开发目标是“可工作的软件”而不是面面俱到的文档。
- 客户为先:把客户当成合作者和伙伴,把自己的使命定位为“帮助客户取得竞争优势”
- 拥抱变化:承认变化是软件开发的一部分。
敏捷开发的12条原则:
- 我们最重要的目标,是通过不断的及早交付有价值的软件使客户满意。
- 欣然面对需求变化,即使在开发后期也一样,威客客户的竞争优势,敏捷过程掌控变化
- 经常地交付可工作的软件,相隔几星期或一个月,倾向于采取较短的周期
- 业务人员和开发人员必须相互合作,项目每一天都不例外。
- 激发个体的斗志,以他们为核心搭建项目,提供所需要的环境和支援辅以信任,从而达到目标。
- 不论团队内外,传递信息效果最好和效率最高的方式是面对面交谈。
- 可工作的软件是进口度的首要度量标准。
- 敏捷过程提倡可持续开发。责任人、开发人员和用户要能够共同维持稳定的延续。
- 坚持不懈的追求技术卓越和良好的设计,敏捷能力由此增强。
- 以简洁为本,他是极力减少不必要的工作量的艺术。
- 最好的架构、需求和设计出自组织团队。
- 团队定期的反思如何提高成效,并依此调整自身的举止表现。
PART 3 敏捷开发方法框架
Scrum框架
是目前应用最广泛的敏捷方法之一,是一个增量、迭代开发过程。
理论基础:已经验过程控制理论作为基础理论,通过迭代、增量的方法来增强产品开发的可预见性并控制风险。实施该方法有三大支柱:
- 透明性:指在开发过程中的各个换件对于所有人保持透明
- 检验:开发过程中各方面必须做到足够频繁的检验,确保能够及时发现过程中的重大偏差
- 适应:只要检验出一个方面不合格那么就判定产品最终是不合格的,就要对于产品进行调整并立即实施调整减少偏差
框架内容简述:
在这个框架中,整个开发周期由若干个短的迭代周期组成,一个短的迭代周期成为一个冲刺,每个冲刺的建议长度是2~4轴。在框架中,使用产品待办列表来管理产品的需求,产品待办列表是一个按照商业价值排序的需求列表,列表的条目体现形式通常为用户故事。Scrum团队总是先开发对客户具有较高价值的需求。在冲刺中,Scrum团队从产品待办列表中挑选最高优先级的需求进行开发。挑选的需求在冲刺计划会议上经过讨论、分析和估算得到相应的任务列表,则称它为冲刺待办列表。每个迭代结束时,Scurm团队将提交可交付的产品增量。
注意!Scrum不认可开发团队的头衔,无论承担哪种工作他们都是开发者,每个成员可以有自己特长和专注的领域,但是责任归属于整个开发团队。(对整个团队负责,而不仅仅是对自己的那一块工作)
Scrum方法中的主要角色
Scrum方法中的主要活动和交付件
注意:冲刺代办事项的任务列表中对任务进行拆分,没有单个任务可以超过16小时。
可以使用燃尽图来控制实际进度与计划之间的矛盾。
Scrum方法总体构架
极限编程XP
目标:满足开发人员高效的短期开发行为和项目的长期利益的共同实现。
XP的核心:鼓励每个人尽可能地为项目多做贡献,即每个人做得工作别人是可以插手和干预的。整个团队没有所谓的特殊人物。
特征:
- 短期开发形式,以支持尽早的、持续的反馈
- 递增地进行计划编制,总体计划在整个声明周期中是不断发展的
- 依赖口头交流。团队和客户共同测试代码及产品,不断的沟通和进化系统结构和需求
XP实现计划反馈
极限编程提倡大家共同拥有代码,每个人都有全力和义务其阅读其他代码,发现和纠正错误,重构和优化代码,虽然每个人有明确的分工,但是整个项目实际上是由整个项目开发团队共同完成的,错误会减少很多。注意,要实现这个需要编写统一的编程规范。
重构:Refactoring,程序员不应该心疼以前写的程序,而要毫不留情的改进程序。
结对编程:所有代码都由两个程序员在同一台机器上一起写的,这保证了所有代码、设计和单元测试至少被另一个人复核过。这个方法提高了软件质量,还增强了相互之间的知识交流和更新。
极限编程工作流程
OpenUP
OpenUP:一组数和高效率软件开发最小实践组成的敏捷化的统一过程。其基本出发点是务实、敏捷和协作。
其主体是RUP,即在一组被验证的结构化生命周期过程中应用增量研发模式。OpenUP基于用例和场景、风险管理和以架构为中心的模式来驱动。
OpenUP 4项基本原则
OpenUP总体组织构架
精益开发
精益被定义为:一种系统的方式,通过不断的跟进客户对产品的需求和持续的改进,来定位和消除不必要的损耗。
简单的说就是在检查软件开发过程中的所有步骤,并对每个步骤在整个过程中是否有价值做出决定性的判断,从而做出对于客户来说是否真正有价值的判断。
精益思想6原则(6个步骤)
- 价值:明确客户所期望的产品或服务应提供的价值。以实现次价值为目的,审视整个过程中的所有华东,同时帮助识别其中的浪费。
- 价值流图:针对一件产品、一项功能或者服务,按时间顺序识别出为实现其价值而进行的所有活动,并确定出其中哪些是有价值的,哪些是浪费。
- 流动:消除价值流中的浪费,让价值的活动一个接一个地流动起来。
- 拉动:确定价值流何时开始流动,因何流动。价值流应由用户的施加需求拉动。
- 尊重他人:敏捷方法更加依赖于流程中的个人能力。
- 完美化:通过不断的优化,使用更精简的步骤、更短的时间和更少的必须信息来实现客户价值。
工程方法
目前比较流行的精益方法的典型时间包括看板、诱因分析、过程改进、价值流等。
Scrum白板与看板相结合
很多敏捷的方法是强调以开发人员为中心,而精益软件开发则强调以经营管理为重的方式,目前的趋势是渐渐向对方融合。