敏捷软件开发方法
敏捷,顾名思义,就是轻巧、机敏、迅捷、灵活、活力、高效。。。。,敏捷过程很容易适应变化并迅速做出自我调整,在保证质量的前提下,做到文档、度量适度。敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。
敏捷开发由几种轻量级的软件开发方法组成。他们包括:极限编程(XP)、Scrum、精益开发(Lean Development)、动态系统开发方法(DSDM)、特征驱动开发(Feature Driver Development)、水晶开发等等。
(1)、极限编程(XP):极限编程( XP )的主要目的是降低需求变化的成本。它引入一系列优秀的软件开发方法,并将它们发挥到极致。比如,为了能及时得到用户的反馈, XP 要求客户代表每天都必须与开发团队在一起。同时, XP 要求所有的编程都采用结对编程( pair-programming )的方式。这种方式是传统的同行审查( peer review )的一种极端表现,或者可以说是它的替代方式。
XP过程:
XP 定义了一套简单的开发流程,包括:编写用户案例,架构规范,实施规划,迭代计划,代码开发,单元测试,验收测试等等。
XP思想:
像所有其他敏捷方法一样, XP 预期并积极接受变化。它具有以下的价值观或原则:
◎ 互动交流。团队成员不是通过文档来交流,文档不是必须的。团队成员之间通过日常沟通,简单设计,测试,系统隐喻以及代码本身来沟通产品需求和系统设计。
◎反馈。反馈是一种信息的交流,能使系统更加完善。反馈与交流密切相关,客户使用或功能测试,单元测试等都能为开发团队提供反馈信息。同时,开发团队也可以通过估计和设计用户案例的方式将信息反馈给客户。
◎ 简单。 XP 提倡简单的设计,简单的解决方案。 XP 总是从一个简单的系统入手,并且只创建今天,而不是明天,需要的功能模块。因为它认为,创建明天需要的功能模块可能会由于需求的变化而成为浪费。
◎ 勇气。 XP 在这一点所要达到的目的(我们认为)是鼓励一些有较高风险的良好的做法。例如,它要求程序员尽可能频繁地重构代码,必须删除过时的代码,不解决技术难题就不罢休,等等。
◎ 团队。 XP 提倡团队合作,相互尊重。 XP 以建立并激励团队为一项重要任务。同时它把互相尊重和实际的开发习惯相结合。比如,为了尊重其他团队成员的劳动成果,每个人不得将未通过单元测试的代码集成到系统中。因此,每个人的代码质量必须过关。
XP核心做法:
◎ 小规模,频繁的版本发布,短迭代周期。
◎ 测试驱动开发( Test-driven development )。
◎结对编程( Pair programming )。
◎持续集成( Continuous integration )。
◎每日站立会议( Daily stand-up meeting )。
◎共同拥有代码 Collative code ownership.
◎系统隐喻( System metaphor )。
(2)、Scrum
SCRUM是一个敏捷开发框架,它是由一个开发过程,集中角色以及一套规范的实施方法组成。它可以被运用于软件开发,项目维护,也可以被用来作为一种管理敏捷项目的框架。
其四种角色:
◎产品拥有者(Product Owner):该角色负责产品的远景规划,平衡所有的利益相关者的利益,确定不同的产品需求鸡鸭的优先级等。它是开发团队和客户或最终用户之间的联络点。
◎利益相关者(Stakeholder):该角色与产品之间有直接或间接的利益关系,通常是客户或最终用户代表。他们负责收集编写产品需求,审查项目成果等。
◎Scrum专家(Scrum Master):Scrum专家负责指导开发团队进行Scrum开发与实践。它也是开发团队与产品拥有者之间交流的联络点。
◎团队成员(Team Member):项目开发人员。
(3)、精益开发(Lean Development)
核心思想:精益开发的核心思想是查明和消除浪费。在软件开发过程中,错误( bugs ),没用的功能,等待以及其他任何对实现结果没有益处的东西都是浪费。浪费及其源头必须被分析查明,然后设法制止。
原则包括 :
◎强调学习。软件开发过程是一个不断学习的过程。每个团队成员都需要从日常的失败,互动,交流以及信息反馈中学习,不断改进所开发的产品和效率。
◎不做长久的计划。尽量不要在可能改变的事情上做无谓的努力,这样才能有效的避免浪费。
◎尽量缩短迭代周期。较短的迭代周期能够加速产品的开发及交付,加快交流,提高生产力。
◎充分的自主权。激励团队并让所有团队成员自我管理始终是所有敏捷方法获得成功的基本因素之一。
◎完整性。确保整个系统正常工作,同时真正满足客户的需求是整个团队需要努力实现的完整性。
◎ 全局观。精益开发强调整体优化的系统。无论开发的组织还是被开发的产品, 从整体上考虑优化比从各个局部去优化更高效。
对于上述的每个原则,都有一些相应的工具对其加以实现。这些工具包括价值流图( Value Stream Mapping ),基于集合的开发( set-based development ),拉系统( pull system ),排队论( queuing theory ),等等。
(4)、动态系统开发
动态系统开发是众多敏捷开发方法中的一种,它倡导以业务为核心,快速而有效的进行系统开发。
基本原则:
◎ 用户必须持续参与;
◎ 必须授予DSDM团队制定决策的权利;
◎ 注重产品经常交付;
◎ 满足业务用户用途是接受交付品的主要依据;
◎ 迭代和增量式开发对得到正确的业务解决方案是必不可少的;
◎ 开发过程的所有变化可逆;
◎ 在高层次上制定需求基线;
◎ 测试自始至终贯穿于开发周期中;
◎ 所有项目涉众间的通力合作是不可或缺的。
(5)、特征驱动开发
特征驱动开发( FDD )是另一种敏捷开发方式,它将用户的功能需求划分成更小的功能特征,然后逐步地在每个迭代周期中开发实现这些产品特征。与 DSDM 方式一样, FDD 仍然会在项目初期对整个项目做较大的规划和建模,以获得对该系统的全面了解。但是相比较 DSDM 来说, FDD 在这些方面更简捷。
(6)、水晶开发
Cockburn除了归纳整理他自己的实践经验以外,他还积极地造访其他项目,和项目组成员进行广泛的讨论, 考察这些项目是怎样运作的。
水晶方法适用于一个办公室内的一个小组,2~8人。
角色有: sponsor发起人,任务下达者
Senior Designer-Programmer 高级设计开发人员,总设计师
Designer-Programmer 设计开发人员
User 用户
其中一个人是项目协调者(Project Coordinator)。Senior Designer-Programmer是关键人员
水晶方法的七大体系特征:经常交付、反思改进、渗透式交流、个人安全、焦点、与专家用户建立方便的联系、配有自动测试、配置管理和经常集成功能的技术环境。
尽管水晶方法并不要求掌握或者运用某些特定的策略或方法,但倘若在启动阶段能熟识一套有效的方法体系则是件有利的事情。水晶推荐的,非常具有意义且广为现代敏捷开发团队所采用的策略有:360度全方位考察、早期胜利、灵活程序框架、增量重建、信息传播器。
推荐的具体方法有:方法体系建成法、反思研讨会、闪电式计划、利用专门排列技术的特尔菲估计、每日起立会议、实质性交互设计、流程微观模型、肩并肩编程、燃烧图表。