敏捷软件工程和传统软件工程的比较

敏捷软件工程和传统软件工程比较

(注:博文中加粗的正文部分为引用部分)

1、引言

敏捷软件开发从被提出之后就收到了广泛的关注,其从传统开发中剥离开自成一体,逐渐占据软件工程学界的半壁江山,与传统软件开发分庭抗礼。在长期的软件工程发展中逐步形成敏捷型和传统型软件工程相辅相成,并渐渐被软件开发团体认可并运用于实际中。

2、步步为营——传统型软件工程

传统型软件开发是基于“瀑布模型”的开发方式,以软件架构为核心,采用结构化设计以及分析方法将软件生命划分期限,并且开发进度按照从上而下的顺序相互衔接,如同瀑布一般。瀑布模型是Winston Royce在1970年提出的一种软件开发模型,瀑布式开发是一种传统的计算机软件开发,是最经典的预见性软件开发方法,严格遵守计划、分析、编码、测试、维护的步骤。阶段之间通过文档流通,每个阶段结束时要进行严格的审查,检查功能设计和实现是否符合上阶段流下了的文档的要求,如果不符合就逆流到上个阶段检查并修正,以此往复,直到流到最后阶段产品通过测试后进行发布及运行期间的维护[i]

 

图1  瀑布模型开发过程

各个阶段需要文档相互流通,在软件开发前期就需要对整个软件的架构进行设计,优秀的架构可以使软件足以支撑整个功能体系以及便于维护,而这样优秀强大的框架通常需要在十分有经验并且有着独特眼光的架构师在完全理解开发用户的需求之后才可能设计出,通常这个难度是较大的,而这是传统型软件开发的第一步,也是最重要的一步。这样开发的好处是,超前的预见性和每一阶段都要通过严格的审查才能进行下一个阶段,保证了软件的质量。缺点是,软件的框架一旦确定下来就很难改变,甚至会牵一发而动全身,难以适应变换莫测的客户需求。此外,在软件开发过程中需要人员之间交流的并不多,每一个阶段对代码的编写或者测试都由文档规定。由于各个阶段要自上而下相互衔接,各个阶段的沟通要通过大量臃肿、复杂的文档来传递信息。这样的软件开发通常会将每一块的功能做的相对完善(基于明确的文档),而模块之间的衔接以及充分理解文档的时间将显得非常长。

3、灵巧精灵——敏捷型软件工程

敏捷型软件开发不是一门技术,它是一种开发方法,也就是一种软件开发的流程,它会指导我们用规定的环节去一步一步完成项目的开发;而这种开发方式的主要驱动核心是人,及突出了人作为软件开发的核心,在软件开发中起到的价值。它采用的是迭代式开发敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。

敏捷型软件开发方法有很多,目前较为被认可和接受的是SCRUM编程和XP编程,及极限编程。在软件开发过程中,将项目切分成几个子项目,以最核心的功能为起点进行软件开发,每当一个阶段的软件开发结束,就交付一个阶段的可用开发成果,并且在保留可更改的能力的情况下对于代码进行优化,总结和经验分析。

 

图2 Scrum开发模型

对于Scrum的详细介绍,笔者从博主杨广的博客中学习了很多,为了节省篇幅,笔者在这里给出博客的链接,对于这方面兴趣较大的朋友不妨了解一下,讲解的非常详细。

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

4、举个栗子——浅谈两种开发模式

笔者在国庆期间和几个同学一起开发了一款简单的基于Microsoft平台的UWP(Universal Windows Platform)软件。软件是一个日记本,其核心功能是提供写日记的窗口并且保存日记。在开发初期的讨论会议中确定了开发软件的内容(需求),开发中每个人的分工,然后在国庆期间进行代码编写,测试,最终发布。对于两种开发模式有一定了解之后,这个例子中笔者陷入了一个泥潭:这次的开发,算是传统型软件工程,还是敏捷型软件工程?(尽管在实行过程中有着种种例如根本就没有写文档的一系列问题,此处假设所有的开发过程全部符合软件工程开发的标准,在脑海中自动“.+/”选择补齐对象 (ˉ▽ˉ;)…)

