丹佛斯(天津)有限公司 商志伟
当今世界科技日新月异,市场的需求随时在发生着变化。传统的瀑布式软件开发模型,对快速变化的需求应对方法显得捉襟见肘,无力应对。敏捷开发模型应运而生。敏捷开发模型的诞生,就是为了应对快速变化的城市需求,提高产品开发速度,快速的拿出可运行的产品,然后再逐步对产品进行优化,最终完成产品的交付。本文将着重介绍敏捷开发概念及其优势,以及如何进行敏捷开发。
想要理解敏捷开发模型,首先要了解另外两个概念:瀑布开发模型和迭代开发模型。瀑布开发模型是最为传统的软件开发模式,包括需求分析,设计,实现,测试和发布。瀑布开发模型的简要流程如图1-1所示:
图1-1 瀑布开发模型的简要流程图
在瀑布开发模型中,整个过程自上而下进行。上一个阶段的输出,是下一个阶段的输入,在前一阶段工作完成之前,不允许进行下一阶段的工作。整个瀑布开发过程的工作量就像瀑布一样,自上而下的流动,不能由下向上反向流动。迭代开发模型的简要流程如图1-2所示:
图1-2 迭代开发模型的简要流程如图
迭代开发模型将传统的瀑布开发模型打散成一个一个小的迭代过程,每个迭代都包含需求分析,设计,实现,测试和发布。迭代开发模型与瀑布开发模型最大的区别在于:不必等到上一阶段工作全部完成,就可以进行下一阶段的工作。每一个迭代,只完成一部分产品功能需求,循序渐进的完成产品的所有功能需求。
敏捷开发是一个以人为本,利用了迭代开发思想的开发方法。敏捷开发不追求项目前期的完成设计和实现,而是致力于用最快的速度开发出可用的软件,然后在后续的迭代中,根据客户的反馈逐步升级和完善软件,最终交付客户满意的产品。
敏捷开发的一个重要优势是项目开发速度“快”。敏捷开发团队使用自我管理、自我组织的管理方式,团队成员拥有最大限度的自由,这极大的激发了每个成员的开发热情和创造力,从而实现了项目开发的“快”。敏捷开发的另一个优势是以人为本,一方面表现为将客户引入到项目团队中来,根据客户的反馈来调整产品功能,使产品更加符合客户的需求;以人为本另一方面表现为,项目成员全部进行自我管理,各个成员拥有最大的自由度来完成各自的任务。
敏捷开发有很多实现形式,如SCRUM,极限编程,特性驱动开发等等。本文着重介绍以SCRUM形式实现敏捷开发。
SCRUM是一种开发流程框架,是一种实现敏捷开发的最佳实践。SCRUM中有一系列工具和角色定义,下面对这些工具和角色进行详细介绍。
Sprint:冲刺周期,一般为2~6周。
User Story:用户故事,即用户的外在业务需求。
Task:开发任务,是由User Story拆分出来的。
Product Backlog:产品待办事项列表,这个列表是有优先级排序的。
Sprint Backlog:冲刺周期待办事项列表,是当前Sprint选出来的产品待办事项的列表,将会在当前Sprint实现并交付。
Sprint Plan Meeting:冲刺计划会,由整个Scrum团队为当前Sprint中要做的工作制定计划。
Daily Stand up Meeting:每日站会,展示项目进度,团队成员各自展示:昨天我做了哪些工作,今天我计划完成哪些工作,以及是否有障碍阻碍团队达成Sprint目标。
Sprint Review Meeting:冲刺评审会,团队成员展示各自在当前Sprint中实现的成果,从客户那里得到对本次成果的反馈,根据用户反馈决定成果是可以交付,还是需要进一步改善。并且,团队成员与客户和其他利益相关者一起,讨论剩余的、变化的或新增的产品需求,对Product Backlog进行维护。
Sprint Retrospect Meeting:冲刺回顾会,Scrum团队检查项目开发以来有哪些不足之处,制定改进方法,并在接下来的Sprint中实现改进方法。
Product Owner:产品负责人,管理产品待办事项列表的唯一责任人。产品负责人的工作包括:清晰的描述产品待办事项;为产品待办事项添加优待级;确保产品待办事项列表对Scrum团队所有成员可见;确保Scrum团队对产品待办事项列表中的内容达到一定程度的理解。
Development Team:开发团队,主要负责完成项目开发任务,将产品待办事项列表中的内容实现为可发布的产品增量。开发团队是自组织的,没人能够命令他们以何种固定的形式实现产品待办事项;开发团队是跨职能的,团队拥有创造产品增量需要的一切技能;开发团队成员之间是平等的,没有上下级的关系;开发团队中的成员可以有自己的特长,但是开发的责任归属于整个开发团队;开发团队不包含像是产品测试或产品需求分析这些负责指定领域的子团队。开发团队成员一般在3~9人之前,团队成员太少的话,没有足够的交互,生产力增长不大,而团队成员太多的话,需要过多的沟通协调工作,影响开发效率。
Scrum Master:Scrum负责人,负责确保团队遵循Scrum的理论、实践和规则。Scrum Master是Scrum团队中的协助式领导。Scrum Master协助产品负责人找到有效管理产品待办事项列表的技巧,清晰地和开发团队沟通项目愿景、产品待办事项列表中的条目,教导开发团队创建清晰简明的产品待办列表条目,理解并实践敏捷开发,推动Scrum各项活动。Scrum Master协助开发团队自组织和跨职能,创造高价值的产品,移除开发团队遇到的障碍,在Scrum还未被完全理解的环境下指导开发团队进行Scrum活动。Scrum Master协助组织采用Scrum,在组织范围内计划Scrum的实施,帮助员工及干系人理解并实施Scrum,发起能提升Scrum团队生产力的变革,与其他Scrum Master一起帮助组织更有效的施行Scrum。
(1)个体和互动高于流程和工具;
(2)工作的软件高于详尽的文档;
(3)客户合作高于合同谈判;
(4)响应变化高于遵循计划。
(1)我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。
(2)欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。
(3)经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
(4)业务人员和开发人员必须相互合作,项目中的每一天都不例外。
(5)激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
(6)不论团队内外,传递信息效果最好和效率最高的方式是面对面的交谈。
(7)可工作的软件是进度的首要度量标准。
(8)敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
(9)坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
(10)以简洁为本,它是极力减少不必要工作量的艺术。
(11)最好的架构、需求和设计出自组织团队。
(12)团队定期地反思如何能提高成效,并依此调整自身的举止表现。
敏捷开发原则是对敏捷价值观的解释和实践,它将敏捷的价值观落实到具体的可操作的原则之上,遵循这十二条原则,是敏捷软件开发项目得以成功的基石。
利用Scrum实施的敏捷开发模型,能够快速响应需求变化,提高项目开发速度,并确保开发的产品确实满足客户的需求,是客户真正想要的产品。
[1]《Scrum要素》作者∶Chris Sims & Hillary Louise Johnson.
[2]《Extreme Programming Explained》作者∶Ken Beck & Cynthia Andres.
[3]《Scrum敏捷软件开发》作者∶Mike Cohn.
[4]《敏捷迭代开发∶管理者指南》作者∶Craig Larman.
[5]《Scrum敏捷项目管理实战》作者∶Ken Schwaber.