2011-06-09 20:18:00 netanimals 阅读数 823
  • SCRUM敏捷开发视频教程

    SCRUM敏捷开发视频教程,该课程为你分享SCRUM敏捷开发,理解敏捷的本质,认识中国IT行业对敏捷的挑战,学会让敏捷落地的实用招数。 嘉宾介绍:张传波 1. 创新工场创业课程(敏捷课程)讲师 2.软件研发管理佳实践顾问(曾任华为某团队研发顾问) 3. 中国敏捷联盟《ADBOK》(敏捷开发知识体系)项目组成员 二十年软件开发、软件设计、需求分析、项目管理、部门管理、公司管理及过程改进等经验,亲历“无数”项目,涉猎建筑、通讯、互联网、电力、金融、制造业、政府等领域,熟悉软件生命周期的全部过程

    10428 人正在学习 去看看 CSDN讲师

摘要:敏捷开发和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)

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

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

2011-11-25 11:55:49 ruyang123456 阅读数 20
  • SCRUM敏捷开发视频教程

    SCRUM敏捷开发视频教程,该课程为你分享SCRUM敏捷开发,理解敏捷的本质,认识中国IT行业对敏捷的挑战,学会让敏捷落地的实用招数。 嘉宾介绍:张传波 1. 创新工场创业课程(敏捷课程)讲师 2.软件研发管理佳实践顾问(曾任华为某团队研发顾问) 3. 中国敏捷联盟《ADBOK》(敏捷开发知识体系)项目组成员 二十年软件开发、软件设计、需求分析、项目管理、部门管理、公司管理及过程改进等经验,亲历“无数”项目,涉猎建筑、通讯、互联网、电力、金融、制造业、政府等领域,熟悉软件生命周期的全部过程

    10428 人正在学习 去看看 CSDN讲师

 敏捷开发模式的简单定义:不苛求完美,尽快推出可满足基本使用的软件版本或演示版本,让用户在使用过程中测试并调整需求,程序员根据需求不断推出微调后的新版本,最后臻于完善。

敏捷开发有如下几个特点:

- 要尽快的开发出可供使用的软件,而不是一个完美的软件;

- 经常推出可供使用的新版本,周期越短越好

- 欢迎需求的变动,随时调整,保持客户的竞争优势

- 业务人员和开发人员要始终在一起配合工作,而不仅仅是需求阶段

- 各路人马之间最有效的沟通方法是面谈,而不是邮件、电话、远程、文档等拖沓的方式

- 提倡可持续开发,保持不变的开发节奏。而不是一会通宵加班,一会又无所事事的开发方式

- 提倡简单、简化的思路——用各种手段减少开发工作量

- 追求卓越技术和良好设计,将有助于敏捷

- 团队定期总结经验,商讨提升效率的方法并实施

