什么是RUP,什么是敏捷开发,什么是XP(极限编程)

时间:2024-04-15 17:41:29

 

1:什么是RUP

RUP(Rational Unified Process)是IBM Rational software提出的软件工程实施过程,在业界经历了数千个软件项目的实践,是当前最为成功的软件工程方法论之一!RUP是一种迭代的、以架构为中心 的、用例驱动的软件开发方法;RUP是一种具有明确定义和结构的软件工程过程,它明确规定了人员的职责、如何完成各项工作以及何时完成各项工作,以及软件 开发生命周期的结构,定义了主要里程碑和决策的关系;RUP也是一个过程产品,提供了可定制的软件工程的过程框架,支持过程定制、过程创作和多种类型的开 发过程,可通过装配过程产品得到过程配置。RUP配置可以用于不同规模的开发团队和规范程度不同的开发方法,RUP产品包含过程配置和过程视图,以指导项 目经理、开发人员、测试人员等角协作开发软件。

RUP的核心包含几个基本原理,它们支持应用迭代方法进行软件开发:


尽早并且不断的化解重大风险 
确保满足客户的需求 
把注意力集中放到可执行的软件上 
尽早在项目中适应变化 
在早期确定一个可执行架构 
使用构件构造软件系统 
建立高效团结的开发团队 
始终重视质量 
从管理角度观察RUP,即业务和经济方面,对应项目的进展,软件生命周期包括四个阶段:

起始阶段-构建最终产品的设想和业务案例,确定项目范围 
细化阶段-计划必要的活动和资源,详细确定功能并设计架构 
构建阶段-构建产品,直到一个可交付用户的产品完成 
移交阶段-产品交付用户,包括制造、交付、培训、支持、维护等


从技术角度看,软件开发可视为一连串的迭代过程,通过迭代开发软件得以增量演进,每个迭代都以一个可执行的产品发布而结束,每次发布都伴随支持性工件:版 本描述、用户文档等。一次迭代可包括以下活动:计划、分析、设计、实现、测试,据其在开发周期的位置不同,所占比重也不同。

 

2:什么是敏捷过程

敏捷方法是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。
 

敏捷开发

编辑
敏捷开发(agile development)是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
敏捷开发是全新理论吗?答案莫衷一是。细心的人们可以发现,敏捷开发其实借鉴了大量软件工程中的方法。迭代与增量开发,这两种在任何一本软件工程教材中都会被提到的方法,在敏捷开发模式中扮演了很重要的角色。再向前追溯,我们还也可见到瀑布式与快速原型法的影子,也许还有更多。
改善,而非创新。敏捷开发可理解为在原有软件开发方法基础上的整合——取其精华,去其糟粕。因此敏捷开发继承了不少原有方法的优势。“在敏捷软件开发的过程中,我们每两周都会得到一个可以工作的软件,”Fowler介绍,“这种非常短的循环,使终端客户可以及时、快速地看到他们花钱构建的软件是一个什么样的结果。”
也许是因为时间关系,Fowler只说出了这些优势中的一部分。允许开发过程中的需求变化、通过早期迭代可以较早发现风险、使代码重用变得可行、减少项目返工……借鉴了众多先进方法和丰富经验,拥有的众多优势使得敏捷开发看来已经成为解决软件危机的标准答案。
问题与思考
  然而,我们不得不面对的现实却是,模式与方法的优化并不意味着问题的终结。作为一种开发模式,敏捷开发同样需要面对众多挑战。
