`
sunguanxing
  • 浏览: 1083759 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

什么是敏捷开发?

阅读更多
 【IT专家网独家】最近一段时间以来,很多人开始谈论敏捷开发、研究敏捷开发,那么究竟什么才是敏捷开发呢?

  简单的说,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。 敏捷开发是由一些业界专家针对一些企业现状提出了一些让软件开发团队具有快速工作、响应变化能力的价值观和原则,并于2001初成立了敏捷联盟。他们正在通过亲身实践以及帮助他人实践,揭示更好的软件开发方法。

  敏捷开发(agile development)概念从2004年初开始广为流行。Bailar非常支持这一理论,他采取了"敏捷方式"组建团队:Capital One的"敏捷团队"包括3名业务人员、两名操作人员和5~7名IT人员,其中包括1个业务信息指导(实际上是业务部门和IT部门之间的"翻译者");另外,还有一个由项目经理和至少80名开发人员组成的团队。这些开发人员都曾被Bailar送去参加过"敏捷开发"的培训,具备相关的技能。

  每个团队都有自己的敏捷指导(Bailar聘用了20个敏捷指导),他的工作是关注流程并提供建议和支持。最初提出的需求被归纳成一个目标、一堆记录详细需要的卡片及一些供参考的原型和模板。在整个项目阶段,团队人员密切合作,开发有规律地停顿--在9周开发过程中停顿3~4次,以评估过程及决定需求变更是否必要。在Capital One,大的IT项目会被拆分成多个子项目,安排给各"敏捷团队",这种方式在"敏捷开发"中叫"蜂巢式(swarming)",所有过程由一名项目经理控制。

  为了检验这个系统的效果,Bailar将项目拆分,从旧的"瀑布式"开发转变为"并列式"开发,形成了"敏捷开发"所倡导的精干而灵活的开发团队,并将开发阶段分成30天一个周期,进行"冲刺"--每个冲刺始于一个启动会议,到下个冲刺前结束。

  在Bailar将其与传统的开发方式做了对比后,他感到非常兴奋--"敏捷开发"使开发时间减少了30%~40%,有时甚至接近50%,提高了交付产品的质量。"不过,有些需求不能用敏捷开发来处理。" Bailar承认,"敏捷开发"也有局限性,比如对那些不明确、优先权不清楚的需求或处于"较快、较便宜、较优"的三角架构中却不能排列出三者优先级的需求。此外,他觉得大型项目或有特殊规则的需求的项目,更适宜采用传统的开发方式。尽管描述需求一直是件困难的事,但经过阵痛之后,需求处理流程会让CIO受益匪浅。

  敏捷开发是由一些业界专家针对一些企业现状提出了一些让软件开发团队具有快速工作、响应变化能力的价值观和原则,并于2001初成立了敏捷联盟。他们正在通过亲身实践以及帮助他人实践,揭示更好的软件开发方法。通过这项工作,他们认为:

  个体和交互 胜过 过程和工具
  可以工作的软件 胜过 面面俱到的文档
  客户合作 胜过 合同谈判
  响应变化 胜过 遵循计划
  并提出了以下遵循的原则:

  我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
  即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。
  经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
  在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
  围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
  在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。
  工作的软件是首要的进度度量标准。
  敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。
  不断地关注优秀的技能和好的设计会增强敏捷能力。
  简单是最根本的。
  最好的构架、需求和设计出于自组织团队。
  每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
  关于敏捷开发的方法研究

  (一)注: 本文是阅读Alistair Cockburn的Agile Software Development和William C. Wake的XP Explored的一些笔记和想法,Agile Software Development是一组软件开发方法的总称,包括(Crystal , Extreme Programming , Adaptive software development等等)。敏捷开发方法又称为“轻量级”开发方法。

  下面这段话摘自Martin Fowler的一篇文章:

  从无到繁重再到敏捷

  多数软件开发仍然是一个显得混乱的活动,即典型的“边写边改” (code and fix)。设计过程充斥着短期的,即时的决定,而无完整的规划。这种模式对小系统开发其实很管用,但是当系统变得越大越复杂时,要想加入新的功能就越来越困难。同时错误故障越来越多,越来越难于排除。一个典型的标志就是当系统功能完成后有一个很长的测试阶段,有时甚至有遥遥无期之感,从而对项目的完成产生严重的影响。

  我们使用这种开发模式已有很长时间了,不过我们实际上也有另外一种选择,那就是“正规方法”(methodology)。这些方法对开发过程有着严格而详尽的规定,以期使软件开发更有可预设性并提高效率,这种思路是借鉴了其他工程领域的实践。

  这些正规方法已存在了很长时间了,但是并没有取得令人瞩目的成功,甚至就没怎么引起人们的注意。对这些方法最常听见的批评就是它们的官僚繁琐,要是按照它的要求来,那有做太多的事情需要做,而延缓整个开发进程。所以它们通常被认为是“繁琐滞重型”方法,或Jim HighSmith 所称的“巨型”(monumental)方法。

  作为对这些方法的反叛,在过去几年中出现了一类新方法。尽管它们还没有正式的名称,但是一般被称为“敏捷型”方法。对许多人来说,这类方法的吸引之处在于对繁文缛节的官僚过程的反叛。它们在无过程和过于繁琐的过程中达到了一种平衡,使得能以不多的步骤过程获取较满意的结果。

  敏捷型与滞重型方法有一些显著的区别。其中一个显而易见的不同反映在文档上。敏捷型不是很面向文档,对于一项任务,它们通常只要求尽可能少的文档。从许多方面来看,它们更象是“面向源码”(code-oriented)。事实上,它们认为最根本的文档应该是源码。

  但是,我并不以为文档方面的特点是敏捷型方法的根本之点。文档减少仅仅是个表象,它其实反映的是更深层的特点:

  ? 敏捷型方法是“适配性”而非“预设性”。 重型方法试图对一个软件开发项目在很长的时间跨度内作出详细的计划,然后依计划进行开发。这类方法在计划制定完成后拒绝变化。而敏捷型方法则欢迎变化。其实,它们的目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。

  ? 敏捷型方法是“面向人”的(people-oriented) 而非“面向过程”的 (process-oriented)。 它们试图使软件开发工作顺应人的天性而非逆之。它们强调软件开发应当是一项愉快的活动。

  我认为以上两个特点很好的概括了敏捷开发方法的核心思想:适应变化和以人为中心

  (二) 方法背后的思想

  Alistair Cockburn在Agile Software Development中讲述了敏捷开发方法背后的思想

  人们掌握过程(process)可以分为3个阶段:

  1 following 遵循一个定义好的process

  2 detaching 知道不同process的适用范围,在不同的场合使用不同的process

  3 fluent 不关心是否遵循特定的process,知道在什么情况下采用什么动作

  软件开发是一个充满发明和交流的协作性游戏(cooperative game of invertion and communication)。软件开发的首要目标是生产出软件,遵循特定的过程和模型只是手段,只要传递了足够的信息,手段是次要的。交流的效果要远远重于交流的形式(Effect of communication is more important than the form of communication)。

  一般软件开发有两个目标:1 尽快的生产出软件 2 为下一个team或项目做准备,有时这两个目标是矛盾的,我们要在这两个目标之间寻求平衡

  在软件开发中,人的因素要远远大于过程和技术。人是有缺陷的:

  1 容易犯错误,因此必须在错误扩散之前找到并改正错误

  2 当觉得可能失去较多的时候,不愿意冒险

  3 重新构造而不愿意重复使用已有的东西

  4 难于坚持一个习惯

  针对个人因素的几个建议:

  1 具体的模型较抽象的模型更容易理解

  2 从一个例子开始是容易的

  3 通过观察他人的成果学习

  4 要有足够的不受打扰的时间

  5 分配的工作要与个人意向,能力匹配

  6 不正确的奖励会有坏作用,从长期看个人兴趣比奖励更重要,培养在工作中的自豪感:

  1) pride in work参与工作的自豪感,通常参与一个重要的工作会有自豪感

  2) pride in accomplishment 完成工作的自豪感,长期未完的工作会使士气低落

  3)pride in contribution 为他人贡献的自豪感

  7 鼓励关心其他人的工作和整体的工作

  在一个团队之间,交流是最重要的,实践证明面对面的实时的交流是最有效的,对交流的延误会损失信息,白板是最好的交流工具,交流工具的先进并不能提高交流效果。文档的作用是记录和备忘,不能通过文档交流。

 敏捷开发方法要避免的过程设计的几个常见错误

  1 对所有的项目使用同一种过程

  2 没有弹性

  3 过于沉重

  4 增加不必要的“必须完成”(“should do” is really should?)

  5 没有经过实践检验

  敏捷开发方法过程设计的几个原理:

  1 交互的面对面的交流是代价最小,最迅速的交换信息的方法

  2 超过实际需要的过程是浪费的

  3 大的团队需要重量级方法

  4 处理重大问题的项目需要重量级方法强调

  5 增加反馈和交流可以减少中间产品和文档的需求

  6 轻量级方法更强调理解(understanding),自律(discipline)和技能(skill),重量级方法更强调文档(documentation),过程(process)和正式(formality)

  understanding指整个团队关于项目的全部知识,包括讨论的过程,documentation只能记录其中的一部分
  discipline是指个人主动的完成工作,process指个人根据指令完成工作
  skill指具有良好技能的人可以省略中间的产品,formality指必须按照规定步骤完成工作
  7 确定开发中间的瓶径,提高它的效率

  对于瓶径处的工作应该尽量加快,减少重复,(使用更熟练的人,使用更多的人,使用更好的工具,使瓶径处的工作的深入尽量稳定)对于非瓶径处的工作可以多一些重复,在输入还不确定的情况下也可以尽早开始。

  这些原理的几个结论:

  1 向一个项目增加人员要花费较大代价(constly),因为原有人员和新人员之间的交流要花费大量时间

  2 团队的规模经常是跳跃的,例子:需要6个熟练的程序员,但是只有4个,于是增加不熟练的程序员,结果团队的大量时间花费在培训不熟练的程序员上面,最后增加到了20个不熟练的程序员。

  3 应该侧重于提高团队的技能而不是扩充团队

  4 对不同的项目使用不同的过程

  5 在适用的条件下,轻量级的方法优于重量级的方法

  6 对不同的项目要裁减过程

  总而言之,敏捷开发方法的原则是“刚刚好”(Light and Sufficient)
http://database.ctocio.com.cn/analysis/146/7773646_2.shtml
分享到:
评论

相关推荐

    敏捷开发的艺术

    , 本书为以下问题提供了明确的答案:, 怎样才能采用敏捷开发?, 我们真的需要结对编程吗?, 汇报应该详细到什么程度?, 如果无法让客户参与进来该怎么办?, 我们应该编写多少文档?, 何时进行设计和架构?, 作为一名非开发...

    敏捷开发 敏捷开发 敏捷开发 敏捷开发

    敏捷开发敏捷开发敏捷开发敏捷开发敏捷开发敏捷开发敏捷开发敏捷开发敏捷开发敏捷开发敏捷开发敏捷开发

    论文研究 - 敏捷开发:探索从业者想知道的东西

    c)如何从计划驱动的Waterfall开发过渡到敏捷开发? d)有哪些工具可用于实施敏捷开发? 如何使用它们来支持敏捷实践? 以下是我们从解释性案例研究中针对上述四个问题得出的答案:a)优秀的敏捷从业人员根据客户的...

    敏捷开发项目流程介绍,什么是敏捷开发

    敏捷开发

    敏捷开发知识体系

    主要内容包括:敏捷开发的哲学理念、价值观、敏捷开发方法框架和敏捷实践,企业敏捷转型参考框架,帮助企业回答为什么要进行敏捷转型,敏捷转型包含哪些内容和如何开展敏捷转型等问题。 第1章 敏捷开发知识体系总体...

    软件项目管理论文:敏捷在软件开发中的应用

    本文从敏捷方法的定义,提出背景,实施方法等方面对敏捷方法进行描述,并与传统软件工程方法相对比,分析敏捷开发的优劣。通过实际软件开发的案例分析软件生产的价值观,得出敏捷方法在软件开发中的价值。关键词:...

    Scrum敏捷框架培训.pptx

    什么是软件过程?什么是敏捷开发?什么是Scrum?....本资源详细为您解答

    敏捷开发模式.xls

    通俗易懂的解释了什么是敏捷开发模式!敏捷开发带来的好处和优点!传统的瀑布开发模式有哪些弊端,敏捷开发模式和瀑布开发模式的比较和不同!

    UML和模式应用期末复习资料

    什么是敏捷开发? 请说明对象图的适用场景以及它的优缺点? 什么是UP的阶段? 用例和使用场景之间是什么关系?与协作又是什么关系? 在用例图中参与者是什么,它属于系统范围之内吗? 请简要阐述在软件开发过程中...

    敏捷开发管理试题及参考答案.pdf

    敏捷开发管理试题及参考答案.pdf敏捷开发管理试题及参考答案.pdf敏捷开发管理试题及参考答案.pdf敏捷开发管理试题及参考答案.pdf敏捷开发管理试题及参考答案.pdf敏捷开发管理试题及参考答案.pdf敏捷开发管理试题及...

    敏捷软件开发敏捷软件开发

    敏捷软件开发敏捷软件开发敏捷软件开发敏捷软件开发敏捷软件开发敏捷软件开发敏捷软件开发敏捷软件开发

    敏捷开发、极限编程

    什么是敏捷开发?一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和 可运行的特征。简言之,是把一个大项目分为多个相互联系,...

    敏捷开发中编写高质量Java代码

    敏捷开发的理念已经流行了很长的时间,在敏捷开发中的开发迭代阶段中,我们可以通过五个步骤,来有效的提高整个项目的代码质量。 Java项目开发过程中,由于开发人员的经验、Java代码编写习惯,以及缺乏统一的标准和...

    最完整的Scrum敏捷软件开发过程.ppt

    什么是敏捷软件开发? 敏捷方法的项目计划 敏捷项目管理和传统项目管理 为什么使用敏捷? Scrum概述 Scrum的角色 Scrum实践和工作产品 敏捷开发中的估计方法 测试驱动开发 Scrum应用 支持工具和模版 一些常见的...

    敏捷开发-敏捷软件开发:原则、模式与实践

    在本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导...这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。

    CSDN_敏捷开发相关文档全收集_5

    公司项目需要利用敏捷开发模式进行开发,故在CSDN上进行相关资料的查找搜集。27个资料,293 MB,花费了150多积分.现将所有查到的文档进行分包压缩,贡献给大家。因为实在花的积分过多,请原谅我不是无偿的。每个...

    敏捷开发,敏捷开发,敏捷开发,敏捷开发

    这里不做详细说明,这本书是讲开发人员团队合作的一种方式,45个变成习惯

    华为敏捷开发介绍

    华为敏捷软件开发解读 为落实敏捷软件开发在我司的顺利推行,使广大软件开发管理者和开发人员深刻领会敏捷核心理念,熟练掌握敏捷实践方法,从而达到增强...敏捷学习参考材料包括:《华为敏捷开发解读》及相关附件。

    华为敏捷开发介绍(华为敏捷软件开发解读V1.01).ppt

    华为敏捷开发,devops,敏捷开发流程,需求分析,华为管理流程

Global site tag (gtag.js) - Google Analytics