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

作者:亿网科技  来源:亿网科技  发布时间:2023-03-09

85871669306977097.jpg

最早理解矫捷开发是经过大二的一次博雅课堂,一位在百度工作的北航学长跟我们分享了他近年来从事矫捷开发的阅历。印象最深的一句话是一个延迟 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. 由于开发早期客户常常不能明白本人需求完成什么,因而早期树立的需求模型常常不能精确包含系统所需的功用,而在整个产品依照线性形式开发完后,客户则提出改动需求的请求,这样对系统停止频繁修正后,将招致整个系统的兼容性遭到影响,特别在大型系统中更是表现突出。

    相关于传统软件开发办法,矫捷办法中防止了客户在开发初期不能提供精确细致需求招致的问题,采用迭代式的开发。经过不时发布新版本并演示给客户,使得客户在与系统交互的过程中发现本人需求的系统特性,从而改善在每次迭代前提供的需求。这种开发方式中允许客户延迟某些决议,等有价值的信息呈现或对技术优化后才去决议,这也是矫捷开发的一个优势。实践的矫捷开发中,以至能够在任何需求都未知的状况下开端开发。另一方面,矫捷开发能够提供应客户一个更契合需求的最终产品。每一个短的迭代,都为客户提供一个完好的模块以便于讨论,由于这些模块并不是完好的系统,所以之后的任何新增功用的开发都不会增加开发费用。这样开发者能够随时为客户增加任何功用,并且系统将在客户没有再需求添加的功用后停止整合。因而,矫捷开发的产品将是完整契合客户需求的完好的系统。

误区解读

    经过与传统软件开发的比照,可能会有很多人堕入几个误区,下面对此停止阐明。

    首先,矫捷开发并不是说能够不要标准不要文档,矫捷开发同样需求文档,只不过它对标准和文档像对开发人员一样,请求把它们组织得愈加明晰,高效,请求简化的只是不用要的局部。

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

矫捷软件开发的缺陷 

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

    矫捷办法明显地降低了文档的数量,以至声明代码自身就是文档。这就需求开发人员为代码添加更多的注释,但是关于不习气矫捷开发或团队新成员则很难做到,他们必需不时讯问有经历的开发人员,这样会招致延迟迭代托付时间,以至增加开发费用。而传统开发则强调文档对团队成员的指导作用,开发人员能够在不晓得项目细节的状况下完成开发。

    矫捷开发中强调交互和客户的参与。每次迭代前,团队和客户都将召开一个会议,团队成员将引见在这次迭代中所作的工作,而客户则依据成员的引见给出新的功用请求。实践中大局部状况,这种例会是十分乏味和沉闷的,由于团队成员必需反复地向其他

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

    矫捷开发对开发人员的个人技艺请求更高。矫捷开发强调交互和客户的参与,这就意味着每个团队成员都要具备一定的个人才能和社交技艺。每次迭代都必需给客户提供完好的功用模块,并且需求让客户明白当前的开发进程以及开发中遇到的一些问题,开发人员不但需求将本人的工作描绘分明,还得正确了解客户提出的新需求,这需求具备较好的沟通技艺。而实践中,不一定每一个开发人员都能具备这样的技艺,一旦某一个人不能正确了解一些重要信息,将可能招致下一次迭代不能精确托付,更糟糕的是,假如了解有误,会使得开发的模块中包含多余的功用,结果是对模块停止修正,从而增加开发费用。因而,开发人员社交技艺的提升将增加开发过程的稳定性。

    矫捷开发允许增加需求也招致两个设计中的问题:系统过于生硬和机动性强。生硬是指系统中一旦有更改的中央容易惹起其他模块的级联改动。机动性是指可能由于需求改动而紧缩一些可反复运用的组件,这意味着大量的工作量和对系统整体稳健性带来风险。假如系统中存在这些问题,会违背面向对象设计中的接口隔离准绳,从而招致部署过程中的很多问题。

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