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

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

最早了解敏捷开发是通过大二的一次博雅课堂,一位在百度工作的北航学长跟我们分享了他近年来从事敏捷开发的经历。印象最深的一句话是一个延迟3个月交付100%功能的软件和一个按时交付75%核心功能的软件,敏捷软件开发者更愿意选择后者。本学期的软件工程基础课又向我们讲授了传统软件开发,经过课上和课后的学习,对于敏捷软件开发和传统软件开发有了浅显的认识和理解。由于课上学习的重点是传统软件开发,所以课下对敏捷软件开发进行了更多的涉猎,本文以敏捷软件开发为主体,来分析其与传统软件开发的对比。

敏捷软件开发与传统开发方法相比具有很大的不同,其特点是适应性而不是预测性,强调沟通和反馈,开发团队不仅包括开发人员,还包括管理人员和客户。它鼓励团队成员的相互交流通过反馈机制尽早纠正软件中的错误,提高开发效率,同时为需求的调整提供更多机会,保证软件向正确的方向发展。

传统软件开发如瀑布模型强调预见性,严格遵循计划、分析、设计、编码、测试和维护等几个阶段。瀑布模型开发各阶段间具有严格的顺序性和依赖性,必须等到前一阶段的工作结束后才能开始下一阶段的工作,前一阶段的输出文档是后一阶段的输入文档,只有前一阶段的输出文档完全正确,后一阶段才能获得正确的结果。

对敏捷联盟宣言的理解

1.个体和交互胜过过程和工具,强调软件开发必须发挥人的积极性和创造性,更看重人的沟通和团队的力量;

2.可以工作的软件胜过面面俱到的文档,敏捷软件开发要求文档短小简明,能说明系统的高层结构和概括的设计原理,将精力集中在代码和测试上;

3.客户合作胜过合同谈判,满足合同的软件并不一定是成功的软件,只有满足客户真实需求的软件才是成功的。客户与开发团队密切工作在一起,不断沟通和反馈;

4.响应变化胜过遵循计划,只为下两周做详细的计划,为下三个月做粗略的计划,为以后做极为粗糙的计划。

常见的敏捷软件开发方法的特点

1.极限编程(XP):沟通,简单,反馈,胆识,为四项基本准则,快速反馈,假设简单,递增更改,优质工作,为5条法则,几乎无文档。在所有的敏捷方法中,XP对日期产生的兴趣最多,并且在对良好不定的问题领域的特殊实践方面最为具体。

2.SCRUM:特别强调开发队伍和管理层的交流协作。每天,开发队伍都会向管理层汇报进度,如果有问题,也会向管理层要求帮助解决。

3.动态系统开发方法:坚持功能在项目的全过程中都可以改变,当功能被允许改变时,通过使用时间框控制的目的就能达到。重视为项目营造一个正确的文化氛围,如手册中描述了项目有不同的侧重点,并指出对于那些缺陷在传统方法中转变起来是多么的困难。也非常重视协作价值和原理,以及文档。

4.功能驱动开发方法,短时间的迭代阶段和可见可用的功能,适合于那些不确定或常变更的需求的系统。它抓住了软件开发的核心问题领域,即正确和及时地构造软件。

5.水晶系列方法:相对于其它敏捷方法,水晶系列方法强调软件开发流程的纪律性,所以它比其它敏捷方法易于使用,但它的生产率不如Xp等其它敏捷方法。水晶系列与Xp一样,都有以人为中心的理念,但在实践上有所不同。人们一般很难严格遵循一个纪律约束很强的过程,因此,与Xp的高度纪律性不同,水晶系列方法试图用最少纪律约束而仍能成功的方法,从而在产出效率与易于运作上达到一种平衡。

6.自适应软件开发(ASD):ASD强调开发方法的适应性,这一思想来源于复杂系统的混沌理论。ASD不像其他方法那样有很多具体的实践做法,它更侧重为ASD的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。

各种敏捷软件开发方面的共同特征

(1)迭代式开发。整个开发过程被分为几个迭代周期,每个迭代期是一个定长或不定长的时间块,每个迭代周期持续的时间一般较短,通常为1~6 周。

(2)增量交付。产品在每个迭代周期结束时被逐步交付使用,而不是在整个开发过程结束时一次性交付。每次交付的都是可被部署到用户应用环境中的、能给用户带来即时效益和价值的产品。

(3)开发团队和用户反馈推动产品开发。敏捷开发方法主张用户能够全程参与整个开发过程。这使需求变化和用户反馈能动态管理并及时集成到产品中。同时,团队也能及时对用户的需求提供反馈意见。

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

