敏捷软件开发 VS. 传统软件工程
敏捷软件开发 VS. 传统软件工程
软件工程这一术语1968年被提出,之后美国软件工程专家巴利·玻姆对十多年间研究软件工程的专家学者们提出的一些准则与信条,于1983年对提出软件工程的七条基本定理,将软件工程这一学科具体化,软件工程中开发与管理软件的方法也不断完备。而敏捷软件开发于2001年由Kent Beck和其他16位知名软件开发者提出,敏捷开发是人们对于传统软件开发方式的一种提出的新的挑战。本文将具体介绍软件传统工程与敏捷软件开发两种方法,并对两者进行对比分析。
一、传统软件工程
软件工程的产生与二十世纪六十年代的“软件危机”有很大的关系,由于当时的软件开发人员采取的方式未工程化,软件开发中遇到很多难以解决的问题,如软件生产不能满足需求,开发时间与成本难以估计以及软件可维护性差等。这使得人们开始考虑采用工程化方法来研制与维护软件,于是软件工程这一技术就这样诞生了。软件工程具有多层次,软件工程的基础在于软件过程,软件过程是指软件构建过程中执行的一系列活动、动作与任务的集合。软件工程的过程框架定义五种活动:沟通、策划、建模、构建与部署。只有这些活动并不能确定于过程之间的相互关系,因此需要一些模型来定义这些关系。
常见的传统软件工程过程模型:
1、 瀑布模型
瀑布模型提出一个系统的软件开发方法,通过策划,建模,构建和部署的过程,最终生产一个完整的软件并提供软件维护。瀑布模型是软件工程最早的模型,但是在实际的运用中,出现很多问题。瀑布模型需要客户明确需求,但是不能适应需求的不确定性,客户只有在软件完全完成了之后才能得到能够执行的软件,一些早期错误需要等到测试阶段才能发现,这些问题使得瀑布模型被现代软件工程界所抛弃。软件工程开发过程中经常遇到各种的变化,而瀑布模型往往不能够适应这些工作,但是在工作以线性方式完成时,瀑布模型还是一个非常有用的模型。事实上线性方法是人们最容易掌握并使用的方法,当人们遇到用线性方法解决不了的问题是,往往会考虑将问题分解为一系列线性问题,然后逐个解决。
2、 增量模型
增量模型实质就是分段的线性模型,增量模型发布一系列称为增量的版本,逐渐为用户提供更多的功能。增量模型在每个阶段使用线性模型,增量模型在每个增量都能运行,这样能够很好的适应变化,客户也能够一直看到软件的开发,早期发生的错误能够得到解决,降低开发风险。增量模型能够解决瀑布模型的几个问题,但是仍然还是有一定的缺陷:软件的体系架构需要保证在新加构件时,能够对原系统无影响。
3、 螺旋模型
螺旋模型是一种演化过程模型,它结合了原型的迭代性质与瀑布模型的系统性与可控性的特点,能够有快速开发完善软件版本。螺旋模型最大的特点是具有其他模型不具备的风险分析,使得软件在面临重大风险时能够停止,减少损失。螺旋模型从圆心开始顺时针方向演进,第一圈一般开发出软件规格说明,在接下来的每次迭代中逐步完善,最终得到最终版本。螺旋的没圈都会跨过多个区域,需在每个迭代的每个区域中不断调整项目计划,直到迭代结束。螺旋模型适合开发大型的系统级应用。螺旋模型每个迭代都植入软件测试并累计开发成本,使得软件质量得到严格保证,而且开发成本容易掌握。但是螺旋模型的风险管理支出可能会过于庞大。
二、敏捷软件开发
敏捷开发是一种新型的软件开发方法,具有应对快速变化的需求的能力。敏捷开发方法来源于2001年的一次软件开发者的集会,他们在会上成立“敏捷联盟”并签署了“敏捷软件开发宣言”,其中包括以下要点:
1、个人与这些个人之间的交流胜过了开发流程与工具
2、可以工作的软件胜过了详尽的文档
3、客户合作胜过了详细的文档
4、对变化的响应胜过了严格地遵循计划
敏捷联盟定义了12条原则:
1、对我们而言,最重要的是通过尽早和不断交付有价值的软件满足客户需要。
2、我们欢迎需求的变化,即使在开发后期。敏捷过程能够驾驭变化,保持客户的竞争优势。
3、经常交付可以工作的软件,从几星期到几个月,时间尺度越短越好。
4、业务人员和开发者应该在整个项目过程中始终朝夕在一起工作。
5、 围绕斗志高昂的人进行软件开发,给开发者提供适宜的环境,满足他们的需要,并相信他们能够完成任务。
6、在开发小组中最有效率也最有效果的信息传达方式是面对面的交谈。
7、可以工作的软件是进度的主要度量标准。
8、 敏捷过程提倡可持续开发。出资人、开发人员和用户应该总是维持不变的节奏。
9、对卓越技术与良好设计的不断追求将有助于提高敏捷性。
10、简单——尽可能减少工作量的艺术至关重要。
11、最好的架构、需求和设计都源自自我组织的团队。
12、每隔一定时间,团队都要总结如何更有效率,然后相应地调整自己的行为。
敏捷开发相比于其他方法更强调软件的适应性,而不是预见性。从本质上来讲,敏捷软件开发是为了克服传统软件工程中的弱点而形成的。在现实生活中,用户需求不断改变,很多情况下,完全无法充分定义需求。
极限编程是敏捷开发使用最广泛的一个方法,。极限编程包括策划、设计、编码、测试4个阶段。极限编程有12个实践原则:
1.计划的制定:包括客户选择的项目大小、程序功能的优先级、各个版本的合成和发布日期。
2.小版本:用最少的代码工作量带来最大的业务价值。
3.简单设计:通过所有测试,没有重复和费解的逻辑代码,简单的设计能保证代码的简单。
4.测试:一个功能存在的前提是有一个测试能够验证它,任何有被破坏的可能的代码就必须有一个对应的测试。
5.持续整合:大量减少在整合中耗费的时间,减少团队开发问题。
6.重构:确保加入新功能后代码仍保持简单,从而保证简单的代码仍然能够运行所有的测试。
7.配对编程:提供持续的信息反馈和确保正在编程的人进行重构、测试和遵守编码标准,实现代码共享目的。
8.代码共享:在通过测试的前提下,任何一个人都能够对系统做出修改。
9.每周只工作40小时:充分利用你的时间,一个星期工作40小时已经足够了。 10.现场客户:讨论,使用程序员和客户都能够的语言描述功能。
11.隐喻:普通语言和术语的集合,用来预见项目中的功能。
12.编码标准:遵守编码标准,让其它程序员明白代码,减少不必要的沟通。
所有敏捷过程模型中使用最广泛的就是极限编程,当然也有很多其他模型,比如自适应软件开发、Scrum、动态系统开发方法等,这里就不加以讨论了。
三、传统软件工程与敏捷软件开发的对比
敏捷软件开发相对传统软件开发的优势:
1、 敏捷开发强调适应性,因此软件开发适应性更加强。就拿软件变化的成本来说,敏捷开发比传统软件工程少得多,这就是因为敏捷开发适应性更强。
2、 敏捷开发交付周期短,强调尽早将可用的功能交付使用,这样有利于软件在整个项目中持续改善。
3、 敏捷开发的工作效率更加高,人力资源得到更充分使用。
敏捷软件开发相比传统软件工程的劣势:
1、敏捷开发文档也传统软件工程相比显著减少,因此团队之间的交流就需要增加,而一旦工程很大的话,团队之间的交流会变得很困难。
2、对个人能力要求很高,团队人员要求开发能力强,团队之间沟通能力也不能弱。
敏捷软件开发 VS. 传统软件工程的更多相关文章
- 敏捷软件开发VS传统软件工程
敏捷软件开发:又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新兴软件开发方法,是一种应对快速变化的需求的一种软件开发能力. 与传统软件工程相比,它们的具体名称.理念.过程.术语都不尽相同 ...
- 敏捷软件开发vs传统软件开发
摘要 本文介绍了传统软件开发(着重介绍了传统软件开发中常用的瀑布模型)和敏捷软件开发,以及敏捷开发和传统开发的对比. 一.传统软件开发 比较常用的几种传统软件开发方法:瀑布式开发.迭代式开发.螺旋开发 ...
- AgileEAS.NET SOA中间件平台/敏捷软件开发平台
AgileEAS.NET SOA中间件平台/敏捷软件开发平台 最新下载 一.前言 AgileEAS.NET SOA中间件平台,简称EAS.NET,是基于敏捷并行开发思想和Microsoft .Net构 ...
- Agile Development敏捷软件开发之何为敏捷开发
敏捷软件开发之何为敏捷开发 敏捷开发,Agile Development,就是指能够在需求迅速变化的情况下快速开发软件.我们接触最多敏捷实践方式有:极限编程(XP).结对编程.测试驱动开发(TDD)等 ...
- 敏捷软件开发实践-Code Review Process(转)
介绍: 在敏捷软件开发中,从代码的产生速度上来看,要比 传统Waterfall产生速度高很多.因为我们把时间安排的更加紧凑了.那么这么多的代码,如何能保证这些代码质量呢?很多人可能直接想到静态代码检测 ...
- 敏捷软件开发:原则、模式与实践——第11章 DIP:依赖倒置原则
第11章 DIP:依赖倒置原则 DIP:依赖倒置原则: a.高层模块不应该依赖于低层模块.二者都应该依赖于抽象. b.抽象不应该依赖于细节.细节应该依赖于抽象. 11.1 层次化 下图展示了一个简单的 ...
- ThoughtWorks、Teambition、Trello、Slack、DevCloud 主流敏捷软件开发工具平台比较
在大公司做了6年程序员,2年项目经理的小王,正在创业公司迎来他焦虑的而立之年. 但是对于3个月前加入创业公司的决定,他现在有些烦躁和怀疑人生.在他过往的经验看来,公司新接的小项目,在过去的大公司里1个 ...
- 敏捷软件开发_设计原则<三>
敏捷软件开发_设计原则 单一职责原则(single responsibilities principle,SRP) 原理:一个类应该只有一个变化 分离职责:如果不耦合的职责那么很简单,如果两个职责耦合 ...
- 敏捷软件开发(4)--- TEMPLATE METHOD & STRATEGY 模式
1.TEMPLATE METHOD 泛型,也就是这个模式,是可以基于泛型的. 我们往往会有一些算法,比如排序算法.它的算法部分,我可以把它放在一个基类里面,这样具体类型的比较可以放在子类里面. 看如下 ...
随机推荐
- centos 7 mini装maridb 10.1 binary版本
注:centos的版本为:CentOS-7-x86_64-Minimal-1503-01 http://isoredirect.centos.org/centos/7/isos/x86_64/Cent ...
- 承接Hololens内容定制外包
近日,微软宣布第三批微软Hololens开发者版开始发货,包括:头显.头显手提包和一个遥控器.前两批开发者版本分别在今年3月30日和5月9日开始发货的. 第三批AR头显Hololens开发者版发货 虽 ...
- Intellij IDEA +MAVEN+Jetty实现Mybatis的HelloWorld
1 maven配置:pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...
- Bower 自定义组件文件夹名称
默认情况下, bower 会自动把文件安装在文件夹 bower_components 下面,如果希望自定义这个文件夹的名称为 components ,可以创建一个名称为 ".bowerrc& ...
- OAF_开发系列18_实现OAF页面跳转setForwardURL / forwardImmediately(案例)
20150716 Created By BaoXinjian
- 关于URLEnCode,URLDeCode,Base64,公钥私钥
1.Base64非常适合http.mime协议,所以在一些类似webservice中可以用Base64. 用法如下:传出去之前先 Convert.ToBase64String(encryptedByt ...
- SQL Server Reporting Services本机模式下的权限管理
SQL Server Reporting Services在安装配置后,缺省只给BUILTIN\Administrators用户组(实际上只有本机的Administrator用户)提供管理权限.所以所 ...
- 03-c#入门(简易存款利息计算器v1.0)
本想把练习题做了的结果放上来,不过发现附录是有答案的,就算了吧,自己做了没问题就行了哈.之前提到过,要是有朋友有想法,需要做小工具我可以帮忙实现,不过貌似大家都很忙.SO,自己学完第4章后,决定做一个 ...
- 解决触摸屏设备click事件300ms的延迟的问题
从点击屏幕上的元素到触发元素的 click 事件,移动浏览器(触摸屏)会有大约 300 毫秒的等待时间.为什么这么设计呢? 因为它想看看你是不是要进行双击(double tap)操作.300ms的等待 ...
- unity 读取文本与写入文本
void writeData(string str,string file) { string parth = Application.dataPath; Strea ...