看上去很像是传统型软件工程开发对吧?从一开始的初期会议确定一系列内容,到分工编写代码,测试,优化,到发布,每一步和上一步都有着很完美的衔接,如果上一步出现了差错,下一步就无法进行下去,如多米诺骨牌式的推动。然而笔者的团队在每次开发阶段截至之后都会对自己当前开发的部分进行测试并且发布一个拥有局部功能的几乎已经完全可用的Demo,并且在开发过程中总结开发经验。这看上去又和敏捷型开发非常相似。

图3 敏捷型开发的五个步骤

事实上,在开发过程中,愚蠢的笔者突发奇想在软件中加入了一些貌似很有意思的东西,虽然这导致软件开发在测试那一个环节卡死了很久,但是软件最终还是按期交付了。我们再把瀑布型的开发过程的图片引用一次:

图4 瀑布模型开发过程

新的想法提出,意味着出现了在一开始定义阶段上的问题,按照传统的软件开发来说,这将是一场灾难并且有可能会无期限的拖延交付时间,而笔者的团队并没有推翻当前的大部分代码,而是直接修改某些核心内容后较为妥帖的合并上了,这很像敏捷型软件工程开发中的“下一个阶段工程”,在和小组成员交流后拟定新的开发计划并且和原来的开发内容合并,并完成合并后的测试,防止愚蠢的笔者再产生一些神奇的想法,似乎可以理解为,为下一个阶段的开发进行分析并且准备下一个阶段的开发。

那么,这个有些不伦不类的开发过程应该算在什么里面呢?

愚蠢的笔者认为,两种都不算……

在开发过程中,如果是传统软件开发过程的话,在计划拟定的环节应该做到尽量详尽,准备完全,而不是遗漏很多看上去理所当然然而并没有被实现的功能。事实上,详尽的拟定计划是可以实现的,如果做到的话,就不会出现之前所说的情况。如果是敏捷型软件开发,应该定期对于工程进行任务汇报,而不是几乎没有太多的交流。敏捷软件开发的一个精髓就是刚刚够思想。用逐步实现的思想替代完整架构,每一步的需求和人员及其沟通、开发成本都刚刚好,通过不断地迭代,在迭代过程中响应客户需求的变化,实现最紧致成本,体现刚刚好思想。同时对每次迭代的反馈进行讨论和思考,总结经验和吸取教训。按照这个标准,就不应该出现为了添加新的功能而对于核心代码大动干戈。

在这次工程结束后,笔者分析得出,敏捷型开发适用的范围可能较小,团队人员相对固定并且人数有限,对于编程人员的开发经验和能力要求较多。如果开发的程序复杂度规模是日记本的很多倍,那么在工程几乎结束的时候新添加一个功能的难度可想而知。由于笔者团队开发时对于UWP几乎没有任何了解,在开发过程中几乎不能离开资料,遑论体系结构的架构,虽然团队中有开发经验相对丰富的开发者,然而由于缺少交流导致开发过程中并不能对于一些问题提出建设性的看法。总结一下,在笔者认为,敏捷型开发如果要体现其势如破竹的气势,应当满足一下几个条件:

1、开发人员拥有足够的项目经验和编程能力。

2、软件规模适度,开发团队人数较少。(笔者的观点是,敏捷型开发并不如传统开发那样严谨,有可能有较多漏洞,在大型工程中有可能会出现差池)

3、软件开发过程中需要足够的交流,可以使用各种方式,如站立会议,任务看板以及燃尽线等等

4、及时对完成的任务进行测试调试,推出可用的Demo版本,经验总结并为下阶段的软件开发做好准备。

5、结束语

2016年中国开源年会中,笔者有幸在后台和易软天创的创始人王春生先生对于两种工程开发方式的内容进行一些交谈。在真正的工程中,似乎并没有对于选择敏捷型还是传统型开发看得那么的重。开发方式只是一种方式,并不是敏捷型开发就一定要在极限编程,水晶编程或者Scrum编程中选择,其更多的是一种工程思想,在学习中不应该将自己过分的限制在教条中,把何为传统何为敏捷当成范本在合适的工程中生搬硬套。最重要的还是学会分析软件需求,按照实际情况选择不同的开发方式,或许有些大型项目敏捷型开发会更加有用,而某些小的工程也需要传统方式的严谨。