(5)开发团队自我管理。拥有一个积极的、自我管理的、具备自由交流风格的开发团队,是每个敏捷项目的必要条件。敏捷开发总是以人为中心建立开发的过程和机制,而非把过程和机制强加给人。

项目角度分析区别

下面从敏捷管理、敏捷需求分析、敏捷软件开发三个主要方面来探讨敏捷开发与传统软件开发的主要区别和特点。

敏捷管理,建立自组织的团队,敏捷团队一个重要的目标是实现快速适应现实的变化,所以敏捷项目管理把控制和计划移交给整个团队,而不是管理者。客户被看做团队成员。管理者主要是对团队进行指导,提供必需的资料以及扫清工作障碍。

敏捷需求分析,传统软件工程是一个不断反复的需求定义、文档记录、需求演进的过程,并最终在验证的基础上冻结需求。敏捷软件开发以迭代思想为核心,项目需要通过多次构建,它的需求需要在最后一次构建版本时才能完整的定义。敏捷需求分析会把客户的各种需求按优先级排列,从高到低进行实现,优先级低的需求也可能被抛弃。

敏捷软件开发,主张演化设计或迭代设计,不做大型的预先设计,快速进入编码阶段,通过重构来维持改进设计。

敏捷开发在人的层面和技术层面都强调及时反馈,测试、设计、编码交替进行。在尽可能短的迭代周期内完成一个小的功能模块,并快速测试,展示给客户,获得反馈。

主要特点分析区别

下面从团队建设、管理流程、用户参与程度、业务需求、交付频率和文档量六个方面来总结一下敏捷软件开发和传统软件开发的区别。

1.团队建设:以团队为单位,强调团队建设,赋予高度的责任,支持开发、透明的交流环境;以项目经理为领导核心,团队成员之间交付很少

2.管理流程:流程可以简单,但规划与执行必须严谨;复杂,繁琐,静态,变更成本大

3.用户参与程度:强调用户保持密切的联系和交流;很少涉及用户参与

4.业务需求:需求具有优先级次序,开发以增量方式逐步完成功能,有助于量化项目过程;假设需求是明确的,一旦需求变更势必增加其余环节的复杂度

5.交付频率:经常交付,交付周期短;项目结束时交付,交付周期长

6.文档量:最必要最实用,高的应用度和阅读度;产生大量中间文档,低的应用度和阅读度

传统开发生命周期中两个重要缺陷及敏捷软件开发的应对策略

1.测试阶段往往是整个代码编写完成后进行,测试无问题后将产品交付给客户。假如在测试阶段发现了问题,则有可能需要对整个模块进行返工来修改。

2.由于开发早期客户往往不能明确自己需要实现什么,因此早期建立的需求模型往往不能准确包含系统所需的功能,而在整个产品按照线性模式开发完后,客户则提出改变需求的要求,这样对系统进行频繁修改后,将导致整个系统的兼容性受到影响,尤其在大型系统中更是表现突出。

相对于传统软件开发方法,敏捷方法中避免了客户在开发初期不能提供准确详细需求导致的问题,采用迭代式的开发。通过不断发布新版本并演示给客户,使得客户在与系统交互的过程中发现自己需要的系统特性,从而改善在每次迭代前提供的需求。这种开发方式中允许客户延迟某些决定,等有价值的信息出现或对技术优化后才去决定,这也是敏捷开发的一个优势。实际的敏捷开发中,甚至可以在任何需求都未知的情况下开始开发。另一方面,敏捷开发可以提供给客户一个更符合需求的最终产品。每一个短的迭代,都为客户提供一个完整的模块以便于讨论,由于这些模块并不是完整的系统,所以之后的任何新增功能的开发都不会增加开发费用。这样开发者可以随时为客户增加任何功能,并且系统将在客户没有再需要添加的功能后进行整合。因此,敏捷开发的产品将是完全符合客户需求的完整的系统。

误区解读

经过与传统软件开发的对比,可能会有很多人陷入几个误区,下面对此进行说明。

首先,敏捷开发并不是说可以不要规范不要文档,敏捷开发同样需要文档,只不过它对规范和文档像对开发人员一样,要求把它们组织得更加清晰,高效,要求简化的只是不必要的部分。

其次,不是说敏捷软件开发与传统软件开发相比有这么多优点就十全十美了,它当然也有自己的缺陷。

敏捷软件开发的缺陷 

下面就通过与传统软件开发的对比来看看敏捷软件开发的缺陷。

