现代软件工程第四章
敏捷流程
敏捷是什么
是一种从90年代开始逐渐引起广泛关注的一些新型软件开发方法
XP ( Extreme Programming )
Scrum
瀑布式开发属于非敏捷模型:需求难以变更,程序维护成本高
敏捷开发遵循软件客观规律,不断的进行迭代增量开发,最终交付符合客户价值的产品
敏捷宣言价值观
敏捷原则
成果交付原则:
1.价值排序,尽早交付,通过尽早、持续交付有价值的软件来使客户满意。
2.拥抱变化,提高优势,在开发的后期,也欢迎需求变更。敏捷过程利用变更为客户创造竞争优势。
3.持续交付,小步快跑,经常交付可运行软件
4.成果达成,衡量进度:可运行软件是进度的首要度量标准。(成果交付原则)
5.追求卓越,强化敏捷:不断地关注优秀的技能和好的设计会增强敏捷能力。 (成果交付原则)
6.精简产品,杜绝浪费:简单——是减少不必要工作量的艺术——是必要的(成果交付原则)
人员交互原则:
1.团队合作,每日互动;
2.信任成员,给予支援;
3.当面沟通,高效明了;
4.各方成员,稳定节奏:提倡可持续的开发速度。责任人(sponsor)、开发者和用户应该能长期保持稳定的开发速度。
5.同心协力,自我组织:最好的架构、需求和设计出自于自组织团队。
6.团队自省,持续改进:每隔一定时间,团队会反省如何才能更有效地工作,并相应调整自己的行为。
敏捷过程是什么
基于敏捷原则进行的软件开发过程,视为敏捷过程。
敏捷过程模型
极限编程XP
Scrum
自适应软件开发(ASD)
动态系统开发方法(DSDM)
特征驱动开发(FDD)
精益软件开发(LSD)
敏捷建模AM
敏捷统一过程AUP
极限编程XP
极限编程的主要目标在于降低因需求变更而带来的成本。
采用迭代的交付方式,每个迭代很短(1-3周时间)。在每个迭代结束的时候,团队交付可运行的,经过测试的功能,这些功能可以马上投入使用。
实施原则
快速反馈 (Rapid feedback)
假设简单 (Assuming simplicity)
包容变化 (Embracing change)
过程
XP 策划
建立一系列描述待开发软件必要特征与功能的“用户故事”
评估每一个故事,并给出以开发周数为度量单位的成本
客户和XP团队共同决定如何把故事分组并置于将要开发的下一个发行版本中(下一个软件增量)
形成关于一个发布版本的基本承诺
在第一个版本发布之后,XP团队计算项目的速度。
XP 设计
严格遵循KIS(Keep it simple)原则,设计只要能满足系统和客户在当下的需求就可以了,不需要任何画蛇添足的设计。
鼓励使用CRC卡作为面向对象环境中考虑软件设计的有效机制。
在某个故事设计中遇到困难时,推荐立即建立 可执行原型。
XP 编码
鼓励“测试驱动开发(TDD)”
鼓励“结对编程”
鼓励“重构”
XP 测试
每天进行集成和确认测试(持续集成)
“验收测试” 由客户确定,根据本次软件发布中所实现的用户故事而确定。
Scrum
采用短周期迭代交付方式
SCRUM流程
一个Sprint就是一个迭代,从Sprint计划会议开始到Sprint回顾会议结束为一次迭代。Sprint有严格的时间控制,一般每次Sprint的周期为2-4周,时间到了Sprint就结束
Scrum中的角色
同项目经理类似的Scrum主管:负责维护过程和任务
产品负责人代表利益所有者
开发团队包括了所有开发人员
Scrum的工件(资料、文档)
Product Backlog产品订单
Sprint Backlog冲刺订单
Burndown chart燃尽图
Scrum的活动
Sprint冲刺
Sprint planning meeting冲刺计划会
Daily standup meeting每日立会
Sprint review冲刺评审会
Retrospective meeting回顾会议
Scrum流程的步骤
1.收集Product Backlog,进行分析,细化,理清相互关系,估计工作量
2.选取Product backlog中的任务加入到sprint中,决定当前的冲刺(Sprint)需要解决的事情 — Sprint Backlog,整个产品的实现被划分为几个互相联系的冲刺(Sprint)。
3.开始执行Sprint,一个Sprint即是一次迭代,往往设置为一周到两周,一个标准的sprint包含以下几个环节:
站立会议要求每日都要举行:我昨天做了啥 ,我今天要做啥 ,我碰到了哪些问题
及时更新燃尽图。
4.交付、验收Sprint
得到软件的一个增量版本,产品经理验收。,然后在此基础上又进一步计划增量的新功能和改进。
5.总结Sprint,总结本次sprint什么做得好、什么做的不好、后续应该怎么做。
敏捷的团队
自主管理(Self-managing)、
自我组织(Self-organizing)、
多功能型(Cross-functional)。