敏捷开发的宣言和原则

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

敏捷开发的宣言和原则

宣言:

个体和交互胜过过程和工具

可以工作的软件胜过面面俱到的文档

客户合作胜过合同谈判

响应变化胜过遵循计划

原则:

1.我们最优先做的是通过尽早、持续的交付有价值的软件来使客户满意。 2.即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。

3.经常性地交付可以工作的软件,交付的间隔可以从几周到几个月,交付的时间间隔越短越好。

4.在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。 5.围绕被激励起来的个人来构建项目。给他们提供所需要的环境和支持,并且相信他们能够完成工作。

6.在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈。

7.工作的软件是首要的进度度量标准。

8.敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。

9.不断地关注优秀的技能和好的设计会增强敏捷能力。

10.简单----使未完成的工作最大化的艺术------是根本的。

11.最好的构架、需求和设计出自于自组织的团队。

12.每隔一定时间,团队会在如何才能更有效地工作方面反省,然后相

应地对自己的行为进行调整。

(一)敏捷开发思想之简单最好

极限编程中有一条著名的懒汉原则,称之为KISS原则,KISS是Keep it simple and stupid的缩写。简略地说,就是设计尽量保证简单。极限编程坚持只为今天的需求设计以及编码,而不用考虑明天。这颇有一些“做一天和尚撞一天钟”的意味。

这个原则带来一个问题,那就是我们还需要设计吗?

我们强调设计,其目的就在于设计出合理、优雅的结构,以提供具有良好复用性与可扩展性的系统,这是一种未雨绸缪,为未来考虑。而现在,我们若要遵循KISS原则,就是不再考虑明天的需求。显然,这两者的观点是相悖的。于是,矛盾出现:一方面我们需要保持设计简单,不做无谓的功能预测;另一方面,我们又需要拥抱变化,在尽可能少的改变结构与代码的情况之下,满足未来的需求。

如何解决这个矛盾。让我们先看看提出简单原则的初衷。在《敏捷开发思想之拥抱变化》一篇中,我提到需求的变化是不可避免的。即使是最优秀的需求分析师和架构设计师都不可能在项目之初穷尽所有客户要求的功能,作出最完美的分析与设计,即做到“增之一分则太多,减之一分则太少”。我们需要把握分析和设计的“度”。但事实却是,我们总喜欢越俎代庖,利用自己的经验帮助客户提出需求,而事后证明这些需求往往是多余的。我们总是在重复做着“吃力不讨好”的事情,与其如此,还不如在事先偷懒取巧。因为需求的变化总是不可控的,根据“利益趋避原则”,自然应选择对自己更有利的一个趋向。

但这种简单并不是“简陋”,即使我们不需要考虑明天的需求,一些好的重用原则与可扩展原则仍然需要遵循。例如,我们应尽量保证对象是高内聚、低耦合的;我们应遵循“面向接口编程”原则。

一言以蔽之,我们需要做到:

1、减少依赖;

2、合理抽象;

3、功能最简。

简单设计还需要重构来保证设计的质量。我们之所以敢于奢谈“简单”,正是因为重构的保障。即使设计过于粗陋,合理利用重构也能够亡羊补牢。在重构过程中,我们仍然需要遵循简单原则,仅为当前的需求对系统结构进行重构。例如,我们在最初的需求分析中,只有一个功能要求发送电子邮件。那么,我们可以编写一个方法来封装发送电子邮件的实现,这个方法甚至可以放在业务对象的私有方法中。随着需求的逐步演进,新增的几个功能同样需要发送电子邮件,此时就有必要利用重构技术,将原来发送电子邮件的方法独立到单独的类中。但是,基于简单原则,我们没有必要完善所有功能,例如增加发送Meet Request的功能。因为目前的需求并不需要。

“简单”并不只限于设计。在敏捷开发过程中,我们还需要保证项目计划的简单,以及文档的简单,乃至于过程的简单。项目计划的简单可以由小步行进的迭代周期来保证,通过对项目阶段的分解,简化项目计划。至于文档的简单,我们完全可以抛弃复杂标准的文档模板,转而书写仅仅是自己需要关注的内容。至少,项目内部的文档完全可以言之有物,而不需要注重形式。我们还可以通过对项目过程进行裁剪,来保障过程的简单性。事实上,在极限编程中,很多原则和实践都是为了实现简单而提出的。例如计划游戏、小版本、简单设计,包括持续集成和代码所有权,都是为了提高开发过程的效率,这实际上也是简单的一种体现。

“简单最好”是一种心态,更是一条原则。

(二)敏捷开发思想之拥抱变化

秉承敏捷宣言的精神(个体与交付重于过程和工具;可用的软件重于完备的文档;客户协作重于合同谈判;响应变化重于遵循计划),我认为,敏捷开发大致应该体现如下的思想:拥抱变化、自我组织、简单最好、客户至上、有效沟通、精益求精。

1、拥抱变化

Kent Beck和Martin Fowler在介绍极限编程(eXtreme Programming)时,最先提到的就是要拥抱变化。这基本上代表了敏捷阵营对于变化的一种态度,那就是不拒绝,而且还要主动求变。有一句经典的论断说得好:“在软件开发领域中,唯一的不变就是变化。”其实,不仅仅是软件开发领域,世间万事万物都处在永恒的变化之中,这是宇宙的基本规律。奥巴马在竞选美国总统的时候,提出的口号就是“变化”。变化才是真正的常态。

传统的软件开发过程由于过分强调文档的完整,重视与客户的谈判与签订合同。所以,开发团队最希望的一件事情是冻结需求规格说明书。只要双方签字,需求就确定下来,不可更改。若要更改,必须经过需求变更委员会,走非常严格的需求变更流程。如果软件开发真能如此,倒也算是我们开发人员的幸事。但现实总是残酷的,需求总是会变化。变化的原因有以下几种:1)业务发生了变化;

2)客户对业务的理解发生了变化;

3)需求分析人员对需求的理解出现了偏差,需要修正。

对于第一点,或许我们还能够根据合同与客户讨价还价,而对于后两点,尤

相关文档
最新文档