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

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

 

本文介绍了传统软件工程与敏捷软件开发以及二者之间的比较。

一、传统软件工程

传统方法学的特点是比较抽象的,这个特性要求较高的抽象能力和数学归纳能力,瀑布模型是其最典型的代表。

瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序。从本质来讲,它是一个软件开发架构,开发过程是通过一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护。

主要特点是:与一般系统工程一致,易于使用,不要求特别的技术与工具也能较好地进行软件开发;其缺点是:难于很好地表达和描述用户的需求。

 

 

瀑布模型的软件过程

 

二、敏捷软件开发

敏捷开发是近些年兴起的一种软件开发与管理的思想,以其灵活性易操作性得到软件行业的广泛关注。 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。[2]敏捷开发方法是一组开发方法的统称,主要包括极限编程Scrum精益开发动态系统开发方法(DS-DM)特征驱动开发(FDD)等。它的基本原则有迭代式开发、增量交付、互动式开发、持续集成等。在软件开发过程中,敏捷开发具有开发精确、高质量、高速度、高投资回报、高效率等优点,因此敏捷开发方法越来越受到广大程序员的青睐。

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

敏捷开发12条准则:

 

 

敏捷开发路线如下:

(1) Test-DrivenDevelopment,测试驱动开发

(2) ContinuousIntegration,持续集成

(3) Refactoring,重构

(4) Pair-Programming,结对编程

(5) Standup,站立会议

(6) FrequentReleases,小版本发布

(7) MinimalDocumentation,较少的文档

(8) CollaborativeFocus,以合作为中心,表现为代码共享

(9) CustomerEngagement,现场客户

(10)AutomatedTesting,自动化测试

(11)AdaptivePlanning,可调整计划

 

 

敏捷开发流程

敏捷软件开发宣言:

个体和交互胜过过程和工具;

可以工作的软件胜过面面俱到的文档;

客户合作胜过合同谈判;

响应变化胜过遵循计划。

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: 
  Individuals and interactions over processes and tools 
  Working software over comprehensive documentation 
  Customer collaboration over contract negotiation 
  Responding to change over following a plan 
  That is, while there is value in the items on the right, we value the items on the left more.[3]

 

三、敏捷与传统的比较

1.分工

传统方法学阶段划分分明,一般来说每个阶段由不同的人来完成,即分析员做分析,测试员做测试。采用传统方法学,容易因完成前部分而不会去关注其后续部分。但是敏捷开发强调简单设计,团队每个成员都从接触客户到分析设计,到编码,全部承担。

2.需求

传统方法要求用户需求明确,只有在正确的需求下才能得到正确的下一步结果。传统开发是来自于工程学的软件开发方式,是一种瀑布式的流程,在工程的起始阶段,进行详尽的需求调研,根据需求进行完全的架构设计,之后进入开发过程,在开发过程中,不再进行设计层面的事情,不再处理需求变化的问题,在这个阶段的任务就是对前期设计的功能实现,然后是测试,部署等等。但是在实际的软件开发过程中,软件的需求往往是变化的。原因有时是顾客不能很好的表达自己的需求,或者顾客和开发者理解上的差异。而且大多数情况下软件开发过程需求还会不断随时间变化而变化,而瀑布开发模型很难适应这种变化。虽然针对瀑布模型的这一不足,涌现了许多开发模型,比如螺旋模型和统一过程开发模型。尽管与瀑布模型相比,这两种模型有了很大改进,但它们应用起来仍然无法适应需求的快速变化。

敏捷开发是在上个世纪90年代,传统开发方式不能够满足现实开发的需要,对传统方式进行总结,对成功失败的开发案例进行研究后,得到的一种不同于传统方式的开发流程,主要的特点是迭代式进行,这种方式把一个软件开发过程分成了若干个小的迭代过程,每一迭代完成一部分功能,每一次迭代过程的工作内容按照功能的重要程度不同而排列,首先完成重要的,同时也是风险比较大的功能,而后是次重要的,依此类推,同时在每次迭代中,都要进行分析、设计、开发、测试,因为分成了一个个小过程,一步步的逼近目标,所以,可以使得产品的用户能够逐渐得明白自己的真实需求从而能够提出真正的需求,而开发团队也可以根据更正后的需求进行下一次迭代的设计。敏捷拥抱变化,允许变化可以随时随地发生。在敏捷开发中,变化与增加新功能是没有矛盾的。

3.驱动

