经常看到和听到大家在争论敏捷过程、RUP和CMM 哪个软件开发过程更好或者哪个过程不好,各自都有理由、争论得不亦乐乎......实际上,没有十全十美的过程,也不存在更好的过程。关键是什么样的过程适合自己(的组织),适合自己的过程才是好的过程。更重要的是,适合自己的过程需要时间积累、需要不断实践,对已定义的过程进行剪裁、补充和完善,才会建立最适合自己的软件开发过程。

引用Alistair Cockburn的一句话 “不同的项目需要不同的方法论,一个项目的最佳过程是这个项目所能负担的最小过程。”, 这说明,对一个组织,往往有几种方法并存,而对不同类型的项目,采用不同的方法。选择一个合适的生命周期模型对于任何软件项目的成功都是至关重要的。大量项目严重拖延、产品迟迟不能交付,究其根本原因往往是与错误运用了生命周期模型有关,这其中就包括存在明显缺陷的瀑布模型所引起的误区,虽然70年代提出的瀑布模型多年来一直被我们的软件工程教育奉为经典来传授,实践上瀑布模型往往会将软件过程引入歧途。与之不同是,新的过程方法论,不论轻型、重型, 还是XP、RUP或者TSP,无一例外地都主张采用能显著减少风险的迭代演进式生命周期模型,强调迭代。但过分强调迭代,可能会忽视需求分析和定义、忽视设计,在后期不断改动,使软件开发的不良成本(返工、修正缺陷等)大大增加,增加了企业成本。

例如,越来越多的人在讨论、推崇敏捷过程、极限编程(XP),实际也是有问题的,虽然敏捷过程、极限编程适合Web的开发、适合免费的Web服务、适合永远的Beta版本,其中也有许多思想也确实值得应用,如持续集成、重构、强调测试等,但也存在其它问题,如结队编程、计划博弈、代码集体所有等。极限编程只适合小型团队、适合开源社区等,而不适合大型软件企业;在软件开发过程的全局上,更适合采用统一过程(RUP)、微软软件开发框架(MSF),而在局部、细节,吸收敏捷思想。有位美国朋友告诉我,XP可能昙花一现。不管他说得对否,当软件作为成熟的产业,肯定是不会允许完全像“XP”这种做法的。

由于篇幅和时间有限,在这里,可以将目前的流行的过程模式进行一个对比分析,大家就会对不同的软件过程的优缺点,一目了然。

项目

CMM/CMMI

RUP

MSF

XP

周期

螺旋模型。

演进式迭代周期,过程框架

瀑布模型和螺旋模型的结合

演进式迭代周期。软件开发方法学

核心

过程改进

架构、迭代

里程碑、迭代

以代码为中心。

范围

需求严格而极少变化的项目。

适合不同类型的项目

适合不同类型的项目

进度紧、需求不稳定的小项目、小型发布和小团队

组织

个人(PSP)、团队(TSP)和组织的3个层次,组间协作、培训

跨团队协作

强调产品的愿景,6种基本角色

以团队为基础,小团队、团队成员能力相当

技术

传统结构化方法

面向对象技术

综合技术

面向对象技术

管理

侧重于过程的定义、度量和改进。一切用数字和文档说话。

从组织角度出发,侧重于过程建模、部署。

业务建模、部署、过程管理等概念。

侧重于具体的过程执行和开发技术,计划设计。

活动

通过过程域来定义活动

整个团队在整个过程中关注质量

项目管理、风险管理和就绪管理

以人为本,如每周40小时工作制、结对编程

实践

各类级别的关键实践。

重视关键基础设施。

满足了CMM 2-3级KPA 的要求,而基本上没有涉及CMM 4-5 级的KPA

代码复审、版本管理方法、文档管理、人员招聘、重测试和重风险管理等。

编码和设计活动融为一体,弱化了架构。

用例、单元测试、迭代开发和分层的架构。

其它

通用性强,但复杂、高成本。

强调风险驱动,以保障可用产品的持续性交付为前提,尽量减少不必要的过程工件,使度量、文档最小化以获得弹性和应变能力。

提供了一系列指南,用于规划企业的基础技术设施,流程化商业的运作过程,并鼓励重用性。

拥抱变化,强调人性化、简单、沟通。尽量减少文档。

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

概括起来, 不存在一种通用的或一成不变的适合软件开发和维护所有项目的软件过程模型。在组织软件过程中,存在不同的企业文化和业务环境、不同的层次和规模、不同的架构和产品类型、不同的资源和能力等因素制约,需要根据不同的项目、不同时期来选择和运用不同的过程模型和方法。不断吸收已有过程的思想,不断探索、不断实践,最终慢慢形成适合自己的自我定义的过程。

经过实践检验和积累的、自我定义的软件过程才是最好的过程。

转载于:https://www.cnblogs.com/sier/archive/2011/10/06/5676449.html