2012-06-25 18:21:54 iteye_14109 阅读数 318
  • SCRUM敏捷开发视频教程

    SCRUM敏捷开发视频教程,该课程为你分享SCRUM敏捷开发,理解敏捷的本质,认识中国IT行业对敏捷的挑战,学会让敏捷落地的实用招数。 嘉宾介绍:张传波 1. 创新工场创业课程(敏捷课程)讲师 2.软件研发管理佳实践顾问(曾任华为某团队研发顾问) 3. 中国敏捷联盟《ADBOK》(敏捷开发知识体系)项目组成员 二十年软件开发、软件设计、需求分析、项目管理、部门管理、公司管理及过程改进等经验,亲历“无数”项目,涉猎建筑、通讯、互联网、电力、金融、制造业、政府等领域,熟悉软件生命周期的全部过程

    10428 人正在学习 去看看 CSDN讲师

     软件开发方法一直处在不断发展过程中。在诸多方法中,敏捷开发以其能持续满足不断变化的用户需求正在受到越来越多人的重视,从中小项目开始进入大型开发项目,近几年来上升势头明显。那么,敏捷开发有什么好处呢?

 

    在软件工业界,敏捷开发已成为众多高效开发团队的制胜之道。在欧美软件企业中,有近半数企业已采用敏捷方法进行开发,而近几年受软件外包和外企的带动,敏捷开发在中国也出现了日渐普及的态势,如腾讯内部几乎所有的开发团队都在实施敏捷方法。敏捷开发的流行绝非偶然,其最大的推动力是采用这种方法所能带来的受益。相关统计表明,敏捷开发可以将效率提高3~10倍,软件的质量也有更加可靠的保证; 同时,还给团队内的每个成员提供了良好的发展机会,技术和合作水平都能得到相应提高。当然,敏捷的成功前提是其方法本身的适用性和团队对它的深入理解和合理运用。
 
    敏捷开发由几种轻量级的软件开发方法组成,包括极限编程、Scrum、精益开发(Lean Development)、动态系统开发方法、特征驱动开发(Feature Driver Development)、水晶开发(Cristal Clear)等等。所有这些方法都具有以下共同特征,它们也是敏捷开发的原则:

    1. 迭代式开发。即整个开发过程被分为几个迭代周期,每个迭代周期持续的时间一般较短,通常为1到6周。

    2. 增量交付。产品是在每个迭代周期结束时被逐步交付使用,每次交付的都是可以被部署、能给用户带来即时效益和价值的产品。

    3. 开发团队和用户反馈推动产品开发。敏捷开发方法主张用户能够全程参与到整个开发过程中。这使需求变化和用户反馈能被动态管理并及时集成到产品中。

    4. 持续集成。新的功能或需求变化总是尽可能频繁地被整合到产品中。有些是在每个迭代周期结束的时候集成, 有些则每天都在这么做。

    5. 开发团队自我管理。人是敏捷开发的核心。敏捷开发总是以人为中心建立开发的过程和机制,而非把过程和机制强加给人。
 
    敏捷开发的优势:

    满足用户不断变化的需求是软件开发的长期无法解决的难题之一,经典的瀑布模式在一个迭代周期内表现优异,但一旦需求变化,瀑布模式却显得无能为力。敏捷方法满足需求的办法主要通过迭代。在每一次迭代周期结束时,都能交付用户一个可用的、可部署的系统,用户使用并体验该系统并反馈意见,在随后的迭代周期这些意见和需求的其他变化一起在产品中实现和集成。每次迭代周期应尽可能短,以便能及时地处理需求变化和用户反馈。
 
    敏捷开发方式能给企业和用户带来以下好处:

    1. 精确。瀑布模式通常会在产品起点与最终结果之间规划出一条直线,然后沿着直线不断往前走。然而当项目到达终点时,用户通常会发现那已经不是他们想去的地方。而敏捷方法则采用小步快跑,每走完一步再调整并为下一步确定方向,直到真正的终点。

    2. 质量。敏捷方法对每一次迭代周期的质量都有严格要求。一些敏捷方法如极限编程等,甚至使用测试驱动开发(test-driven development),即在正式开发功能代码之前先开发该功能的测试代码。这些都为敏捷项目的整个开发周期提供了可靠的质量保证。

    3. 速度。敏捷团队只专注于开发项目中当前最需要的、最具价值的部分。这样能很快地投入开发。另外,较短的迭代周期使团队成员能迅速进入开发状态。

    4. 丰厚的投资回报率。在敏捷开发过程中,最具价值的功能总是被优先开发,这样能给客户带来最大的投资回报率。

    5. 高效的自我管理团队。敏捷开发要求团队成员必须积极主动,自我管理。在这样的团队中工作,每个团队成员的技术能力、交流、社交、表达和领导能力也都能得以提高。
 
    主要的敏捷方法:

    敏捷开发方法是一组开发方法的统称,主要包括以下几种:

    极限编程其主要目的是降低需求变化的成本。它引入一系列优秀的软件开发方法,并将它们发挥到极致,结对编程(pair-programming)就是其中比较知名的方法之一。除此之外, 其核心做法还有小规模、频繁的版本发布、短迭代周期、测试驱动开发、持续集成、每日站立会议、共同拥有代码、系统隐喻等。

    Scrum Scrum是一个敏捷开发框架,它由一个开发过程、几种角色以及一套规范的实施方法组成。在Scrum中,产品需求被定义为产品需求积压(product backlogs)。所有的产品需求积压都是从一个简单的想法开始,并逐步被细化,直到可以被开发的程度。Scrum将开发过程分为多个Sprint周期,每个Sprint代表一个2~4周的开发周期,有固定的时间长度。

    精益开发精益开发的核心思想是查明和消除浪费。在软件开发过程中bug、没用的功能、等待以及其他任何对实现结果没有益处的东西都是浪费。浪费及其源头必须被分析查明,然后设法消除。精益开发的其他原则包括强调学习、在最后时刻做决定、用最快的速度交付用户等。

    其他敏捷方法还包括动态系统开发方法(DSDM)、特征驱动开发(FDD)、Crystal Clear等,各种敏捷方法的区别在于它们对敏捷的不同阐释和不同侧重。理解这些方法可以帮助我们从多个角度理解敏捷开发,并且了解更多的最佳应用。
 
 
