敏捷方法与传统方法的区别与联系
首先,说一下传统开发的方式流程,传统开发也就是本文最开始所说的来自于工程学的软件开发方式,是一种瀑布式的流程,在工程的起始阶段,进行详尽的需求调研,根据需求进行完全的架构设计,之后进入开发过程,在开发过程中,不再进行设计层面的事情,不再处理需求变化的问题,在这个阶段的任务就是对前期设计的功能实现,然后是测试,部署等等。
其次,说一下敏捷开发的方式流程,敏捷开发是在上个世纪90年代,传统开发方式不能够满足现实开发的需要,对传统方式进行总结,对成功失败的开发案例进行研究后,得到的一种不同于传统方式的开发流程,主要的特点是迭代式进行,这种方式把一个软件开发过程分成了若干个小的迭代过程,每一迭代完成一部分功能,每一次迭代过程的工作内容按照功能的重要程度不同而排列,首先完成重要的,同时也是风险比较大的功能,而后是次重要的,依此类推,同时在每次迭代中,都要进行分析、设计、开发、测试,因为分成了一个个小过程,一步步的逼近目标,所以,可以使得产品的用户能够逐渐得明白自己的真实需求从而能够提出真正的需求,而开发团队也可以根据更正后的需求进行下一次迭代的设计。
其一,敏捷开发是以人为中心,而传统开发以过程为中心。并不是说传统开发就没有人的参与,或者说人不是一个重要因素。应该说的是,敏捷开发和传统开发的侧重点、中心不同。那么为什么会是这个样子呢,或者说Martin Fowler为什么要这么说呢?因为,传统开发中,设计已经是在初始阶段完成了,在实现阶段不再修改,换句话说,实现阶段就是对设计的完成,设计方案是不可改变的了。这样就忽略了用户的反馈、忽略了开发员的设计的主观能动性,使得开发员只是专注于代码层面的事情,这是很要命的事情,非常的考究需求工程师、设计师的能力,用一句话来形容这种设计-实现效果就是差之毫厘谬以千里。而敏捷开发提倡的是迭代,在每次迭代中都有分析、设计,也就意味着迭代阶段,可以把一部分完成的系统给用户演示,允许用户提意见、需求,也允许开发员将上一次迭代中得到的想法提出来,并且把这些需求意见想法融入到迭代的分析、设计中,从而在根本上、在理念上,促进了造、用双方的一个交流沟通,发挥了用户的分析评价和开发员设计的主观能动性。
其二,敏捷开发是adaptive的,而传统开发是plan驱动的。传统开发,设计阶段完成了,整个的过程就是按照设计方案进行,在设计阶段的后续过程中,无法再对设计方案进行修改,而敏捷开发需要一次次的迭代完成,正是这些迭代完成了对客户真实需求的软件的演进。
一个控制大的流程,一个处理软件开发细节
很久以前,在一片充满隐喻的土地上,住着一头大象(喻传统开发方法)。很多年来,这头忠实的大象一直都是他所居住村庄主要的食物采集者,并且非常清楚这个村庄需要什么(喻工程前的事先计划性)。他在丛林中修建了一条路(喻最佳实践),这条路总是能指引他找到最好的根茎、蔬菜、坚果和水果等食物(喻项目的功能)。他知道哪种水果用鼻子可以够得着,也知道哪种水果需要鼻子去晃动才能摘取。他很强壮,能够一次带回足够好几天吃的食物,所以他总是预先估计这个村庄的需要(喻典型的项目需求),并提供恰当的供给。他恪尽职守,整个村庄的人都很感激他,并认为他的工作很有价值。
唉!就像生活和寓言中常常发生的那样,情况发生了变化(喻需求变更)。村庄里的厨师(喻项目干系人)想要一些奇特、罕见的原料来烹饪(喻个性化需求)。这些原料大象曾经听说过,但是不在他每天要走的路上(喻传统工程方法不适合涉及的领域)。他还在为存储那些无从需要的食物(喻开始的需求已经过时)疲于奔命,却没有时间去修建新的道路以满足新的需求。村庄里的人渐渐地对这头无法满足他们需求(可以理解为RUP等传统方法不适合网站开发)、越来越气馁的大象失去了耐心。
与此同时,附近村庄有一只猴子(喻敏捷方法)做着和这头大象类似的工作。但是,和这头大象不同,这只敏捷的小猴在这片丛林中快速地穿梭(喻XP等编程方法),采摘它所看到的果实。他只去寻找那些挂得很低的果实(喻无法满足企业级应用)并迅速把它们送回到厨师那里。这只猴子不像大象那样依赖于一条久经考验的道路,他依赖于自己的记忆和本能去找到食物,并且只带回当天所需要的食物(喻迭代编程、每日构建等)。有时,他会跑出去寻找那些日益珍奇的食物(喻新奇的功能,如AJAX功能),偶尔还会迷路(喻新的方法太多)。但事实证明,他的速度和敏捷完全能胜任村庄分派给他的任务。和那头大象一样,他也颇受爱戴(喻在自己的领域内,如Web开发)。
很不幸,这只猴子的生活也发生了变化。他所生活的村庄一天天地扩大起来(喻企业级Web应用)。这只小猴需要满足太多的需求,以至于他总是疲于奔命,努力记住在每个地方的所有需要。他不得不来来回回地跑很多次,因为他没有足够的力量一次运回人们需要的所有东西(喻功能太多)。同样地,这个村庄渐渐对这只猴子失去了耐心,而这只猴子也开始怀疑自己是否能够胜任这项工作。
碰巧有一天,这只疲倦的猴子遇到了那头气馁的大象。这只试图在背负重物的情况下快速奔跑的猴子发现大象背上的筐可以装得下那么多的食物。而大象也被猴子的速度震撼了(喻双方开始正视对方的优点),他能跑得那么远,他能那么轻而易举地拿到大象竭尽全力也无法获得的食物。这两只动物,虽然都以自己的技能而自豪(喻从前的论战),但还是承认了对方在某些方面技高一筹。
大象和猴子认识到一起工作的好处(喻一个控制大的流程,一个处理软件开发细节),于是决定联合起来。猴子利用他的敏捷去满足对于远距离水果的新需求,并让大象带回到他的村庄。大象则把充足的食物运到猴子的村庄去满足那里逐渐增多的需要。虽然他们花了一些时间去找出协作的方法(喻两个不同方法之间的磨合),但是很快他们就能够很好地满足两个村庄的需要了,从此,他们过着快乐的生活,彼此互相信任,从此丰衣足食的村民们又开始看重他们了(喻实用才是第一:))!
首先,说一下传统开发的方式流程,传统开发也就是本文最开始所说的来自于工程学的软件开发方式,是一种瀑布式的流程,在工程的起始阶段,进行详尽的需求调研,根据需求进行完全的架构设计,之后进入开发过程,在开发过程中,不再进行设计层面的事情,不再处理需求变化的问题,在这个阶段的任务就是对前期设计的功能实现,然后是测试,部署等等。
其次,说一下敏捷开发的方式流程,敏捷开发是在上个世纪90年代,传统开发方式不能够满足现实开发的需要,对传统方式进行总结,对成功失败的开发案例进行研究后,得到的一种不同于传统方式的开发流程,主要的特点是迭代式进行,这种方式把一个软件开发过程分成了若干个小的迭代过程,每一迭代完成一部分功能,每一次迭代过程的工作内容按照功能的重要程度不同而排列,首先完成重要的,同时也是风险比较大的功能,而后是次重要的,依此类推,同时在每次迭代中,都要进行分析、设计、开发、测试,因为分成了一个个小过程,一步步的逼近目标,所以,可以使得产品的用户能够逐渐得明白自己的真实需求从而能够提出真正的需求,而开发团队也可以根据更正后的需求进行下一次迭代的设计。
其一,敏捷开发是以人为中心,而传统开发以过程为中心。并不是说传统开发就没有人的参与,或者说人不是一个重要因素。应该说的是,敏捷开发和传统开发的侧重点、中心不同。那么为什么会是这个样子呢,或者说Martin Fowler为什么要这么说呢?因为,传统开发中,设计已经是在初始阶段完成了,在实现阶段不再修改,换句话说,实现阶段就是对设计的完成,设计方案是不可改变的了。这样就忽略了用户的反馈、忽略了开发员的设计的主观能动性,使得开发员只是专注于代码层面的事情,这是很要命的事情,非常的考究需求工程师、设计师的能力,用一句话来形容这种设计-实现效果就是差之毫厘谬以千里。而敏捷开发提倡的是迭代,在每次迭代中都有分析、设计,也就意味着迭代阶段,可以把一部分完成的系统给用户演示,允许用户提意见、需求,也允许开发员将上一次迭代中得到的想法提出来,并且把这些需求意见想法融入到迭代的分析、设计中,从而在根本上、在理念上,促进了造、用双方的一个交流沟通,发挥了用户的分析评价和开发员设计的主观能动性。
其二,敏捷开发是adaptive的,而传统开发是plan驱动的。传统开发,设计阶段完成了,整个的过程就是按照设计方案进行,在设计阶段的后续过程中,无法再对设计方案进行修改,而敏捷开发需要一次次的迭代完成,正是这些迭代完成了对客户真实需求的软件的演进。
一个控制大的流程,一个处理软件开发细节
很久以前,在一片充满隐喻的土地上,住着一头大象(喻传统开发方法)。很多年来,这头忠实的大象一直都是他所居住村庄主要的食物采集者,并且非常清楚这个村庄需要什么(喻工程前的事先计划性)。他在丛林中修建了一条路(喻最佳实践),这条路总是能指引他找到最好的根茎、蔬菜、坚果和水果等食物(喻项目的功能)。他知道哪种水果用鼻子可以够得着,也知道哪种水果需要鼻子去晃动才能摘取。他很强壮,能够一次带回足够好几天吃的食物,所以他总是预先估计这个村庄的需要(喻典型的项目需求),并提供恰当的供给。他恪尽职守,整个村庄的人都很感激他,并认为他的工作很有价值。
唉!就像生活和寓言中常常发生的那样,情况发生了变化(喻需求变更)。村庄里的厨师(喻项目干系人)想要一些奇特、罕见的原料来烹饪(喻个性化需求)。这些原料大象曾经听说过,但是不在他每天要走的路上(喻传统工程方法不适合涉及的领域)。他还在为存储那些无从需要的食物(喻开始的需求已经过时)疲于奔命,却没有时间去修建新的道路以满足新的需求。村庄里的人渐渐地对这头无法满足他们需求(可以理解为RUP等传统方法不适合网站开发)、越来越气馁的大象失去了耐心。
与此同时,附近村庄有一只猴子(喻敏捷方法)做着和这头大象类似的工作。但是,和这头大象不同,这只敏捷的小猴在这片丛林中快速地穿梭(喻XP等编程方法),采摘它所看到的果实。他只去寻找那些挂得很低的果实(喻无法满足企业级应用)并迅速把它们送回到厨师那里。这只猴子不像大象那样依赖于一条久经考验的道路,他依赖于自己的记忆和本能去找到食物,并且只带回当天所需要的食物(喻迭代编程、每日构建等)。有时,他会跑出去寻找那些日益珍奇的食物(喻新奇的功能,如AJAX功能),偶尔还会迷路(喻新的方法太多)。但事实证明,他的速度和敏捷完全能胜任村庄分派给他的任务。和那头大象一样,他也颇受爱戴(喻在自己的领域内,如Web开发)。
很不幸,这只猴子的生活也发生了变化。他所生活的村庄一天天地扩大起来(喻企业级Web应用)。这只小猴需要满足太多的需求,以至于他总是疲于奔命,努力记住在每个地方的所有需要。他不得不来来回回地跑很多次,因为他没有足够的力量一次运回人们需要的所有东西(喻功能太多)。同样地,这个村庄渐渐对这只猴子失去了耐心,而这只猴子也开始怀疑自己是否能够胜任这项工作。
碰巧有一天,这只疲倦的猴子遇到了那头气馁的大象。这只试图在背负重物的情况下快速奔跑的猴子发现大象背上的筐可以装得下那么多的食物。而大象也被猴子的速度震撼了(喻双方开始正视对方的优点),他能跑得那么远,他能那么轻而易举地拿到大象竭尽全力也无法获得的食物。这两只动物,虽然都以自己的技能而自豪(喻从前的论战),但还是承认了对方在某些方面技高一筹。
大象和猴子认识到一起工作的好处(喻一个控制大的流程,一个处理软件开发细节),于是决定联合起来。猴子利用他的敏捷去满足对于远距离水果的新需求,并让大象带回到他的村庄。大象则把充足的食物运到猴子的村庄去满足那里逐渐增多的需要。虽然他们花了一些时间去找出协作的方法(喻两个不同方法之间的磨合),但是很快他们就能够很好地满足两个村庄的需要了,从此,他们过着快乐的生活,彼此互相信任,从此丰衣足食的村民们又开始看重他们了(喻实用才是第一:))!