软件开发过程(CMMI/RUP/XP/MSF)是与非?相关推荐

  1. 统一软件开发过程(RUP)分析

    什么是RUP? RUP(Rational Unified Process),统一软件开发过程,统一软件过程是一个面向对象且基于网络的程序开发方法论. RUP是风险驱动的.基于Use Case技术的.以 ...

  2. 论软件开发过程RUP及其应用

    RUP (Rational Unified Process)是IBM公司一款软件开发过程产品,它提出了一整套以UML为基础的开发准则,用以指导软件开发人员以UML为基础进行软件开发.RUP汲取了各种面 ...

  3. 软件开发过程--极限编程(XP)

    ExtremeProgramming(极限 编程,简称XP)是由KentBeck在1996年提出的.KentBeck在九十年代初期与WardCunningham共事时,就一直共同探索着新的软件开发方法 ...

  4. CMMI软件开发过程及能力成熟度模型评估

    一.什么是CMMI CMMI(Capability Maturity Model Integration,能力成熟度模型集成)是由美国卡内基-梅隆大学软件工程研究所推出的评估软件能力与成熟度的一套标准 ...

  5. 【中级软考】软件开发生命周期模型 瀑布模型、增量模型、原型模型、螺旋模型、喷泉模型、RUP(Rational Unified Process 统一软件开发过程)、敏捷开发(开发方法,不是周期模型)

    文章目录 瀑布模型/改进的瀑布模型(Waterfall Model) 螺旋模型(Spiral Model) 增量和迭代模型(Incremental Model) 原型法(RAPId Prototype ...

  6. Atitit各种SDM 软件开发过程SDP sdm的ddd tdd bdd设计

    Atitit各种SDM 软件开发过程SDP sdm的ddd tdd bdd设计 1.1. software development methodology (also known as SDM 1 1 ...

  7. 软件开发过程大观——软件开发过程改进为什么能帮助软件质量提升?

    软件开发过程大观--软件开发过程改进为什么能帮助软件质量提升? 软件发展的二个典型趋势 1.软件规模日益扩大.类似摩尔定律,功能类似的软件系统的规模大约每18个月翻一番,每5年,功能类似的软件系统的规 ...

  8. 什么是RUP,XP,敏捷过程

    RUP RUP(Rational Unified Process),统一软件开发过程,统一软件过程)是一个面向对象且基于网络的程序开发方法论. 瑞理统一过程(RUP)是Rational软件公司(Rat ...

  9. 《敏捷软件开发过程及最佳实践》培训总结

    整理资料,发现很久以前的培训总结,分享之 fasiondog 敏捷不是"银弹" 当前"敏捷"是一个比较流行的词汇,当敏捷不是大家想象的银弹,对人员的培训及方法的 ...

最新文章

  1. 常用的监听事件(android)
  2. 学会这些Python美图技巧,就等女朋友夸我了
  3. JQuery中的queue()及dequeue()
  4. MVC中实现订单表和订单详细表联动新增的一种方法
  5. [iOS] Win8下在Vmware11中安装使用苹果系统OS X 10.10
  6. 查找任意数目参数的最大值
  7. 面试问题汇总 精选 分析 解答 职业规划 part 2
  8. BugkuCTF-MISC题赛博朋克
  9. Failed to connect to Etherscan API at url https://api-rinkeby.etherscan.io/api
  10. python中的commands模块
  11. php 循环左移,PHP运算符、PHP分支结构和循环、模板语法在模板中的应用
  12. jtm 一键安装mysql_一键安装MySQL
  13. 计算机二级excel试题练习网盘,计算机二级练习试题excel
  14. 基于C51的步进电机控制器设计
  15. 【樽海鞘算法】基于樽海鞘算法求解多目标问题附matlab代码
  16. 针对于Vins-Mono中的评价工具evo中的评价参数的理解
  17. SG3525matlab,基于SG3525的BOOST变换器
  18. 腾讯校招难度升级,笔试刷人超80%,最“简单”的试题把网友看哭了
  19. 2017年2月28日-----------乱码新手自学.net 之特性与验证
  20. 淘宝关键词搜索商品接口分析商品价格走势(商品列表接口,商品销量接口,商品价格接口,分类ID采集商品数据接口)接口代码对接教程

热门文章

  1. python 可视化界面_给大家分享一些实用的Python库
  2. 审计某开源商城中的漏洞大礼包
  3. 一次共享内存引起的线上事故分析
  4. Lucene学习总结之五:Lucene段合并(merge)过程分析
  5. JVM性能调优中的命令总结
  6. 100篇精选算法技术文章收藏
  7. [swift 进阶]读书笔记-第八章:错误处理 C8P2 错误和函数参数
  8. js各种方法继承以及优缺点
  9. ExecutorCompletionService分析及使用
  10. Apache配置静态缓存