如何选择一种敏捷方法:

    选择一种合适的软件开发方法取决于多种因素。在做出决定之前,我们需要充分考虑以下这些方面:

    1. 方法的复杂度。确保你的团队或组织能够应付这种复杂度。

    2. 社区和业界支持。有较多的社区及行业支持可以使你受益匪浅。

    3. 实用工具。一个良好的软件工具可以帮助团队有效地处理日常工作,促进团队协作,并减少管理成本。

    4. 对敏捷方法的认识程度。选择一些与你当前开发方式比较接近的敏捷方法将有助于推动该方法的实施。

    5. 你的团队规模。较小规模的团队最好从简单的方式入手。

    6. 你不需要只遵从一种方法。你可以为团队选择一个主要的方法(如Scrum),然后借鉴其他方法。

 

2017-03-06 14:50:35 datamining2005 阅读数 1434
  • SCRUM敏捷开发视频教程

    SCRUM敏捷开发视频教程,该课程为你分享SCRUM敏捷开发,理解敏捷的本质,认识中国IT行业对敏捷的挑战,学会让敏捷落地的实用招数。 嘉宾介绍:张传波 1. 创新工场创业课程(敏捷课程)讲师 2.软件研发管理佳实践顾问(曾任华为某团队研发顾问) 3. 中国敏捷联盟《ADBOK》(敏捷开发知识体系)项目组成员 二十年软件开发、软件设计、需求分析、项目管理、部门管理、公司管理及过程改进等经验,亲历“无数”项目,涉猎建筑、通讯、互联网、电力、金融、制造业、政府等领域,熟悉软件生命周期的全部过程

    10428 人正在学习 去看看 CSDN讲师
敏捷开发方式能给企业和用户带来以下好处:
1. 精确。瀑布模式通常会在产品起点与最终结果之间规划出一条直线,然后沿着直线不断往前走。然而当项目到达终点时,用户通常会发现那已经不是他们想去的地方。而敏捷方法则采用小步快跑,每走完一步再调整并为下一步确定方向,直到真正的终点。
2. 质量。敏捷方法对每一次迭代周期的质量都有严格要求。一些敏捷方法如极限编程等,甚至使用测试驱动开发(test-driven development),即在正式开发功能代码之前先开发该功能的测试代码。这些都为敏捷项目的整个开发周期提供了可靠的质量保证。
3. 速度。敏捷团队只专注于开发项目中当前最需要的、最具价值的部分。这样能很快地投入开发。另外,较短的迭代周期使团队成员能迅速进入开发状态。
4. 丰厚的投资回报率。在敏捷开发过程中,最具价值的功能总是被优先开发,这样能给客户带来最大的投资回报率。
5. 高效的自我管理团队。敏捷开发要求团队成员必须积极主动,自我管理。在这样的团队中工作,每个团队成员的技术能力、交流、社交、表达和领导能力也都能得以提高。

主要的敏捷方法:
敏捷开发方法是一组开发方法的统称,主要包括以下几种:
极限编程其主要目的是降低需求变化的成本。它引入一系列优秀的软件开发方法,并将它们发挥到极致,结对编程(pair-programming)就是其中比较知名的方法之一。除此之外, 其核心做法还有小规模、频繁的版本发布、短迭代周期、测试驱动开发、持续集成、每日站立会议、共同拥有代码、系统隐喻等。
Scrum Scrum是一个敏捷开发框架,它由一个开发过程、几种角色以及一套规范的实施方法组成。在Scrum中,产品需求被定义为产品需求积压(product backlogs)。所有的产品需求积压都是从一个简单的想法开始,并逐步被细化,直到可以被开发的程度。Scrum将开发过程分为多个Sprint周期,每个Sprint代表一个2~4周的开发周期,有固定的时间长度。
精益开发精益开发的核心思想是查明和消除浪费。在软件开发过程中bug、没用的功能、等待以及其他任何对实现结果没有益处的东西都是浪费。浪费及其源头必须被分析查明,然后设法消除。精益开发的其他原则包括强调学习、在最后时刻做决定、用最快的速度交付用户等。
其他敏捷方法还包括动态系统开发方法(DSDM)、特征驱动开发(FDD)、Crystal Clear等,各种敏捷方法的区别在于它们对敏捷的不同阐释和不同侧重。理解这些方法可以帮助我们从多个角度理解敏捷开发,并且了解更多的最佳应用。

