敏捷软件开发宣言
什么是敏捷开发?(理解)
- 对变化的有效(快速和适应性)反应
- 和所有利益相关者之间的有效沟通(面对面沟通)
- 组织团队,使其能够控制所执行的工作(自管理能力)
- 快速(敏捷开发注重点-2weeks--4weeks)、增量的软件交付
变更成本图
- 传统软件过程变更成本:开发数月之后,项目处于开发后期,可能已经在做确认测试,这时需要变更一个主要功能。这一变更需要对软件的体系结构设计进行修改,包括设计和构建三个新构件,修改另外五个构件,设计新的测试等等。所以成本会迅速提高。
- 敏捷模型为什么前面比传统模型高:敏捷模型前期对团队的要求较高,且完成的工作量要大于传统模型。
敏捷开发的12原则(理解)
- 我们最优先要做的是通过尽早、持续交付有价值的软件来使客户满意。
- 即使在开发的后期,也欢迎需求变更。敏捷过程利用变更为客户创造竞争优势。
- 经常交付可运行软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
- 在整个项目开发期间,业务人员和开发人员必须天天在一起工作。
- 围绕有积极性的个人构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
- 在团队内部,最富有效果和效率的信息传递方法就是面对面交谈。
- 可运行软件是进度的首要度量标准。
- 敏捷过程提倡可持续的开发速度。责任人、开发者、用户应该能够长期保持稳定的开发速度。
- 不断地关注优秀的技能和好的设计会增强敏捷能力。
- 简单--使不必要做的工作最大化的艺术--是必要的。
- 最好的架构、需求和设计出自于自组织团队。
- 每隔一定时间,团队会反省如何才能更有效的工作,并相应调整自己的行为。
人为因素
更重视人文、弱化文档、需求、过程
该过程根据人员和团队和需求进行塑造
敏捷团队成员和团队本身必须具备的关键素质:
- 能力
- 决策能力
- 模糊的解决问题的能力(技术调研)
- 协作
- 常见的焦点
- 相互信任和尊重
- 自组织
极限编程(XP)
是敏捷软件开发中使用最广泛的一种方法。
五个因素:沟通(用户、管理人员),简单(不要复杂化),反馈,尊重,勇气(挑战自己);
XP Planning
- 从创建“用户故事”开始(规范化->用例图)
- 敏捷团队评估每一个故事并为其分配价值
- 敏捷团队评估每一个故事并为其分配成本(开发时间)
- 故事被分组以获得可交付增量
- 对交付日期的承诺(确认)
- 所选定的故事将尽快(几周之内)实现
- 具有高价值的的故事将移到进度表的前面并首先实现
- 高风险故事将首先实现
- 项目第一个发行版本交付之后,XP团队计算项目速度(审视)。项目速度用于:
- 帮助估计后续发行版本的发布日期和进度安排
- 确定是否对整个开发项目中的所有故事有过分承诺。一旦发生过分承诺,调整软件发行
- 版本的内容或者改变最终交付日期。
XP design
- 严格遵循KIS(keep it simple,保持简洁)原则;
- 鼓励使用CRC(类-职责-协作者)卡作为在面向对象环境中考虑软件的有效机制。CRC卡确定和组织与当前软件增量相关的面向对象的类。
- 在故事设计中遇到困难,推荐立即建立这部分的可执行原型。实现并评估设计原型被称为spike解决方案。其目的是在真正实现开始时就降低风险,对可能存在设计问题的故事确认其最初的估计。
- 鼓励重构,重构是不改变代码外部行为而改进其内部结构的方式来修改软件系统的过程。-----内部程序设计的迭代改进;
XP Coding
建议在开始编码之前先开发一系列用于检测本次(软件增量)发布的包括的所有故事的单元测试。
- 为什么测试优先开发
可以帮助程序员更好地理解系统需求。
- 测试优先开发的潜在困难是什么?
2. 鼓励结对编程(实施解决问题和实时质量保证的机制,使开发者能集中精力在手头的问题)
- 为什么成对工作的程序员的生产率与单独工作的程序员的生产率大致相同?
XP Testing
1. 所有单元测试每天执行
2. “验收测试”由客户定义并执行,以评估客户可见的功能
为什么测试先行,有什么好处?
结对编程优势
- 配对编程(Pair Programming)是一个简单明了的概念。
- 两位程序员一起坐在同一台计算机两侧,持续协作设计、算法、代码和测试。
- 它使得两个人合作产生的代码质量比单独劳动的总和更高。
Scrum(敏捷开发)特点
- 开发工作被划分成“数据包(packets)”。
- 在构建产品的过程中进行测试和文档编写,以保持持续进行。
- 工作按照“冲刺(sprints)”进行,并根据现有需求的“待办清单(backlog)”派生。
- 会议非常短,有时甚至不使用椅子。
- demos应在规定的时间内交付给客户。