[1] Gyoung,博主  敏捷型软件和传统型软件开发的比较


时间: 2024-10-08 11:50:32

敏捷软件工程和传统软件工程的比较的相关文章

软件工程:传统软件工程 vs 敏捷软件开发

前言 软件工程(Software Engineering): 是一种层次化技术. 将系统化的.规范的.可量化的方法应用于软件的开发.运行和维护,即将工程化的方法应用于软件. 研究"建立和使用一套合理的工作原则,以便经济地获得可靠的.可以在实际机器上高效运行的软件"的方法. 敏捷软件开发(Agile software development): 一种应对快速变化的需求的一种软件开发方法.基于迭代和增量开发,通过自组织,跨团队,沟通协作完成开发工作. 一.传统软件工程 (一)产生背景 随着

敏捷开发VS传统软件工程

在1960年代中期软件危机爆发之后,人们就在对软件的生产方式进行着不断地探索,以期找到更加高效,科学的软件开发方式,来提高软件的生产率,提升软件的质量.于是便有了随后提出的软件工程的概念.于是我们在现在的软件开发过程中,或者在软件工程课程老师的介绍中,就会看到这样的一种开发模式:在项目前期将调研工作尽可能做到面面俱到,客户的需求以合同的方式进行"冻结",在这些需求确定和调查的基础之上,可以开始进行初步的软件开发计划书的说明,随后进行需求分析,系统设计等等.开发过程中或许会有迭代,但通常

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

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

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

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

敏捷软件工程(agile software development) VS传统软件工程(traditional software development)

敏捷软件工程(agile software development) VS传统软件工程(traditional software development)      Agile principle    The Agile Manifesto is based on twelve principles(敏捷开发12原则) 1. Customer satisfaction by early and continuous delivery of valuable software 2. Welcom

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

敏捷软件开发 VS. 传统软件工程 本文主要介绍敏捷软件开发与传统软件工程分别是什么,并讨论二者各自的优缺点. 一.传统软件工程 1.传统软件工程的由来 进入上个世纪60年代,人们开始逐渐认识到了确实存在着"软件危机" 这样一个事实.例如: ·软件生产不能满足日益增长的需要 ·软件开发成本和开发进度估计往往不准确 ·软件开发人员和用户之间信息交流不充分,用户对完成的软件满意度很低 ·软件价格昂贵,软件成本在整个计算机系统中所占的比例急剧上升,软件已成为许多计算机系统中花钱最多的项. ·

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

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

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

敏捷软件开发与传统软件工程 北航计算机学院 14061157 李奕成 引言 软件开发过程是软件工程中相当重要的一环.一个正确.高效的软件过程能够提高软件工程活动的稳定性.可控性和有组织性.但是,并不存在一种软件过程能够完美的适应所有的软件工程情况.因此,在不同情况下选择合适的软件开发过程显得尤为重要.现代软件工程方法必须是"灵活"的,也就是要求软件工程活动.控制以及工作方法适合于项目团队和要开发的产品. 说到软件工程.敏捷开发,就要提到软件过程的发展历史.20世纪60年代,不存在现代意

浅谈敏捷软件开发与传统软件工程的对比与敏捷开发产生的原因

引言 在"计算机程序的蛮荒时代",人们对于程序的设计.编写是随想随写.灵活变化的.正如我们初学各种编程语言时那样,似乎把程序写对也不是什么很难的事情.然而,这种程序设计模式或许适用于几百行至几千行的小程序,而当我们面对更大的软件规模.更多的代码行数以及更复杂的人员架构时,这种随想随写的程序开发模式似乎不再适用,于是使人们遇到了「软件危机」,进而促使了软件工程这样一门学科的产生. 在我上一门程序设计的课程的时候,老师讲过,当我们学习各种语言.算法和数据结构时,我们学习的是怎样进行&quo