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

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

    最先了解敏捷开发是经过大二的一次博雅课堂,一位在百度工做的北航学长跟咱们分享了他近年来从事敏捷开发的经历。印象最深的一句话是一个延迟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.因为开发早期客户每每不能明确本身须要实现什么,所以早期创建的需求模型每每不能准确包含系统所需的功能,而在整个产品按照线性模式开发完后,客户则提出改变需求的要求,这样对系统进行频繁修改后,将致使整个系统的兼容性受到影响,尤为在大型系统中更是表现突出。

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

 

误区解读

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

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

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

 

敏捷软件开发的缺陷 

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

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

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

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

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

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

 

     因此,敏捷软件开发和传统软件开发在当今都有属于本身的舞台,都会向着更好的方向发展。

相关文章
相关标签/搜索