敏捷方法明显地降低了文档的数量,甚至声明代码本身就是文档。这就需要开发人员为代码添加更多的注释,但是对于不习惯敏捷开发或团队新成员则很难做到,他们必须不断询问有经验的开发人员,这样会导致延迟迭代交付时间,甚至增加开发费用。而传统开发则强调文档对团队成员的指导作用,开发人员可以在不知道项目细节的情况下完成开发。

敏捷开发中强调交互和客户的参与。每次迭代前,团队和客户都将召开一个会议,团队成员将介绍在这次迭代中所作的工作,而客户则根据成员的介绍给出新的功能要求。实际中大部分情况,这种例会是非常乏味和沉闷的,因为团队成员必须重复地向其他

成员和客户展示自己负责的模块,接受给出各种对需求的更改,而且每次迭代都是如此,通常为迭代分配的时间都是以周为单位的,开发人员经常感到时间不够用,尤其是自己负责的模块中包含一些复杂的算法时,时间就变得越紧,经常使得迭代延迟。而传统开发中客户不会参与开发过程,实现过程中开发人员只是根据文档编写代码,然后交付最终产品。这样开发人员不必关心那些频繁的迭代会议,而且时间上更加宽泛,有利于开发出更好的产品。

敏捷开发对开发人员的个人技能要求更高。敏捷开发强调交互和客户的参与,这就意味着每个团队成员都要具备一定的个人能力和社交技能。每次迭代都必须给客户提供完整的功能模块,并且需要让客户明白当前的开发进程以及开发中遇到的一些问题,开发人员不但需要将自己的工作描述清楚,还得正确理解客户提出的新需求,这需要具备较好的沟通技能。而实际中,不一定每一个开发人员都能具备这样的技能,一旦某一个人不能正确理解一些重要信息,将可能导致下一次迭代不能准确交付,更糟糕的是,如果理解有误,会使得开发的模块中包含多余的功能,结果是对模块进行修改,从而增加开发费用。因此,开发人员社交技能的提升将增加开发过程的稳定性。

敏捷开发允许增加需求也导致两个设计中的问题:系统过于僵硬和机动性强。僵硬是指系统中一旦有更改的地方容易引起其他模块的级联改动。机动性是指可能由于需求改变而压缩一些可重复使用的组件,这意味着大量的工作量和对系统整体稳健性带来风险。如果系统中存在这些问题,会违反面向对象设计中的接口隔离原则,从而导致部署过程中的很多问题。

所以,敏捷软件开发和传统软件开发在当今都有属于自己的舞台,都会向着更好的方向发展。

【参考文献】

1.基于Scrum敏捷开发的软件过程管理研究 王敏 《昆明理工大学》  2010

2.基于构件的敏捷软件开发方法 潘悦,沈备军 《计算机工程》, 2005, 31(15):68-69

3.几种常见的敏捷软件方法综述 聂华北,沈剑翘 《计算机系统应用》, 2008, 17(12):157-161

4.敏捷过程在软件工程课程中的教学实践_朴勇 《计算机教育》, 2015(24):78-80

5.敏捷开发_极限编程在管理信息系统开发中的实践探讨 邓靖颖,黄穗 《计算机工程》, 2004, 30(24):189-191

6.敏捷开发方法及一个非典型应用实例 林海,徐晓飞,潘金贵 《计算机科学》, 2005, 32(2):125-128

7.敏捷开发软件模式初探 姚立新,梁宏涛 《电子技术与软件工程》, 2013(20):82-83

8.敏捷软件开发技术研究 周莹莹 《长春理工大学》, 2006

9.软件开发生命周期法比较之敏捷与传统_张志丽 《电脑开发与应用》, 2013(12):32-34

10.敏捷软件开发方法在软件维护中的应用研究 于士文 《湖南大学》, 2006

时间: 2024-10-23 12:32:09

敏捷软件开发与传统软件开发的对比的相关文章

浅谈敏捷软件开发与传统软件开发

本文将介绍传统软件开发与敏捷软件开发,并简单分析二者的优缺. 首先我查阅相关资料大致了解了下为什么会爆发"软件危机"和什么是"软件危机".由于在早期的软件开发活动中有明显的个体化特征,开发流程不规范,人们没有将软件与程序加以详细的区别,对程序之外的数据和相关文档资料没有给予重视,对编写程序之外的软件活动也没有给予重视,因此出现了"软件危机"."软件危机"的特点有:开发成本急剧上升.不能按时交付软件.软件难以维护.无法保证软件质

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

