软件工程的传统开发与敏捷开发

Posted Loptr、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程的传统开发与敏捷开发相关的知识,希望对你有一定的参考价值。

 

  

引言

       随着计算机的普及,软件工程成为了计算机产业中特别重要的一个产业。自从瀑布式开发模式提出之后,软件工程就走上了规范化的道路。随着软件工程的发展,逐步衍生出各种各样的软件开发模式。其中最受瞩目的就是敏捷开发模式。敏捷开发在短期的发展后,逐步从传统开发模式中脱离出来,逐渐占据了软件开发行业的半壁江山。本文从传统开发与敏捷开发的模式出发,对比敏捷开发与传统开发,浅析现代软件开发模式。

软件的传统开发

       软件的传统开发具有悠久的历史,从20世纪60年代末开始提出软件工程这个概念,到如今传统开发模式已经包含各种不同的软件开发模型,本节将通过瀑布模型、增量过程模型、原型模型、螺旋模型这四种模型浅析传统开发。

瀑布式模型

 

图一:瀑布式开发模型示意图

 

       瀑布式开发是一种老旧的开发模式,在现在的软件开发环境中已经显得略有过时。瀑布式开发的核心思想就是将功能的设计与实现分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。在瀑布式模型中,软件生命周期被划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,这六项活动是自上而下的,上一级如果不被完成将无法进行下面的后动甚至会返回上一级的活动。因此瀑布式开发对于需求经常变动的项目并不适用。

 

图2 瀑布式项目开发流程

增量过程模型

 

图3 增量过程模型示意图

       过程增量模型是一种受到客户与开发者所喜欢的软件开发模式。这种开发模式将一个软件工程分解成一个个不相关的功能,每一个阶段提交一个功能,然后在这个提交基础上实现增量设计,逐步向已有的软件项目中添加新的功能,逐步实现全部功能。

原型模型

 

图片4 原型模型示意图

  原型模型是优先快速开发一个符合用户基本要求的模型,然后由使用者去试用这个模型,在使用的过程中,模型所存在的问题将会被用户反馈,根据反馈的意见,开发者不断修正自己的模型,最后产生一个模型的最终版本,这个版本将提交给用户,初始的原型将会被废弃使用。

螺旋模型

 

图5 螺旋模型示意图

  螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。他最大的特点就是引入了风险评估机制,在每一次迭代开发之前都会存在一个风险评估的步骤。如果经过分析存在重大的风险,将会停止项目的开发,因此螺旋模型更适合于大型的昂贵的系统级的软件应用的开发。

敏捷开发

          

图6 敏捷开发示意图

       敏捷开发是2001年被提出来的一种新的软件开发模式。它的宣言如下:

  个体和交互 胜过 过程和工具
  可以工作的软件 胜过 面面俱到的文档
  客户合作 胜过 合同谈判
  响应变化 胜过 遵循计划
  虽然右项也有价值,但是我们认为左项具有更大的价值。

  从其宣言之中我们可以看出,敏捷式开发更加注重人的作用,重视在开发过程中人与人的交流与沟通。敏捷式开发其实提倡的并不是尽快的拿出产品,而侧重的是“灵活”,这种灵活主要体现在不拘泥于传统软件开发的文档限制,重视的是交流产生的火花。

  敏捷式开发主要包含两种具体的开发方法即:极限编程(Extreme Programming)和Scrum。敏捷开发也是以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在软件项目在构建初期被切分成多个子项目,这些小项目具有很强的独立性,分别独立完成。在这个过程中,程序实现人员按照擅长的领域被分到不同的模块之中,采用这种形式,能最大限度发挥程序实现人员的作用。

  敏捷开发具体实现: http://blog.csdn.net/alvanchen/article/details/5749872 在此不在赘述。

特点及对比

传统开发

       以瀑布式开发为例,其开发过程中存在以下优点:首先就是提供了按阶段划分的检查点,能够确保每个阶段能够保质保量完成,因为这个特点,瀑布式开发只需要关注当前活动以及之后的活动,而不需要向前开发。其次就是模板化比较好,能够在迭代中使用,普适性比较好。

       但是瀑布式开发也存在着很多缺点:首先就是产生了特别多的文档,极大的增加了工作量,其次是只有在开发的最后才能够见到产品,存在产品风险。再者就是不能适应用户需求的变化。

       虽然在瀑布式开发之后的传统软件开发模式就瀑布式开发的缺点做出了相应的改变,但其在开发的最小单元中应用的大多还是瀑布式开发。所以其存在的明显缺点就是增大了工作量,以及在每个模块的开发过程中比较死板。

敏捷开发

       软件的敏捷开发,相对于传统的开发有了很多改进,其主要优势为:首先是能更快速的交付产品,不必产生一些复杂的文档,减少了工作量。其次就是能够更好的适应用户的需求变化。

       但是敏捷开发显然也不是十全十美的,首先因为敏捷开发主要以人为主,所以一旦产生人员的变动,将会对软件的开发造成极大的影响。其次因为敏捷式开发的需求大多是口头上的,很容易产生软件交付的时候造成产生问题时会有责任不明确的情况。最后,因为没有明确的文档规定,最终会造成软件的可移植性不强,系统维护性不好。

