`
insertyou
  • 浏览: 909121 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多

RUP与XP的平衡之道

Author:SpiderMan(ShenZhen)
Fromhttp://blog.csdn.net/testwin
Emailtestwin@sohu.com

人有过什么经验,遇到过什么恐惧的事,就会形成设法避免这种事情的方法学。研究重型方法学的人可能一直以来的经验就是组织上千人的开发队伍进行开发,比如说大型电信系统的开发、军事航天系统的开发......这种项目严格强调过程执行的规范,注重文档规范、评审及过程度量。而发明XP的人可能一直是在小团队里做项目,项目团队只有3、5个人,项目总是会因为没有满足用户价值而被Cancel,开发公司也蒙受损失,因此注重与用户的交流、反馈,强调快速、灵活。

每种软件方法产生的背景不同、特点不同、适用的领域亦不相同。那么对于软件项目来说,是否可以使用同一种软件开发方法来对不同类型、规模、复杂度的项目来进行开发呢,显然是不合理的。

前不久,恰巧和国内一位资深的软件工程咨询顾问做过一些交流,他本人热衷于RUP的过程改进,倡导针对不同类型项目进行适当的裁剪,实际上这也是一种灵活适应的方式、随需而变的思想。我对此是理解并赞同的,但是我对RUP却一直保持一种相对谨慎的态度。

对于RUP来说,首先,我认为它过于理想化和理论化,RUP 是过程组件、方法以及技术的框架,你可以将其应用于任何特定的软件项目,由用户自己限定 RUP 的使用范围。对于各种类型的软件项目,RUP并未给出具体的自身裁减及实施策略,总有些无依据可循的感觉。你既可以说它能解决任何问题,也可以说它什么都不是;其次,RUP从本质来说还是一个强调设计和规范的软件方法,从这个角度来讲,与传统的瀑布模型没有太大差别,它的灵活性较之敏捷方法还是相对较弱的。在一些小型软件项目、特别是不可预测的软件项目开发中,面临着各种紧急需求、面临着时间压力,沿用RUP是很难应付自如的。但是在另一方面,RUP强调对知识的收集、整理和加工定义,强调在软件开发的时候要有好的体系结构。所以它还是很有利于知识的积累和共享的。

相比RUP,敏捷方法如XP则更为灵活,倡导尽早的、持续的交付有价值的软件满足用户需要。用交流沟通取代详尽的文档,强调团队的主动、自律、自我组织和自发管理。而XP也是以代码为核心的一种方法,这里有很多的东西是未知的,知识只存在于两个地方:开发者的头脑和最后的代码。对于项目管理者来说,他们会认为敏捷开发方法弱化了知识管理的概念,而实际上敏捷开发注重的是最有价值的知识的积累和沉淀。

如何灵活应对各种项目风险、如何最大化优先满足用户价值、又如何能够有效的控制项目开发过程、如果做好项目过程中的知识管理,是每一个软件项目管理者都需要深入思考的问题。RUP的倡导者一直强调RUP裁剪,实际上我认为RUP不仅仅是需要自身的裁剪,还需要学会融合。在RUP裁剪的同时,适宜的融合敏捷开发的各种实践。不要认为RUP与XP是矛盾的,其实不然,它们具有不同的原理、具有不同的应用领域。在 RUP 中融合了 XP 技术时,才会得到过程的正确量,既满足了项目所有成员的需要,又解决了所有主要的项目风险问题。对于一个工作于高信任环境中的小型项目团队,其中用户是团队的一部分,那么 XP 完全可以胜任。对于团队越来越分散,代码量越来越大,或者构架没有很好定义的情况,您需要做一些其他工作。在用户交互具有"契约"风格的项目中,仅有 XP 是不够的。RUP 是一个框架,可以从 RUP 出发,在必要时以一组更健壮的技术来扩展 XP。

RUP最佳实践包括:

1. 迭代开发
2. 管理需求
3. 使用基于组件的构架
4. 可视建模
5. 持续的质量验证
6. 控制变更

12 个 XP 实践包括:

有计划的开发:通过结合使用优先级"故事"和技术估算,确定下一版本的功能
小版本:以小的增量版本经常向客户发布软件
隐喻:隐喻是一个简单、共享的"故事"或描述,说明系统如何工作
简单设计:通过保持代码简单从而保证设计简单。不断的在代码中寻找复杂点并且立刻进行移除
测试驱动开发:用户编写测试内容以对"故事"进行测试。程序员编写测试内容来发现代码中的任何问题。在编写代码前先编写测试内容
重构:这是一项简化技术,用来移除代码中的重复内容和复杂之处
结对编程:团队中的两个成员使用同一台计算机开发所有的代码。一个人编写代码或者驱动,另一个人同时审查代码的正确性和可理解性
集体代码所有权:任何人都拥有所有的代码。这就意味这每个人都可以在任何时候变更任何代码
持续集成:每天多次创建和集成系统,只要任何实现任务完成就要进行
每周 40 个小时:程序员在疲劳时无法保证最高效率。连续两周加班是绝对不允许的
现场客户:一名真实的客户全时工作于开发环境中,帮助定义系统、编写测试内容并回答问题
编码标准:程序员采用一致的编码标准证

RUP与XP的融合,是各自特点的相互补充,也是软件开发方法的平衡之道。而对软件技术平衡的思考也可以说是技术成熟的开始吧。

最后,再阐明我对软件项目开发的理解。在软件项目开发过程中,应该能够识别、分析不同软件项目的特点,采用相对适合的开发实践来适应软件开发过程,保证对软件开发的有效支持,以便能够创造出“足够好的”软件。而这个足够就是对 进度、成本、质量之间的平衡,最大化满足客户需要的实现。

参考文献:

《在小型项目中使用RUP: 极限编程剖析》Gary Pollice

分享到:
评论

相关推荐

    Extreme programming and its development practices

    本文旨在探讨XP的核心理念与实践,并将其与另一种广为人知的方法论——Rational Unified Process(RUP)进行比较。 #### 二、极限编程概述 1. **核心理念**: - **轻量级方法论**:强调简单性与效率。 - **快速...

    敏捷建模与统一过程.doc

    在XP中,建模过程往往更为轻量级,AM 提供了一种更加结构化的方法来确保模型的质量和有效性。而在RUP和EUP中,由于其本身就包含较重的建模元素,AM 可以帮助团队实现更敏捷的建模实践,如快速原型和轻量级建模工具的...

    软件工程简明教程

    - 极限编程(XP)与敏捷过程模型 - 过程模型的应用案例 - 项目管理过程 - 小结与自测练习 - **第3章: 软件需求分析与需求规格** - 好的需求规格说明书(SRS)的重要性 - 需求获取过程 - 需求规格编写指南 - 用例...

    Using Risk to Balance Agile and Plan-Driven Methods.pdf

    这种方法的来源是我们的书籍《平衡敏捷与纪律:困惑者的指南》,该书计划于2003年出版。 1. 方法概述 我们的方法利用风险分析和统一过程框架,定制风险驱动的过程,形成整体的开发策略。它使关键开发团队成员能够...

    2019年软件工程师年终总结范文.doc

    4. 软件工程理论的学习:作者下半年专注于软件工程的学习,包括阅读RUP、MSF、XP、CMM实践应用等相关书籍,旨在理解软件工程的全貌,不局限于某一特定理论或模式。 5. 对印度软件工程的理解:作者通过阅读印度最大...

    招聘系统分析师

    - **软件工程**:理解CMMI、RUP、XP等软件工程方法。 - **数据库**:熟悉Oracle、SQL Server、DB2或MySQL等数据库之一。 - **CASE工具**:熟练使用CASE工具,如Rational Rose、PowerDesigner,可提高优先考虑度。...

    软件工程师个人年度总结范文.doc

    总结过去一年的工作,我认为软件工程师不仅要在技术上不断进步,还要有清晰的职业规划,并找到与之相匹配的工作环境。公司文化和稳定性同样重要,它们直接关系到个人的幸福度和工作效率。此外,我对软件工程的全面...

    UML 中各种图形的重要性排行

    例如,在敏捷开发方法论如RUP或XP中,更加强调快速迭代和早期交付可用软件,因此可能只需要关注几个关键的UML图形即可。此外,为了避免陷入分析瘫痪的状态,开发团队应该注重平衡模型的精确度与实用性,避免过度追求...

    《软件工程概论》教学大纲(本科).docx

    - 学生将学习生存周期的概念和引入生命周期的目的,了解瀑布模型、迭代模型以及当前流行的RUP(统一过程)和XP(极限编程)模型。 - 课程还将探讨软件开发方法学中的演进、往复、迭代、风险控制和阶段评审等核心...

    过程塑造(小型软件团队过程改进方法).docx

    传统的软件开发方法,如RUP(Rational Unified Process)和XP(Extreme Programming),强调的是软件开发生命周期的流畅性和过程的延续性。RUP侧重于整个软件开发生命周期的管理,而XP则更侧重于开发过程中的敏捷...

    陈利娥系列之_设计模式-设计模式在C#中的初步应用.ppt

    除了GoF的23种经典设计模式,还有许多其他模式,如MVC(Model-View-Controller)模式用于构建用户界面,RUP(Rational Unified Process)用于软件开发过程,以及XP(Extreme Programming)用于敏捷开发。 在实际...

    精简软件过程

    - **定义**: 精炼统一过程(EssUP, Essential Unified Process)是由UML和RUP之父Ivar Jacobson提出的一种新型软件开发过程。 - **特点**: - 结合了来自统一过程、敏捷开发和过程改进领域的最佳实践。 - 强调实践的...

    过程塑造(小型软件团队过程改进方法).doc

    敏捷方法如极限编程(XP)和统一过程(RUP),通过短周期迭代、频繁的测试和持续集成,能够使团队在开发过程中不断评估和改进,最终实现产品的高质量交付。 然而,对于那些刚开始接触敏捷方法的小型团队而言,理解...

    软件定制开发流程.doc

    项目管理方面,阳光风云采取了一种折衷的策略,结合了RUP(统一软件开发过程)和XP(极限编程)的优势,强调在简洁、有效和实用的基础上实现最佳管理。这种方法强调在不同项目和客户需求间找到平衡,确保项目管理的...

    软件工程期末考试超重点题目以及答案

    - **XP(极限编程)**:这是一种轻量级的软件开发方法,强调通过持续的沟通、简单的设计、测试先行和重构来提高软件的质量和响应变化的能力。 #### 二、画分层数据流图的原则 1. **注意数据流图中成分的命名**:...

Global site tag (gtag.js) - Google Analytics