`
isiqi
  • 浏览: 16467712 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

敏捷开发模式和CMMI开发模式的探讨 概念

阅读更多

摘要:敏捷开发和CMMI的过程管理开发是当前关注最多的两种开发模式,其中体现的指导思想和组成内容具有很大的不同,为了更好的再实践中用好两种开发管理模式,促使国内软件企业的开发管理水平的提升,本文通过对两者之间的异同进行比较分析,力求通过明晰两者各自的特点和适用范围,在此基础之上对两者的融合提出建设性方法,希望能够发挥各自方法的优势,形成一个统一高效的开发管理过程来指导今后的应用软件开发管理模式。

1 引 言

基于CMMI模型的过程改进在国内广泛的展开并获得了一定的效果,在过程改进中间会发现基于脑力的开发过程可以管理控制,但是控制力度不足,主要是基于脑力开发创造的生产方式具有其特殊的变动性,但是其中通过强调和固化一个开发管理过程,从而达到提升软件开发质量的方式必须和实际的业务和过程执行人员结合起来,否则组织过程就没有实施的基础,更达不到细化管理,控制过程稳定性和优化过程的目的。

在面对大量的变更和越来越紧的开发周期时,一种敏捷的开发模式被提到许多的软件开发公司的案头,以此希望作为解决当前软件开发项目面临问题的解决方案,希望通过采用敏捷的开发方式,通过充分发挥开发人员的创造性,通过缩短甚至剪裁传统的需求、设计,直接关注软件的核心工作产品-代码,通过开发人员协作,加强测试和协调来获得快速的开发能力,适应需求的频繁的变化。但是软件开发的有其特定的特点,不能盲目的缩减和融合从需求到代码的过程,这个过程对资源和人员技能的倚赖度很高,不能简单的借用和实施,否则会带来灾难性的结果。

应该说这两种开发管理的主导思想时存在冲突的,一个强调固化过程,让程序员遵循过程做事情,另外一个主张必须充分发挥开发人员的创造性和能力,不要约束他们的想法和能力,表面看来似乎是针锋相对。但是在其管理的核心实质都是明确了一种如何通过项目团队的协调统一,加强团队的开发能力,通过高标准的质量管理来制造出高质量,符合客户需要的软件项目产品的目的,所以两者之间就存在一种相互借鉴,互相融合和促进的可能。

1.1 目的

通过对比和分析敏捷和CMMI这两中开发的模式,本文构想了一种如何能够融合两种开发模式的方式,区分各自发挥最大效益的领域,保留各自的效益点,同时通过两者的切分,界定两者配合的接口和方式,促使两种开发方式能够有效的配合,指导下一步的软件开发企业的项目开发,充分发挥两者的作用,从本质上真正解决软件企业开发项目面对的开发管理的问题,从而促进软件企业的发展。


2 CMMI和敏捷开发介绍

2.1 CMM/CMMI简介

CMMI (Capability Maturity Model Integrated)是卡内基美隆大学 (Carnegie Mellon University) 的软件工程学院 (Software Engineering Institute, SEI) 在成功发展CMM (Capability Maturity Model for Software)之后的最新修订版本。CMM计划起始于1984年,因当时美国国防部对软件公司承接与执行软件投标项目的能力无法做有效的评估,因此委托SEI进行研究,试图在软件行业建立一套管理制度,其目的在评估及改善软件公司的开发过程能力。199710月美国国防部下令SEI停止对CMM的研究,转而致力于开发CMMI,帮助企业解决使用多个CMM的问题。SEI同时宣布CMMI产品将取代CMM,故于2000811日颁布CMMI-SE/SW 1.0版本,200112月发行1.1版本,20066月发布了1.2版本.

其关注点在于评估及改善软件公司的开发过程能力,提供过程质量指导原则,协助开发者持续改善开发技能与软件质量,进而提升软件公司的软件开发管理能力,达到提高软件性能、缩短开发周期、降低开发成本及保证质量等目的。

2.2 敏捷开发简介

2001年,为了解决许多公司的软件团队陷入不断增长的过程泥潭,一批业界专家一起概括出了一些可以让软件开发团队具有快速工作、响应变化能力的价值观和原则,他们称自己为敏捷联盟。敏捷开发过程的方法很多,主要有:SCRUMCrystal,特征驱动软件开发(Feature Driven Development,简称FDD),自适应软件开发(Adaptive Software Development,简称ASD)是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

敏捷团队依靠变化来获取活力。团队几乎不进行预先设计,因此,不需要一个成熟的初始设计。他们更愿意保持设计尽可能的干净、简单,并使用许多单元测试和验收测试作为支援。这保持了设计的灵活性、易于理解性。团队利用这种灵活性,持续地改进设计,以便于每次迭代结束生成的系统都具有最适合于那次迭代中需求的设计。

为了改变上面软件设计中的腐化味,敏捷开发采取了以下面向对象的设计原则来加以避免,这些原则如下:

n 单一职责原则(SRP)

就一个类而言,应该仅有一个引起它变化的原因。

n 开放-封闭原则(OCP)

软件实体应该是可以扩展的,但是不可修改。

n Liskov替换原则(LSP)

子类型必须能够替换掉它们的基类型。

n 依赖倒置原则(DIP)

抽象不应该依赖于细节。细节应该依赖于抽象。

n 接口隔离原则(ISP)

不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。

n 重用发布等价原则(REP)

重用的粒度就是发布的粒度。

n 共同封闭原则(CCP)

包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。

n 共同重用原则(CRP)

一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。

n 无环依赖原则(ADP)

在包的依赖关系图中不允许存在环。

n 稳定依赖原则(SDP)

朝着稳定的方向进行依赖。

n 稳定抽象原则(SAP)

包的抽象程度应该和其稳定程度一致。

上述中的包的概念是:包可以用作包容一组类的容器,通过把类组织成包,们可以在更高层次的抽象上来理解设计,们也可以通过包来管理软件的开发和发布。目的就是根据一些原则对应用程序中的类进行划分,然后把那些划分后的类分配到包中。

分享到:
评论

相关推荐

    敏捷软件开发之Scrum实践

    为了应对日益增加的变化和不确定性,一种更加灵活和高效的开发模式——敏捷开发,应运而生。其中,Scrum作为敏捷开发中最流行的方法之一,其核心思想是通过迭代和增量的方式来实现快速响应变化的目标。本文将深入...

    软件工程——实践者的研究方法

    软件工程还包括质量管理,如CMMI(能力成熟度模型集成)和敏捷开发方法。CMMI是一种评估和改进组织软件开发能力的框架,强调过程改进和能力成熟度。敏捷方法如Scrum和Kanban,则强调灵活性和快速响应变化,通过短...

    高级软件工程课件(北大计算机系)

    7. **敏捷开发与DevOps**:介绍敏捷开发方法论,如Scrum和Kanban,以及DevOps文化,如何实现快速迭代和持续集成/持续交付。 8. **软件维护与演化**:探讨软件在上线后的维护工作,包括错误修复、功能增强和适应性...

    实用软件工程第2版IT企业软件的开发与管理

    1. **第1章(8课时)**:很可能是对软件工程的引入,包括其历史背景、重要性以及软件开发的基本概念和生命周期。这一章可能会详细讲解软件开发的过程模型,如瀑布模型、敏捷开发和迭代模型。 2. **第2章(2课时)**...

    北京大学研究生软件工程课程

    【北京大学研究生软件工程课程】是一门深入探讨软件开发和设计的高级课程,旨在教育学生掌握软件工程的关键概念、方法和工具。课程涵盖了软件生命周期的各个阶段,从需求分析到系统测试,强调实践中的软件开发过程。...

    清华大学软件工程课件3

    此外,敏捷开发方法论如Scrum和Kanban也是现代软件工程的重要组成部分。这些方法强调迭代开发、灵活适应变化和团队协作,对于快速响应市场变化和提高开发效率具有显著优势。课程可能会探讨敏捷宣言、角色分配、每日...

    ssd3 exam1

    1. **软件工程基础**:这部分可能涵盖了软件工程的基本概念,包括软件生命周期,需求获取,系统分析,软件设计原则,以及项目管理方法,比如瀑布模型、迭代模型和敏捷开发。 2. **需求工程**:在SSD3 Exam1中,可能...

    软件工程 课件 计算机资料

    此外,可能会探讨敏捷开发方法,如Scrum和Kanban,它们在现代软件开发中广泛应用。 总结来说,《软件工程(第二版)》(闫菲)电子教案-3032是一份全面介绍软件工程理论与实践的教程,涵盖了从需求分析到软件维护的...

    北大高级软件工程的课件

    5. 软件项目管理:涵盖敏捷开发方法(如Scrum和Kanban)、迭代开发、风险管理、质量管理、进度计划和资源分配等。 6. 软件测试:介绍各种测试类型(如功能测试、性能测试、兼容性测试等),测试用例设计,自动化...

    软件工程简答题复习题带答案.doc

    遵循的原则包括选择合适的开发模式、采用有效设计方法、确保工程支持质量、重视过程管理。 现代软件工程与传统软件工程的主要区别在于引入了面向对象技术、架构设计、团队开发管理和先进的管理模型(如RUP、XP、...

    本科学校的软件工程课件

    - **编程范式**:解释面向对象、函数式、过程式编程的概念和优缺点。 - **设计模式**:如工厂模式、单例模式等,是解决常见问题的成熟解决方案。 海归教师可能会引入国际上最新的教学理念和技术,比如敏捷开发的...

    高级软件工程技术课件

    课件中可能包含了一系列PPT(演示文稿)文件,这些文件详细阐述了软件工程的关键概念和技术。 在高级软件工程技术中,以下是一些关键知识点: 1. **软件生命周期模型**:包括瀑布模型、敏捷开发、螺旋模型、增量...

    软件设计师考试基础知识

    理解软件生命周期模型(如瀑布模型、迭代模型、敏捷开发等)和质量管理方法(如CMMI、六西格玛)是软件设计师的基础知识。 二、编程语言 软件设计师需要熟练掌握至少一种或多种编程语言,如Java、C++、Python或C#。...

    课件高级软件工程课件 PPT全七部分

    “高级软件工程06”可能涉及到软件过程改进,比如CMMI(能力成熟度模型集成)框架,以及敏捷开发方法,如Scrum或Kanban。这部分会讲解如何持续优化软件开发流程,提高团队的生产力和效率。 最后,“高级软件工程07...

    软件系统开发技术(修订版).zip

    可能会讨论软件开发生命周期(SDLC)的基本概念,包括瀑布模型、敏捷方法和迭代开发等。 2. **第2章** - 需求工程:这一章可能涉及需求获取、分析和管理的过程。内容可能涵盖用户访谈、需求文档编写(如BRD和FRD)...

    Sommerville 软件工程及讲义

    9. **软件过程与敏捷方法**:探讨了传统的软件开发过程与敏捷开发的区别,如Scrum、Kanban等敏捷框架,以及如何在实际项目中应用敏捷方法。 10. **软件工程伦理与法律**:提醒读者在软件开发过程中应遵循的职业道德...

    读后感PartⅠⅡ1

    工程生命周期在微软中并非单纯遵循传统的瀑布模型或敏捷开发,而是结合了ISO9000、六西格玛、CMMI和精益六西格玛等最佳实践,形成了一套高效且灵活的流程。软件发布前的“作战室”环节,通过明确的讨论和问题解决,...

    软件工程-实践者的研究方法(第六版)

    7. **敏捷开发方法**:介绍了敏捷宣言和敏捷开发框架(如Scrum和XP),以及在实际项目中如何灵活应用。 8. **软件维护与演化**:讨论了软件的维护工作,包括错误修复、功能增强和适应性修改。 9. **软件过程改进**...

Global site tag (gtag.js) - Google Analytics