传统方法是文档驱动的,每一阶段没有得到相应的文档,是无法进行下一阶段工作的。而敏捷开发实现任何一个功能都是从测试开始,它是以测试驱动开发的,所以它对文档的要求较低。敏捷开发首先对业务需求进行分析,分解为一个一个的Story,记录在StoryCard上。然后两个人同时坐在电脑前面,一个人依照Story,从业务需求的角度来编写测试代码,另一个人看着他并且进行思考,如果有不同的意见就会提出来进行讨论,直到达成共识。

4.开发过程

传统方法开发软件的过程,往往是顾客与开发团队的利益博弈的过程,所以在开发过程中顾客的参与度不高。这也往往会是导致最终开发软件与顾客理想软件有差距的重要原因。

敏捷开发中,要求顾客和开发团队一起开发。在敏捷开发中,代码是归团队所有而不是哪些模块的代码属于哪些人,每个人都有权利获得系统任何一部分的代码然后修改它,每个人能够对代码重构而不需要征求代码作者的同意,很可能也不知道是谁写的这部分代码。这样每个人都能熟悉系统的代码,即使团队的人员变动,也没有风险。

5.集成

传统方法中集成是在后期的一个重要阶段,它是一个独立的阶段。集成是一件很痛苦的事情,通常很长时间才会做一次集成,这时候的集成往往问题众多,要进行调试的话,难度很大。一般来说,人在这个过程中,容易产生疲劳感。

敏捷开发中,软件集成很频繁,每一次集成的改变也很少,即使集成失败也容易定位错误。而且敏捷开发往往是自动化测试的。

6.中心

敏捷开发是以人为中心,而传统开发以过程为中心。并不是说传统开发就没有人的参与,或者说人不是一个重要因素。应该说的是,敏捷开发和传统开发的侧重点、中心不同。

传统开发中,设计已经是在初始阶段完成了,在实现阶段不再修改,换句话说,实现阶段就是对设计的完成,设计方案是不可改变的了。这样就忽略了用户的反馈、忽略了开发员的设计的主观能动性,使得开发员只是专注于代码层面的事情,这是很要命的事情,非常的考究需求工程师、设计师的能力,用一句话来形容这种设计-实现效果就是差之毫厘谬以千里。

敏捷开发提倡的是迭代,在每次迭代中都有分析、设计,也就意味着迭代阶段,可以把一部分完成的系统给用户演示,允许用户提意见、需求,也允许开发员将上一次迭代中得到的想法提出来,并且把这些需求意见想法融入到迭代的分析、设计中,从而在根本上、在理念上,促进了造、用双方的一个交流沟通,发挥了用户的分析评价和开发员设计的主观能动性。

7.产品

传统方法往往要到最后才能得到可执行的产品,而敏捷开发很早就可以的到可执行的产品。

 

小结

当然敏捷开发和面向对象方法也有一定的联系。迭代也是敏捷开发的推动力,同样迭代和无缝性是面向对象方法学的两大特性。掌握迭代,敏捷的大部分事情往往就迎刃而解了。不论长度,所有的迭代都有相同的模式,这也是敏捷开发规律的一部分。在迭代的每次过程中,我们都要重复做分析、设计、编码等过程,这个过程和小瀑布又有点类似。

通过上面比较我们看到,敏捷开发和传统方法相比做了不少改进,但是它并不是全新的一种方法学,它是一种综合了各种方法学优点的方法学。在学习过程中,我们对比其他方法学来学习,可以达到事半功倍的效果。在教学过程中,特别是程序设计语言的课程设计中,由于在这个时间较紧张,在这个过程中,如果采用敏捷开发的话,即可节省时间,又可以增强学生的团队合作能力。同时,由于学生学习程度的差异性,我们在结对的时候,可以以好带差,所以说敏捷是一种不错的选择。同时在教学过程中,我们完全可以在用实践来体验它的优越性。

虽然说敏捷开发是一种新方法,但是事实上我们看到,他是一综合了多种传统开发方法的优点,整理出来的一套开发组织方法。因此敏捷开发是一个新的思路,它不一定是所有软件开发的终极选择。它也存在一些问题,但只要我们遵循敏捷开发最基本的务实精神,用变化的而不是死板的观点来思考,我们相信问题肯定可以解决。在理解这种新方法的过程中,了解其他方法的优缺点,然后适应变化而做出改进。

 

参考文献与资料:

[1] 王冲.敏捷开发与传统瀑布模型的比较及教学.2011

[2]三种敏捷开发方式技术指南.TechTarget商务智能.2014-12-12

[3] 敏捷软件开发 Agile software Development: http://kb.cnblogs.com/page/107587/

转载于:https://www.cnblogs.com/hardboiled/p/5991036.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值