敏捷软件开发是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。敏捷,顾名思义,就是具有快速,灵活,高效等特点。敏捷过程很容易适应变化并并且做出调整,在保证质量的前提下做到文档适度适量。
----------敏捷开发的背景
一:现在软件越来越复杂
二:需求越来越多变
三:过程越来越规范
-----------敏捷开发的价值观
* 注重个人以及互动胜过过程和工具
*注重可用的软件胜过详尽的文档
*注重客户协作胜过合同谈判
*注重响应变化胜过恪守变化
-----------敏捷宣言12条
我们遵循以下原则: We follow these principles:
- 我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。 Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- 欢迎需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。 Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
- 经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。 Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
- 业务人员和开发人员必须相互合作,项目中的每一天都不例外。 Business people and developers must work together daily throughout the project.
- 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。 Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
- 不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。 The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
- 可工作的软件是进度的首要度量标准。 Working software is the primary measure of progress.
- 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。 Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
- 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。 Continuous attention to technical excellence and good design enhances agility.
- 以简洁为本,它是极力减少不必要工作量的艺术。 Simplicity--the art of maximizing the amount of work not done--is essential.
- 最好的架构、需求和设计出自自组织团队。 The best architectures, requirements, and designs emerge from self-organizing teams.
- 团队定期地反思如何能提高成效,并依此调整自身的举止表现。 At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
敏捷开发的方法:
极限编程XP、Scrum、精益软件开发、动态系统开发、特性驱动开发和水晶开发。
极限编程是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。
Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。包括了一系列实践和预定义角色的过程骨架。Scrum中的主要角色包括同项目经理类似的Scrum主管角色负责维护过程和任务,产品负责人代表利益所有者,开发团队包括了所有开发人员。
精益软件开发一词起源于Mary Poppendieck 和Tom Poppendieck写的一本同名书籍。这本书将传统的精益原则以一种新的方式呈现---作为22种敏捷开发实践工具之一,并且和其他工具进行了比较。
Mary 和 Tom's 在敏捷软件开发社区中提出的改进,包括在敏捷开发会议上的几次演讲,已经形成了被敏捷开发社区广泛接受的概念。 例如:咨询公司NetObjectives 和C.C. Pace 就使用了“精益-敏捷”以及其他一些列入的概念。
特征驱动开发(FDD-Feature Driven Development)方法是敏捷软件开发过程中的一种,它强调特性驱动,快速迭代,即能保证快速开发,又能保证适当文档和质量,非常适合中小型团队开发管理。它提出的每个功能开发时间不超过两周,为每个用例user case限定了粒度,具有良好可执行性,也可以对项目的开发进程进行精确及时地监控。它抓住了软件开发的核心问题领域,即正确和及时地构造软件。FDD还打破了传统的将领域和业务专家/分析师与设计者和实现者隔离开来的壁垒。分析师被从抽象的工作中解脱出来,直接参与到开发人员和用户所从事的系统构造工作中。
C rystal Methods(水晶方法族)由Alistair Cockburn在20实际90年代末提出。之所以是个系列,是因为他相信不同类型的项目需要不同的方法。虽然水晶系列不如XP那样的产出效率,但会有更多的人能够接受并遵循它。其目的是发展一种提倡“机动性的”方法,包含具有共性的核心元素,每个都含有独特的角色、过程模式、工作产品和实践。
以上几种方法的共同点如下:
迭代式开发
增量交付
开发团队和用户反馈推动产品开发
持续集成
开发团队自我管理
敏捷团队包括3个核心角色: PO(Product Owner)、Scrum Master(Scrum教练)和Team(开发产品