2017-04-21 15:41:41 tongshushe 阅读数 1035
  • SCRUM敏捷开发视频教程

    SCRUM敏捷开发视频教程,该课程为你分享SCRUM敏捷开发,理解敏捷的本质,认识中国IT行业对敏捷的挑战,学会让敏捷落地的实用招数。 嘉宾介绍:张传波 1. 创新工场创业课程(敏捷课程)讲师 2.软件研发管理佳实践顾问(曾任华为某团队研发顾问) 3. 中国敏捷联盟《ADBOK》(敏捷开发知识体系)项目组成员 二十年软件开发、软件设计、需求分析、项目管理、部门管理、公司管理及过程改进等经验,亲历“无数”项目,涉猎建筑、通讯、互联网、电力、金融、制造业、政府等领域,熟悉软件生命周期的全部过程

    10428 人正在学习 去看看 CSDN讲师

敏捷开发过程中必须遵循的原则

1.我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。

初期交付的系统中所包含的功能越少,最终交付的系统的质量就越高。--构建高质量产品。


2.即使到了开发后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。

敏捷开发团队要非常努力地保持软件结构的灵活性,多考虑软件的扩展性,当需求变化时,对系统造成的影响是最小的


3.经常性地交付可以工作的软件,交付的间隔可以从几周到几个月,交付的时间间隔越短越好。

不赞成交付大量的文档或者计划,而应该交付给客服带来实际价值的可靠的软件。


4.在整个项目开发期间,业务人员和开发人员必须天天在一起工作。

频繁而有效的交互,会使开发人员更好的了解业务人员需要什么,开发人员的建议会使业务人员更好的拓展需求的思路,会使系统良性健康的循环迭代。


5.围绕被激励起来的个人来构建项目。给他们提供所需要的环境和支持,并且信任他们能够完成工作。

在敏捷项目中,人被认为是项目取得成功的最重要的因素。需要创造对人有利的影响,可以通过改变其他因素来激励人,比如,过程、环境、管理等等。


6.在团队内部,最具有效果并且富有效率的传递信息的方式,就是面对面的交谈。

文档不是默认的沟通方式。默认的沟通方式是交谈。为了避免无效的交谈,必须设定好交谈需要达到的目的和成果。团队成员可以去编写文档,如果对于这些文档的需求迫切并且意义重大。通过沟通的方式来确定文档需求的迫切性和意义的大小。


7.工作的软件是首要的进度度量标准

敏捷开发有别于传统的开发阶段,不能够根据所处的开发阶段、已经编写的文档的多少或者已经创建的基础结构代码的数量来度量开发进度。只有当30%的必须功能可以工作时,才可以确定进度完成了30%。


8.敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。

团队不是以全速启动并试图在项目开发期间维持那个速度。而是以快速但是可持续的速度进行。


9.不断地关注优秀的技能和好的设计会增强敏捷能力。

高的产品质量是获取高的开发速度的关键。


10.简单--使未完成的工作最大化的艺术--是根本的。

敏捷团队不会试图去构建那些华而不实的系统。


11.最好的架构、需求和设计出自于自组织的团队。

敏捷团队的成员共同解决项目中所有方面的问题。每一个成员都具有项目中所有方面的参与权力。不存在单一的团队成员对系统架构、需求或者测试负责的情况。整个团队共同承担哪些责任,每个团队成员都能够影响它们。


12.每隔一定时间,团队会在如何能够更有效地工作方面进行反省,然后相应地对自己的行为进行调整。

敏捷团队必须不断地对团队的组织方式、规则、规范和关系等进行调整。



没有更多推荐了,返回首页