敏捷软件开发vs传统软件开发

时间:2023-03-09 15:37:40
敏捷软件开发vs传统软件开发

摘要

本文介绍了传统软件开发(着重介绍了传统软件开发中常用的瀑布模型)和敏捷软件开发,以及敏捷开发和传统开发的对比。

一、传统软件开发

比较常用的几种传统软件开发方法:瀑布式开发、迭代式开发、螺旋开发作了对比分析。

瀑布式开发:1970年Winston Royce提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被广泛采用的软件开发模式,瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互链接的固定次序,如同瀑布流水、逐级下落。

在瀑布开发中,各个活动按照线性方式进行,当前活动需要前一项活动的结果,如果前一项活动存在问题,则需要返回上一项活动,重新进行上一项活动。如同瀑布一样,自上而下。显得相对比较死板。

瀑布模型的优点是严格遵循预先计划的步骤顺序进行,一切按部就班比较严谨。

瀑布模型的特点:强调文档的作用,并要求每个阶段都要仔细验证,但是这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:

1.各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;

2.由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;

3.早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。

迭代式开发:迭代式开发也被称为迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。在迭代式开发中,整个开发工作被组织为一系列的短小的、固定长度的小项目,被称为一系列的迭代,每一次迭代都包括了需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。

螺旋开发:1988年,巴利·玻姆(Barry Boehm)正式发表了软件系统开发的“螺旋模型”,它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。其核心在于不需要在刚开始的时候就把所有事情都定义的清清楚楚,而是在定义最重要的功能时去实现它,然后听取客户的意见,之后再进入到下一个阶段.如此不断轮回重复,直到得到你满意的最终产品。

二、敏捷软件开发

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

敏捷开发的特点:1. 适应性而不是预设性。传统的控制项目模式都是试图对一个软件开发项目在很长的时间跨度内做出详细的计划,然后依计划进行开发。也就是所谓的预设,而与之相反的敏捷方法则是欢迎变化,目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。所以称之为适应性方法。2. 面向人而非面向对象。Matin Flower认为:“在敏捷开发过程中,人是第一位的,过程是第二位的。所以就个人来说,应该可以从各种不同的过程中找到真正适合自己的过程。”这与软件工程理论提倡的先过程后人正好相反。在传统软件开发过程中,所谓分配工作,就是为每个人安排一个角色,然后每个人努力去扮演好那个角色,努力去适应那个角色。而在敏捷软件开发中,这些被完全颠覆,敏捷软件开发试图发挥每个人的特点,让每个人的能力得到最大的利用。

敏捷软件开发正式出现的标志是2001年2月的“敏捷宣言”(Agile Manifesto),这项宣言是由17位当时称之为“轻量级方法学家”所编写签署的,他们的价值观是:个人与交互重于开发过程与工具;可用的软件重于复杂的文档;寻求客户的合作重于对合同的谈判;对变化的响应重于始终遵循固定的计划。

敏捷过程承认每个人都有特定的能力(以及缺点)并对之加以利用,而不是把所有的人当成一样来看待。更重要的是,在这样的理念下,几个项目做下来,每个人的能力都从中得以提高。这种人的能力的提高,对公司是无价之宝。而不至于把人当成齿轮,随着时间的推移,人的能力慢慢被消耗掉,最后变成留之无用、弃之可惜的尴尬人物。因此,敏捷开发认为个人与交互重于开发过程与工具。

可用的软件可以帮助开发人员在每次迭代结束的时候,获得一个稳定的、逐渐增强的版本。从而允许项目尽早开始,并且更为频繁的收集对产品和开发过程的反馈。随着每次迭代完成软件的增长,以保证开发小组始终是处理最有价值的功能,而且这些功能可以满足用户的期待。因此,可用的软件重于复杂的文档。

敏捷开发小组希望与项目有关的所有团体都在朝共同方向努力,合同谈判有时会在一开始就使小组和客户出于争执中。敏捷开发追求的是要么大家一起赢,要么大家一起输。换句话说,就是希望开发小组和客户在面对项目的时候,以一种合作的态度共同向目标前进。当然,合同是必需的,但是如何起草条款,往往影响到不同的团体是进行合作式的还是对抗式的努力。这就是为什么敏捷开发认为寻求客户的合作重于对合同的谈判。

敏捷开发认为对变化进行响应的价值重于始终遵循固定的计划。他们最终的焦点是向用户交付尽可能多的价值。除了最简单的项目以外,用户不可能知道他们所需要的所有功能的每个细节。不可避免地在过程中会产生新的想法,也许今天看起来是必需的功能,明天就会觉得不那么重要了。随着小组获得更多的知识和经验,他们的进展速度会比开始的时候期望值慢或者快。

三、对比

敏捷开发区别于瀑布式的特征很明显 ,敏捷开发是以一种迭代的方式推进的,而瀑布模型是最典型的预见性的方法,严格遵循遇见计划的步骤顺序进行,步骤成为衡量进度的方法。敏捷开发过程中,软件一直处于可使用状态,它将项目分成若干相互联系、可以独立运行的子程序,因此,每个阶段软件都是可见的。

敏捷软件开发相对于传统软件开发更加善于应对变化,更容易集思广益,更容易发挥每个人的作用。因为在开始时软件就处于可用的状态,更容易进行调试,在中途做出改变,最后能更好的满足用户的需求。这也就是为什么敏捷软件开发越来越受到人们的重视,越来越广泛的被应用到实际软件开发中的原因。但敏捷开发同样存在着一些局限性,比如它不太适用于开发人员较多的团队,它比较适合人数相对较少的团队,因为这样更便于沟通交流。现在,敏捷开发还不够完美,还有待继续完善,传统软件开发也没有从我们的视线中消失,在一些不经常发生变化的项目中,传统开发依然发挥着不可替代的作用。敏捷开发并不能取代传统软件开发,对于一个项目,要根据它的特点选择最合适的开发方法,才能取得最好的成果。

四、参考文献

[1] Roger S Pressman,软件工程-实践者的研究方法[M].北京:机械工业出版社,1999.

[2] Robert C·Martin,邓辉译.敏捷软件开发——原则、模式与实践[M].清华大学出版社,2003-09-01.

[3].Thomas Stober;Uwe Hansmann,  Best Practices for Large Software Development Projects ,  Springer Publishing Company, Incorporated, 2010