大项目的拆分意味着更多子项目的出现,协调这些同步或异步推进的子项目,合理的资源调配都将变得更加复杂。另外,在当前项目和项目组普遍“增容”的情况下,遇到的问题同样成倍增长。人的重要性被提到了更高的高度,而缺乏有效协调手段,减少人员流动和项目变更对整个项目造成的影响也将成为一大挑战……新方法带来众多便利的同时,也相应引发了几乎同样多的问题。
敏捷开发(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初成立了敏捷联盟。他们正在通过亲身实践以及帮助他人实践,揭示更好的软件开发方法。通过这项工作,他们认为:
  • 个体和交互 胜过 过程和工具
  • 可以工作的软件 胜过 面面俱到的文档
  • 客户合作 胜过 合同谈判
  • 响应变化 胜过 遵循计划
并提出了以下遵循的原则:
      • 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
      • 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。
      • 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
      • 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
      • 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
      • 在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。
      • 工作的软件是首要的进度度量标准。
      • 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。
      • 不断地关注优秀的技能和好的设计会增强敏捷能力。
      • 简单是最根本的。
      • 最好的构架、需求和设计出于自组织团队。
    • 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。

 

 

3:什么是XP

XP(极限编程)极限编程(Extreme Programming,XP)是一门针对业务和软件开发的规则,它的作用在于将两者的力量集中在共同的、可以达到的目标上。它是以符合客户需要的软件为目标而产生的一种方法论,XP使开发者能够更有效的响应客户的需求变化,哪怕是在软件生命周期的后期。它强调,软件开发是人与人合作进行的过程,因此成功的软件开发过程应该充分利用人的优势,而弱化人的缺点,突出了人在软件开发过程中的作用。极端编程属于轻量级的方法,认为文档、架构不如直接编程来的直接。

中文名 极限编程
属 性 软件开发
计划策略 The Planning Game
外文名 Extreme Programming,XP
结对编程 Pair programming

特点介绍

XP 是与众不同的,它有点像快步的舞蹈。XP包括许多的小卡片,独立的看,这些小卡片没有甚么意义,但是当它们组合在1起,1幅完全的美丽的图片就能够看见,对传统软件开发,它是软件开发的1种新的重要的发展。它改变了用户开发程序的传统思惟方式。下面用户将介绍它带给我们那些改变。[1]

于轻量开发方法中较有影响的1种方法。轻量开发方法是相对传统的重量开发方法而言。简单地理解,“量”的轻重是指用于软件进程管理和控制的、除程序量之外的“文档量”的多少。XP等轻量开发方法认识到,在当前很多情况下,按传统观念建立的大量文档,1方面需要消耗大量开发资源,同时却已失去帮助“预感、管理、决策和控制的根据”的作用。因此必须重新审视开发环节,去除臃肿累坠,轻装上阵。

核心思想

从长远看,初期发现毛病和下降复杂度可以节俭本钱。极限编程强调我们将任务/系统细分为可以在较短周期解决的1个个子任务/模块,并且强调测试、代码质量和尽早发现问题。通常,通过1个个短小的迭代周期,我们就能够取得1个个阶段性的进展,并且可和时构成1个版本供用户参考,以便及时对用户可能的需求变更作出响应。

XP的方法

  • 计划策略(The Planning Game);

  • 结对编程(Pair programming)

  • 测试(Testing)

  • 重构(Refractoring)

  • 简单设计(Simple Design)

  • 代码集体所有权(Collective Code Ownership)

  • 延续集成(Continuous Integration)

  • 现场客户(On-site Customer)

  • 小型发布(Small Release)

  • 每周40小时工作制(40-hour Week)

  • 编码规范(Code Standards)

  • 系统隐喻(System Metaphor)

核心价值

极限编程中有5个核心价值是我们在开发中必须注意的:沟通(Communication)、简单(Simplicity)、反馈(Feedback)、尊重(Respect)和勇气(Courage)。

XP用“沟通、简单、反馈、尊重和勇气”来减轻开发压力和包袱;不管是术语命名、专著叙述内容和方式、进程要求,都可以从中感遭到轻松愉快和主动奋发的态度和蔼氛。这是1种帮助理解和更容易激起人的潜力的手段。XP用自己的实践,在1定范围内成功地打破了软件工程“必须重量”才能成功的传统观念。

XP精神可以启发我们如何学习和对待快速变化、多样的开发技术。成功学习XP的关键,是用“沟通、简单、反馈、尊重和勇气”的态度来对待XP;轻松愉快地来感受XP的实践思想;自己认真实践后,通过对真实反馈的分析,来决定XP对自己的价值;有勇气接受它,或改进它。