敏捷软件开发VS传统软件开发 软件开发方法是软件工程理论的重要内容,在软件开发方法中,对于开发软件时的"做什么"和"如何做",给出了明确的.详细的回答.那软件开发方法的"做什么"和"如何做"之间究竟有什么异同? 下面本文就传统软件开发和敏捷软件开发的来探讨一下. 关于传统软件开发 在软件开发方法出现之前,人们普遍错误的认为开发软件只是编写程序.当时,软件开发活动个体化非常严重,编写程序随心所欲,过分追求编程技巧,造成程序很难阅

减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同

本篇文章讨论并不是:不要使用存储过程,因为有些事情还是要存储过程来完成,不可能不用.而是关于:"业务逻辑是不是要封装在存储过程中实现,这样子php.java等就是调用存储过程". 业务逻辑,通俗说就是:比如要取数据的操作,取出会员编号为x的数据,原来我们一般是封装成函数,或者直接编写sql语句查询.现在是交给数据库的存储过程去完成. +------------------------------------------------------------ 写这篇文章的缘由 +-----

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

敏捷软件开发 VS. 传统软件工程 软件工程这一术语1968年被提出,之后美国软件工程专家巴利·玻姆对十多年间研究软件工程的专家学者们提出的一些准则与信条,于1983年对提出软件工程的七条基本定理,将软件工程这一学科具体化,软件工程中开发与管理软件的方法也不断完备.而敏捷软件开发于2001年由Kent Beck和其他16位知名软件开发者提出,敏捷开发是人们对于传统软件开发方式的一种提出的新的挑战.本文将具体介绍软件传统工程与敏捷软件开发两种方法,并对两者进行对比分析. 一.传统软件工程 软件工程

敏捷软件开发与传统软件工程——因果篇

因--差异之源 近来秋将尽,京中阴霾好几日不见好转,更有几天雨水扰人心烦.幸得一日周末,又逢雨过天晴,秋高气爽,捡得几番文笔来细述敏捷软件开发与传统软件工程之异同. 从字面看来,二者无非是"敏捷"与"传统"一词之差.然而这两个词又同属修饰之词,因此就这两个词之差自然就是两种开发方法的差别所在. 敏捷一词,自然是好理解.正如众人所云如游侠身手之敏捷,为称赞游侠反映之迅速,应对变化之机敏.此处用以修饰软件开发,我们亦可套用迅速应变之意,也就是在软件开发过程中能迅速应对需

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

在上世纪60年代,由于计算机的计算能力显著提升,人们需要处理问题的复杂程度也得到提升,导致了一系列问题比如项目运行超过预算.项目运行超过时间.软件十分低效.软件质量很低.软件无法满足需求.项目缺乏管理,代码难以维护.软件难以交付,称为软件危机.人们意识到,软件开发不仅仅是让程序员编写程序那么简单,而是一项工程,需要科学的开发方法,从而人们提出了软件工程的概念,采用工程化的方法对软件开发进行管理.而在当今,软件工程中软件开发方法主要分为传统软件开发和敏捷软件开发.本文主要介绍这两种软件开发方法以及

敏捷开发与传统开发

  本文主要介绍和讨论什么是敏捷开发和传统软件开发,分析这两个软件开发方法的特点并作出对比.首先介绍什么是传统软件开发. 传统开发 传统软件开发主要指的是传统软件开发的模型.传统的软件开发模型包括瀑布模型.增量过程模型.原型模型.螺旋模型等.这里就主要说这四个模型. 瀑布模型 瀑布模型可以说是狭义上的传统开发模型.1970年温斯顿·罗伊斯(Winston Royce)提出了著名的"瀑布模型",直到80年代早期,它一直是唯一被广泛采用的软件开发模型.瀑布模型由软件开发经典的四个过程组成-

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

敏捷软件开发:又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新兴软件开发方法,是一种应对快速变化的需求的一种软件开发能力. 与传统软件工程相比,它们的具体名称.理念.过程.术语都不尽相同,相对于"非敏捷",更强调程序员团队与业务专家之间的紧密协作.面对面的沟通(认为比书面的文档更有效).频繁交付新的软件版本.紧凑而自我组织型的团队.能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中"人"的作用. 本文将介绍敏捷软件开发的历史背景与发展,

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

一.   传统软件工程 从上个世纪60年代开始,人们开始逐渐认识到了确实存在着"软件危机" 这样一个事实,软件开发人员被诸如下列问题困扰: 软件生产不能满足日益增长的需要 软件开发成本和开发进度估计往往不准确 软件开发人员和用户之间信息交流不充分,用户对完成的软件满意度很低 软件价格昂贵,软件成本在整个计算机系统中所占的比例急剧上升,软件已成为许多计算机系统中花钱最多的项目 软件质量难以保证 软件可维护性差,程序中的错误很难改正,适应性或完善性维护都极其困难 导致危机问题的一个重要原因