敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。敏捷开发的原则包括:
①最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
②即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。
③经常性的交付可以工作的软件,交付的间隔可以从几周到几个月,交付的时间间隔越短越好。但不要求每次交付的都是系统的完整功能。
④在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
⑤围绕被激励起来的人来构建项目。给他们提供所需要的环境和支持,并且信任他们能够完成工作。
⑥在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈。
⑦工作的软件是首要进度度量标准。
⑧敏捷过程提供持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。
⑨不断地关注优秀的技能和好的设计会增强敏捷能力。
⑩简单——使未完成的工作最大化的艺术——是根本的。
⑪最好的构架、需求和设计出自于团队内部。
⑫每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
敏捷开发包括一系列的方法,主流的有如下7种:
①XP。XP (极限编程)的思想源自Kent Beck和Ward Cunningham在软件项目中的合作经历。XP注重的核心是沟通、简明、反馈和勇气。因为知道计划永远赶不上变化,XP无需开发人员在软件开始初期做出很多的文档。XP提倡测试先行,为了将以后出现bug的几率降到最低。
②SCRUM。SCRUM是一种迭代的增量化过程,用于产品开发或工作管理。它是 一种可以集合各种开发实践的经验化过程框架。SCRUM中发布产品的重要性高于一切。 该方法由KenSchwaber和Jeff Sutherland提出,是旨在寻求充分发挥面向对象和构件技术的开发方法,是对迭代式面向对象方法的改进。
③ Crystal Methods。Crystal Methods (水晶方法族)由 Alistair Cockbum 在20世纪90年代末提出。之所以是个系列,是因为他相信不同类型的项目需要不同的方法。虽然水晶系列不如XP的产出效率高,但有更多的人能够接受并遵循它。
④ FDD。FDD (特性驱动开发)由 PeterCoad、Jeff de Luca 和 Eric Lefebvre 共同开发,是一套针对中小型软件开发项目的开发模式。此外,FDD是一个模型驱动的快速迭代开发过程,它强调的是简化、实用、易于被开发团队接受,适用于需求经常变动的项目。
⑤ASD。ASD (自适应软件开发)由Jim Highsmith在1999年正式提出。ASD强调开发方法的适应性,这一思想来源于复杂系统的混纯理论。ASD不像其他方法那样有很多具体的实践做法,它更侧重为ASD的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。
⑥DSDM。DSDM (动态系统开发方法)是众多敏捷开发方法中的一种,它倡导以业务为核心,快速而有效地进行系统开发。实践证明DSDM是成功的敏捷开发方法之一。在英国,由于其在各种规模的软件组织中的成功,它已成为应用最为广泛的快速应用开发方法。DSDM不但遵循了敏捷方法的原禅,且也适合那些成熟的传统开发方法有坚实基础的软件组织。
⑦轻量型RHRUP其实是个过程的框架,它可以包容许多不同类型的过程,Craig Lannan极力主张以敏捷型方式来使用RUP。他的观点是:目前如此众多的努力以推进敏捷型方法,只不过是在接受能被视为RUP的主流00开发方法而已。