对比

       虽然敏捷开发避免了传统开发耗时高,工作量大的问题,但是很明显,敏捷开发对于团队的协作特别倚重,且对于一些与客户利益划分明显的项目明显不适用敏捷开发。因此敏捷开发使用受到了很大的限制。

       因此,传统开发与敏捷开发是各有利弊的,在软件的使用过程中需要明确软件开发的具体环境,灵活的选择软件的开发方法。在一些大型的,利益划分明显,要求明确的软件开发中,传统开发是优于敏捷开发的。但是在一些低薄利益、且需求会有变化的软件开发过程中,敏捷开发明显是优于传统软件开发的。

举个例子

传统开发

       我认为在这个学期的软件工程的课程,就是采取的一种传统的软件开发模式。在这个开发的过程中,我们必须要制定明确的计划,按照计划给出各种规划书,一步一步的往下走。在这种开发过程中,我们不可能在学期中部突然改变用户需求,因此我认为这个项目应该选择客户要求较为明确的项目进行开发,这种开发模式会使得我们项目开发比较稳。

敏捷开发

       我所选择的实验室的项目的开发有一部分是采取敏捷开发的,因为实验室因为与其他公司建立合作而接到的一些项目,利益方面不存在划分问题,同时实验室的团队相对稳定,而且交流方便,因此实验室的一些项目采取的是敏捷开发,这种开发使得我们能更快的提供给客户产品,能够保持两方良好的合作。

总结

       根据以上的阐释,我认为在现如今的软件开发环境之中,无论是传统开发还是敏捷开发都是具有自己独特的生命力的。二者不存在孰优孰劣的问题,我们在选择开发模式的时候,应该根据自己软件开发的现有资源来灵活选择开发模式。

参考

百度百科《瀑布模型》

http://baike.baidu.com/link?url=PKzcWINR_04Bg_wCvmsjyW13_zXQswcXfaV3uD5NGep18d8MTwEeZaH5iFnOy7C23ZpW3qRNe2AwK_sLOXhEWK

百度百科《瀑布式开发》

http://baike.baidu.com/link?url=2-6q13repl5zNmFVAh2bFIJm5y9QiDa2rLpZLSczUE4ZkKSUWvTheowX05JZY6cZW57GWv5so2I_GSJ4C9ohYii1B-rZMm-OBMdld0znQ5nrlaO3VF_xbIhxq9SttRWt8Y3rSiq-DyPhk5subqIoZa

百度百科《增量模型》

http://baike.baidu.com/link?url=2ikrc1LvevzyX6KGVtJ5CJ7eJsSt33VqFRyDNoo6XzETRB5SBw85QB1wMoLqXnBc_xaLpZrMPttJEtlZ9xT6J_

追随我心博客《软件过程模型(瀑布,原型,增量,螺旋)的原理及优缺点》

http://blog.163.com/pengjintaogz@126/blog/static/1622990682010920111749677/

百度百科《原型化开发》

http://baike.baidu.com/link?url=22e4KsZl3Ln5eqdJSZHeIP1wBy0KaeLbU8xcgD0Qx0Xe00jFAhB3LH2pLvi0ujZwgE9WEckUEbeXQHwY7bE1ua

百度百科《螺旋模型》

http://baike.baidu.com/link?url=-DScRHhB7ViNukAlA9U6sGXIgTmyd11JBUZMaH6VDHO4mVN2mJ0vtELhfGkYoOTU-i7mykV7Q6_B36Tn5D0RjM5ikLSWTxZVrfpuMJ6BEusIndLWFL9sw9OGyoKFAxLX

百度百科《敏捷开发》

http://baike.baidu.com/link?url=A8IWywdDltS9CtV5LzEWmlPAvE_HWUmWhZfYKeCv1pLO98IIHH7v2oD_vrVOCdGFGI3BxEvXYcCuIwgmTM0SZZFQzAVykgbs6bFF8EVrdBkXRlsEaUDaw5IbL1tOMfH9

alvanchen博客《敏捷开发流程总结》

http://blog.csdn.net/alvanchen/article/details/5749872

HUST-CS博客《敏捷软件开发与传统软件工程的比较》

http://blog.csdn.net/u012755393/article/details/52790887

  BY Loptr.

 

以上是关于软件工程的传统开发与敏捷开发的主要内容,如果未能解决你的问题,请参考以下文章

敏捷开发与传统开发

敏捷软件开发VS传统软件工程

传统软件开发与敏捷软件开发的比较

软件工程的传统开发与敏捷开发

何谓敏捷软件开发?与传统软件工程的对比

敏捷开发与传统开发方式的比较