- 浏览: 162571 次
- 性别:
- 来自: 华东
文章分类
最新评论
-
chen_miao:
我是初学者,请问,我在flex设计好了带有按钮和下拉框的界面, ...
ruby+flex实现天气预报 -
barrytyh:
很多技术人员都有想法,但忘了一个根本性的问题,谁在给你MONE ...
互联网创业与软件开发 -
fireflyman:
囧......
关于并发和并行 -
fireflyman:
你老再次出现了
谈谈互联网新产品如何起步 -
qhh394141930:
写得很详细,受教了。谢谢!
从瀑布模型、极限编程到敏捷开发
软件开发是一种对人类智慧的管理,对人大脑思维的“工厂化”管理。人是有感情的、有情绪的、变化的、相对独立的工作单元,这与冰冷的机器是不可比的,所以在中国的历史上,管理人是最难的工作;“学而优则仕”的观点就是让最聪明的人应该选出来做官,做官就是管理人的。软件开发不仅是代码编程,而是人员的有效组织,如何既发挥人的主观能动性,避免情绪变化对工作的影响,又可以让大家有效的交流,让多个大脑的思路统一,快速完成目标呢?多年来软件企业的管理者一直在不断地探索。
另外有一个问题一直是软件开发管理人员的心病:软件是工具,开发的是客户业务的应用,但客户不了解软件,开发者不了解业务,如何有效沟通是软件质量的重大障碍。把开发者变成客户业务的专家是个没有办法的办法,让软件企业付出的代价也是昂贵的。
瀑布模型、极限编程、敏捷开发是有代表性的开发模式,在对开发者、客户、最终的产品的关注上的变化,体现了软件开发管理者在管理模式上的变化。
一、瀑布开发
瀑布模型(Waterfall Model)是Royce在1970年提出的,他把大型软件开发分为:分析与编程,象工厂流水线一样把软件开发过程分成各种工序,并且每个工序可以根据软件产品的规模、参与人员的多少进一步细分成更细的工序。该模型非常符合软件工程学的分层设计思路,所以成为软件开发企业使用最多的开发模型。
瀑布模型的特点:
1、 强调文档,前一个阶段的输出就是下一个阶段的输入,文档是个阶段衔接的唯一信息。所以很多开发人员好象是在开发文档,而不是开发软件,因为要到开发的后期,才可以看到软件的“模样”。
2、 没有迭代与反馈。瀑布模型对反馈没有涉及,所以对变化的客户需求非常不容易适应,瀑布就意味着没有回头路。
3、 管理人员喜欢瀑布模型的原因是把文档理解为开发的速度,可以方便地界定不同阶段的里程碑。
瀑布模型的用户很多,也有一些反对的意见:
第一、瀑布模型不适合客户需求不断变化的软件开发,尤其是客户的业务管理的软件,业务随着市场变化,而软件初期的设计可能已经大大变化,而后期的需求更改成本是开始的10倍基数。在ERP盛行的软件市场里,一方面市场带动需求变化,另一方面初期客户对需求描述不清楚,都为瀑布模型的使用团队带来困难。
第二、瀑布模型是一种软件文档的开发,把开发者变成流水线上的机器,大量重复性的工作让编程人员提不起兴趣,工作很枯燥,没有激情,编程成了一种没有创意的机械劳动,这让一向以高科技为标志的高级程序人员大为恼火。
在这种背景下,极限编程(extreme Programming, XP)带来了新鲜的空气。
二、极限编程
极限编程诞生于一种加强开发者与用户的沟通需求,让客户全面参与软件的开发设计,保证变化的需求及时得到修正。要让客户能方便地与开发人员沟通,一定要用客户理解的语言,先测试再编码就是先给客户软件的外部轮廓,客户使用的功能展现,让客户感觉到未来软件的样子,先测试再编码与瀑布模型显然是背道而驰的。同时,极限编程注重用户反馈与让客户加入开发是一致的,让客户参与就是随时反馈软件是否符合客户的要求。有了反馈,开发子过程变短,迭代也就很自然出现了,快速迭代,小版本发布都让开发过程变成更多的自反馈过程,有些象更加细化的快速模型法。当然极限编程还加入了很多激励开发人员的“措施”,如结队编程、40小时工作等。
极限编程是一种开发管理模式,它强调的重点是:
1、 角色定位:极限编程把客户非常明确地加入到开发的团队中,并参与日常开发与沟通会议。客户是软件的最终使用者,使用是否合意一定以客户的意见为准。不仅让客户参与设计讨论,而且让客户负责编写拥护故事(User Story),也就是功能需求,包括软件要实现的功能以及完成功能的业务操作过程。用户在软件开发过程中的责任被提到与开发者同样的重要程度。
2、 敏捷开发:敏捷开发追求合作与响应变化。迭代就是缩短版本的发布周期,缩短到周、日,完成一个小的功能模块,可以快速测试、并及时展现给客户,以便及时反馈。小版本加快了客户沟通反馈的频率,功能简单,在设计、文挡环节大大简化。极限编程中文挡不再重要的原因就是因为每个版本功能简单,不需要复杂的设计过程。极限编程追求设计简单,实现客户要求即可,无需为扩展考虑太多,因为客户的新需求随时可以添加。
3、 追求价值:极限编程把软件开发变成自我与管理的挑战,追求沟通、简单、反馈、勇气,体现开发团队的人员价值,激发参与者的情绪,最大限度地调动开发者的积极性,情绪高涨,认真投入,开发的软件质量就大大提高。结对编程就是激发队员才智的一种方式。
极限编程把软件开发过程重新定义为聆听、测试、编码、设计的迭代循环过程,确立了测试->编码->重构(设计)的软件开发管理思路。
极限编程的12个实践是极限编程者总结的实践经典,是体现极限编程管理的原则,对极限编程具有指导性的意义,但并非一定要完全遵守12个实践,主要看它给软件过程管理带来的价值。
1、 小版本。为了高度迭代,与客户展现开发的进展,小版本发布是一个可交流的好办法,客户可以针对性提出反馈。但小版本把模块缩得很小,会影响软件的整体思路连贯,所以小版本也需要总体合理的规划。
2、 规划游戏。就是客户需求,以客户故事的形式,由客户负责编写。极限编程不讲求统一的客户需求收集,也不是由开发人员整理,而是采取让客户编写,开发人员进行分析,设定优先级别,并进行技术实现。当然游戏规则可进行多次,每次迭代完毕后再行修改。客户故事是开发人员与客户沟通的焦点,也是版本设计的依据,所以其管理一定是有效的、沟通顺畅的。
3、 现场客户。极限编程要求客户参与开发工作,客户需求就是客户负责编写的,所以要求客户在开发现场一起工作,并为每次迭代提供反馈。
4、 隐喻。隐喻是让项目参与人员都必须对一些抽象的概念理解一致,也就是我们常说的行业术语,因为业务本身的术语开发人员不熟悉,软件开发的术语客户不理解,因此开始要先明确双方使用的隐喻,避免歧异。
5、 简单设计。极限编程体现跟踪客户的需求变化,既然需求是变化的,所以对于目前的需求就不必过多地考虑扩展性的开发,讲求简单设计,实现目前需求即可。简单设计的本身也为短期迭代提供了方便,若开发者考虑“通用”因素较多,增加了软件的复杂度,开发的迭代周期就会加长。简单设计包括四方面含义:1、通过测试。2、避免重复代码。3、明确表达每步编码的目的,代码可读性强。4、尽可能少的对象类和方法。由于采用简单设计,所以极限编程没有复杂的设计文档要求。
6、 重构。重构是极限编程先测试后编码的必然需求,为了整体软件可以先进行测试,对于一些软件要开发的模块先简单模拟,让编译通过,到达测试的目的。然后再对模块具体“优化”,所以重构包括模块代码的优化与具体代码的开发。重构是使用了“物理学”的一个概念,是在不影响物体外部特性的前提下,重新优化其内部的机构。这里的外部特性就是保证测试的通过。
7、 测试驱动开发。极限编程是以测试开始的,为了可以展示客户需求的实现,测试程序优先设计,测试是从客户实用的角度出发,客户实际使用的软件界面着想,测试是客户需求的直接表现,是客户对软件过程的理解。测试驱动开发,也就是客户的需求驱动软件的开发。
8、 持续集成。集成的理解就是提交软件的展现,由于采用测试驱动开发、小版本的方式,所以不断集成(整体测试)是与客户沟通的依据,也是让客户提出反馈意见的参照。持续集成也是完成阶段开发任务的标志。
9、 结对编程。这是极限编程最有争议的实践。就是两个程序员合用一台计算机编程,一个编码,一个检查,增加专人审计是为了提供软件编码的质量。两个人的角色经常变换,保持开发者的工作热情。这种编程方式对培养新人或开发难度较大的软件都有非常好的效果。
10、代码共有。在极限编程里没有严格文档管理,代码为开发团队共有,这样有利于开发人员的流动管理,因为所有的人都熟悉所有的编码。
11、编码标准。编码是开发团队里每个人的工作,又没有详细的文档,代码的可读性是很重要的,所以规定统一的标准和习惯是必要的,有些象编码人员的隐喻。
12、每周40小时工作。极限编程认为编程是愉快的工作,不轻易加班,今天的工作今天做,小版本的设计也为了单位时间可以完成的工作安排。
三、敏捷开发
极限编程的思想体现了适应客户需求的快速变化,激发开发者的热情,也是目前敏捷开发思维的重要支持者。
2001年,17名编程大师分别代表极限编程、Scrum(“棒球”团队开发模式)、特征驱动开发、动态系统开发方法、自适应软件开发、水晶方法、实用编程等开发流派,发表“敏捷软件开发”宣言。敏捷软件开发是一个开发软件的管理新模式,用来替代以文件驱动开发的瀑布开发模式。敏捷方式也称轻量级开发方法。敏捷软件开发宣言内容:
² 个体和交互胜过过程和工具
² 可以工作的软件胜过面面具到的文档
² 可户合作胜过合同谈判
² 响应变化胜过遵循计划
敏捷开发集成了新型开发模式的共同特点,它重点强调:
1. 以人为本,注重编程中人的自我特长发挥。
2. 强调软件开发的产品是软件,而不是文档。文档是为软件开发服务的,而不是开发的主体。
3. 客户与开发者的关系是协作,不是合约。开发者不是客户业务的“专家”,要适应客户的需求,是要客户合作来阐述实际的需求细节,而不是为了开发软件,把开发人员变成客户业务的专家,这是传统开发模式或行业软件开发企业的最大面临问题。
4. 设计周密是为了最终软件的质量,但不表明设计比实现更重要,要适应客户需求的不断变化,设计也要不断跟进,所以设计不能是“闭门造车”、“自我良好”,能不断根据环境的变化,修改自己的设计,指导开发的方向是敏捷开发的目标。
敏捷开发避免了传统瀑布方式的弊端,主要是吸收了各种新型开发模式的“动态”特性,关注点从文档到开发者,管理方式也从工厂的流水线到团队的自我放松式的组织。总结敏捷开发与瀑布模式的不同,主要是下面几个“敏捷”的关注点:
² 迭代。软件的功能是客户的需求,界面的操作是客户的“感觉”,对迭代的强调是缩短了软件版本的周期
² 客户参与。以人为本,客户是软件的使用者,是业务理解的专家,没有客户的参与,开发者很难理解客户的真实需求
² 小版本。快速功能的展现,看似简单,但对于复杂的客户需求,合理地分割与总体上的统一,要很好地二者兼顾是不容易的。
敏捷就是“快”,快才可以适应目前社会的快节奏;要快就要发挥个人的个性思维多一些,个性思维的增多,虽然通过结队编程、代码共有、团队替补等方式减少个人对软件的影响力,但也会造成软件开发继承性的下降,因此敏捷开发是一个新的思路,但不是软件开发的终极选择。对于长时间、人数众多的大型软件应用的开发,文档的管理与衔接作用还是不可替代的。如何把敏捷的开发思路与传统的“流水线工厂式”管理有机地结合,是软件开发组织者面临的新课题。
评论
4 楼
qhh394141930
2010-09-02
写得很详细,受教了。谢谢!
3 楼
吐故纳新
2010-07-27
写得很好,了解了敏捷开发
我想知道,迭代,是从哪个开发模型来的呢~
我想知道,迭代,是从哪个开发模型来的呢~
2 楼
zzq230
2008-09-02
收藏了
1 楼
eric860
2008-08-26
发表评论
-
谈谈互联网新产品如何起步
2011-02-16 17:56 1270很多时候, 我们刚做完一个互联网产品,由于产品很粗糙, 功 ... -
育娃网---探索国内育儿社区的新思路
2009-12-22 19:55 310个人认为,这个市场是一个充满前景的垂直行业,到底应该从哪 ... -
关于社交网络的一点思考
2009-09-23 12:16 1717只要是给人设计的 ... -
对产品和运营的几点思索
2009-09-07 22:04 20951、做一个产品需要首先考虑,是卖内容还是卖功能, 切不可都做 ... -
命运掌握在自己手中
2009-09-07 13:57 747李彦宏独家撰文:命运 ... -
强者必学的定律
2009-07-06 10:03 7901、蓝斯登原则:在你往 ... -
如何快速通过CMMI评估
2008-12-15 11:39 1398终于访谈结束 ... -
对WebGame行业的一点看法
2008-09-22 10:20 1373之前不怎么上 ... -
如何进行项目跟踪
2008-09-08 19:52 1837项目跟踪主要针对计划,是为了了解项目的实际进展情 ... -
CMMI 名词辨析:检查点 里程碑 基线
2008-09-06 10:02 2573我实施CMMI的过 ... -
互联网创业与软件开发
2008-09-04 22:57 2136最近与一位创业公司的朋友私下交流了一些项目管理和软 ... -
创业公司如何用人(转CSDN老紫竹的一篇颇有见地的文章)
2008-08-29 14:32 4170创业不是用钱就能堆 ... -
新手到底新在什么地方
2008-08-22 21:29 2143接触项目管理也有一段时间了,给我感触比较深的还是 ... -
QA真的能保证质量吗?
2008-08-15 21:20 4295我最早接触QA是去年在一家大型制造型企业实习的时候,在这种企业 ... -
我们不是在做技术决策,我们在玩
2008-07-31 12:58 3346在这里我不想一 ... -
小公司如何做项目管理(下)
2008-07-22 10:09 1770在上篇文章里, ... -
小公司如何做项目管理(上)
2008-07-21 08:09 2328我所在的公司和大多数国内IT公司一样,十几到几十人的规模,每 ... -
如何编制软件测试用例
2008-06-20 12:52 1982如何设计编制软件测试 ... -
阿里要走102年 阿里的工程师能走多远?
2008-03-19 20:30 1225转载自 http://java.csdn.net/index. ... -
如何快速通过CMMI评估
2008-03-14 22:12 1252终于访谈结束 ...
相关推荐
"极限编程与敏捷开发" 极限编程是一种软件开发方法,它强调客户参与、迭代式开发、测试驱动开发、重构和简洁设计等原则。极限编程的核心是拥抱变化,快速响应客户需求,通过小版本的发布和客户参与来提高软件的质量...
对比十几种软件开发模型 瀑布模型 演化模型 螺旋模型 喷泉模型 快速原型模型 智能模型 混合模型 敏捷开发 极限编程XP
### 极限编程与敏捷开发:深度解析与实践探索 #### 一、极限编程(XP)的起源与理念 极限编程(Extreme Programming,简称XP),作为敏捷开发的一种具体实现方式,自诞生以来便以其独特的实践策略和核心价值,吸引...
Rational Unified Process(RUP)是一种迭代和体系结构为中心的过程,适用于不同类型的项目,从传统的“瀑布”式开发到敏捷开发。RUP包括先启、精化、构建和转移四个阶段,以及需求、分析、设计、实现和测试五个核心...
敏捷开发的主要思想来源于极限编程(Extreme Programming, XP),它强调灵活应对需求变更,重视团队协作,以及快速交付有价值的软件。 1. **瀑布模型与敏捷开发的区别** - **瀑布模型** 是一种线性的开发方法,每...
敏捷开发的目的是打破传统瀑布模型的线性开发流程,让开发团队能够更快地适应变化,更早地获取用户反馈,从而提高软件的质量和客户满意度。通过实施敏捷开发,开发团队可以更好地应对不确定性,快速响应市场需求,...
与传统的瀑布模型相比,敏捷开发更加适应于变化迅速的环境,并强调人的重要性,提倡自我管理的团队和个体的多样性。敏捷开发的核心价值和原则主要通过《敏捷宣言》及其十四条原则来体现,本书则进一步对这些原则进行...
- **20世纪90年代**:极限编程(XP)等方法开始流行,进一步推动了敏捷开发的发展。 - **21世纪初**:敏捷宣言发布,标志着敏捷开发正式成为一种主流的软件开发方式。 - **2010年代至今**:随着技术的进步和市场需求的...
这一宣言为软件开发带来了革命性的转变,从传统的瀑布模型转向了迭代和增量的开发方式。 敏捷开发的核心原则包括: 1. 客户合作胜过合同谈判:敏捷强调与客户密切协作,确保产品满足实际需求。 2. 可工作的软件胜过...
这种开发方式与传统的瀑布模型形成鲜明对比,后者通常遵循严格的阶段顺序,一旦进入下一阶段,就难以回溯修改。 在Java开发中,敏捷方法如Scrum、XP(极限编程)和Kanban等被广泛应用。这些方法鼓励团队以短周期的...
### 极限编程拥抱变化(XP):一种敏捷开发方法 极限编程(Extreme Programming,简称XP)是一种轻量级的软件开发方法,属于敏捷开发的一种实践形式。它强调客户满意度和适应变化的能力,并通过一系列简单而实用的...
"火星人敏捷开发手册 2012-12-31.pdf"可能是一本详细介绍敏捷开发理念、原则和实践的手册,其中可能涵盖了敏捷的核心价值观、十二项原则,以及不同敏捷框架如Scrum、XP(极限编程)、Kanban等的具体应用。...
相较于传统瀑布式开发模型,敏捷开发更注重小步快跑、频繁交付以及客户的持续参与。它强调团队协作,以及管理层与开发团队之间的持续沟通。 敏捷开发的知识体系通常涉及多个方面,包括但不限于以下几点: 1. 敏捷...
敏捷开发的出现是对传统瀑布模型的一种挑战,因为在21世纪初,软件行业的复杂性和需求的不确定性日益增加,使得原有的线性开发模式显得过于僵化。 在敏捷开发中,团队通过短期的工作周期,也称为“冲刺”或“迭代”...
- **实践案例**:华为从2006年开始注意到瀑布模型中存在的问题,并尝试引入RUP(Rational Unified Process)来加快项目交付速度。然而,经过一段时间的实践后,华为意识到RUP本身也存在一定的复杂性和局限性,于是...
**敏捷开发:超越传统瀑布模型的艺术** 敏捷开发是一种在信息技术领域广泛应用的软件开发方法论,它强调灵活性、迭代和团队协作,旨在应对快速变化的需求和市场环境。与传统的瀑布开发模型相比,敏捷开发更注重人与...
极限编程(XP)是敏捷开发的一种变体,《XP的价值和局限.pdf》探讨了XP的核心实践,如计划游戏、小发布、持续集成、单元测试等,并分析了这种方法的优缺点。 10. **软件业的“敏捷流程”** 《软件业的“敏捷流程...
极限编程(XP)是敏捷开发的一种具体实践,它包含一系列规则和实践,如频繁集成、测试驱动开发、结对编程等。统一过程(UP)则是一种更为传统的软件开发过程,但可以通过裁剪以适应敏捷环境。此文档可能讨论如何将...
极限编程(XP)是敏捷开发的一个具体实践,它在Scrum的基础上强调了几个关键原则,例如先测试后编码、结对编程和客户参与。XP的实践与Scrum相辅相成,两者都是为了增强开发团队的敏捷性和客户满意度。 总的来说,...