敏捷软件开发VS传统软件开发
敏捷软件开发VS传统软件开发
近年来,敏捷软件开发方法受到越来越多的关注。上图显示的是2001-2011年之间scrum与CMMI的相对搜索量变化趋势比较图。从图中我们可以看出
- 2004年CMMI的搜索量还是scrum的3倍
- 2007年CMMI的搜索量被scrum超越
- 2011年CMMI的搜索量已经不足scrum的$\frac{1}{3}$了
到今天,scrum的搜索热度已然是CMMI的10倍左右了。
这些数据告诉我们:敏捷软件开发方法很火,而且越来越火。那么为什么敏捷软件开发会这么火,或者说,相对于传统软件开发它究竟具有什么巨大的优势?
本文将以敏捷软件开发传统软件开发的概念为引,对它们进行多方面的对比,并谈谈笔者对敏捷开发火起来原因的一些见解。
初窥敏捷与传统开发
敏捷软件开发是一种应对快速变化的需求的一种软件开发能力。它作为一种新型的软件开发方法,从1990年代开始逐渐引起广泛关注。其中敏捷一词来源于2001年美国雪鸟滑雪胜地敏捷方法发起者和实践者的一次聚会。在雪鸟会议上,聚会者起草了敏捷软件开发宣言,宣言强调了个体和互动,客户合作以及响应变化,这些也是敏捷软件开发的代表特征。
传统软件开发的特点是有一系列有序的步骤:需求分析、设计、编码、测试和软件交付。开发者在需求分析阶段充分解读用户需求,在设计阶段得到软件的大概架构,在编码阶段进行代码的编写,之后经过各种类型的测试后进行软件交付。
敏捷与传统开发对比
至此,我们对两种软件开发已经有了一个初步的了解,下面就让我们来对敏捷软件开发和传统软件开发从不同的角度进行对比。
用户参与度
在传统软件开发中,开发者需要用户在软件开发之前提供一份详细的需求,在软件开发完成后再进行交付。对比起来,敏捷式软件开发中迭代式的交付显得更为灵活。在敏捷式软件开发过程中,用户始终参与其中,修订每个阶段的工作并提出改进意见,显然,用户参与度更高。
用户满意度
在敏捷软件开发中,开发者各个阶段都会与用户进行交互,以适应随时可能发生的需求变化。这种迭代式的改进一方面使得他们可以更加容易地修改产品,另一方面极大地提高了用户的满意度。
开销
开销在软件开发过程中是一个关键问题,尤其是返工成本。在传统软件开发中,测试是开发工作全部完成后的一个单独环节。通常产品在经过一系列测试后才返工,造成返工成本的急剧增加。在敏捷软件开发中,测试不会单独作为一个阶段,而是分散在各个迭代过程中。这样每个阶段的潜在问题更容易被发现并被解决掉,因此敏捷软件开发相较于传统软件开发返工成本要更低一点。
开发灵活性
《The Agile Samurai》一书曾写到关于软件项目的三个事实:
- 不可能在项目开始的时候就收集到所有的需求
- 不管收集到什么样的需求,它一定会发生变化
- 要做的功能,一定会超过预期时间和金钱允许的范围
每次软件开发都是对未知的探索,我们无法在开始时就预知一切。在传统软件开发中,开发和需求分析的职能是分离的:程序的架构由客户的需求决定,经过专业需求分析员分析,最后由程序员进行实现。但在敏捷软件开发的过程中,各个阶段程序员与用户之间都有充分的交互,项目在结构和功能方面都具有灵活的可配置性。由此不难看出,传统软件开发更倾向于不考虑项目后续需求的变化:在项目开始时预测用户需求,然后冻结需求,制定相应的开发计划,再按照计划执行。与之形成鲜明对比的是,敏捷软件开发通过不断的用户反馈动态调整需求,最终达成目标。这种自适应的特性使得敏捷开发的产品更符合实际需求,下图形象地展示了这一过程
项目文档
传统软件开发在项目交付前的每个阶段都有严格的文档编写和校对,因此,传统软件开发的文档编写过程也更容易一些。而在敏捷软件开发过程中,是先产生代码,再产生文档。文档编写和校订的主要参考来源只有代码本身和程序员添加的注释。从沟通和理解项目的角度来说,这方面是敏捷软件开发的一个缺陷。
系统规模
随着系统规模的增长,面对面的沟通就愈加困难。敏捷开发依赖于面对面的沟通,因此敏捷方法更适用于较小的队伍,比如40、30、20、10人或更少。在实际工程中,我们可以选择传统软件开发来解决规模较大的项目,或者可以将大型系统拆分成很多小规模的项目,再利用敏捷软件开发逐一实现。
补充
敏捷开发有非常多的优点,但只运用敏捷软件开发并不是一定会成功。由反摩尔定律可知,同样的产品所能获得的价值会随着时间按一定斜率下降。所以对于产品来说,时间关乎生死。交付产品的时间不仅影响获得回报的时间,更影响到产品价值的多少甚至是有无。敏捷软件开发的应对之道是改变价值的交付模式。在敏捷软件开发模式下,产品开发进程被划分成固定时长的短迭代周期,每一个迭代产出潜在可交付的产品增量,产品的一部分价值得以实现。但只有增量是远远不够的,交付可持续才是有意义的。下面以Netscape为例来说明可持续交付对敏捷开发的重要性。
Netscape(网景)是第一家尝试利用新生万维网的公司,它曾最高占据过浏览器市场80%的份额。但2007年,AOL停止了对Netscape的支持。Netscape的衰退发生在短短几年内:从1997年到2001年,Netscape与微软在浏览器的市场上进行了激烈的竞争。1997年6月Netscape推出了Netscape4.0,其后的三年半时间里,Netscape没有推出过一个主要版本,而微软先后推出了突破性的IE4.0和IE5.0,取得了完胜。1997年微软推出IE4.0,1999年推出IE5.0,此时IE在功能上远超Netscape4.0,而Netscape4.0面临越来越多奇怪的bug。更严重的是,Netscape的代码十分糟糕,以至于团队认为无法基于它再做出修改,最终决定重写代码。2001年初,Netscape终于推出了6.0(中间无5.0)但此时Netscape的市场占有率降到了5%以下,浏览器之争胜负已定。
Netscape的工程师们看着Netscape的市场份额急剧萎缩却无法在产品上采取行动,一定程度上Netscape死于自己糟糕的系统质量。长期忽视质量的价值交付最终将无法持续。敏捷软件开发遵循迭代和增量的开发模式,价值得以更快的实现,但如果忽略了质量,这也意味着更快的累积问题。
迭代交付过程中忽略质量容易引发诸多问题:
- 前期迭代的烂摊子始终没有清理,问题越积越多
- 既有功能越来越多,迭代中的测试工作量越来越大
- 既有功能被新的发布破坏
- 代码越来越复杂,添加一个新的功能所需工作量越来越大
因为上述原因,我们需要增强敏捷软件开发的内建质量,主要手段有如下两种:
- 从根源上预防问题的发生。使用及时和有效的自动化测试,利用一些管理和技术实践,如持续集成、结对编程等。
- 在开发过程中不让问题累积。每一个迭代的交付都要达到指定的质量标准:质量标准包括用户可见的外部质量(集成测试和性能测试)和系统的内部质量(不良代码设计是否被重构,是否包含必要的自动化测试覆盖等)。
总结
综合上述对比来看,我们可以得出敏捷开发相比于传统软件工程的几大优势:产品更符合用户期望,返工可能性更小,返工成本更低,采取迭代开发的模式,具有较强的灵活性。但敏捷开发同时对团队要求较高,它需要团队成员面对面的沟通,持续高质量的交付,所以它更适合人数较少的精英团队。面对规模较大的工程中,可以选择将其拆分成若干个子项目,再使用敏捷开发的方式进行。
转载于:https://www.cnblogs.com/vivianBlogs/p/agile_vs_traditional_software.html
敏捷软件开发VS传统软件开发相关推荐
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
转:减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同 本篇文章讨论并不是:不要使用存储过程,因为有些事情还是要存储过程来完成,不可能不用.而是关于:"业务逻辑是不是要封装在存 ...
- 软件工程:浅谈人工智能软件开发与传统软件开发的区别
题目:浅谈人工智能软件开发与传统软件开发的区别 摘要:人工智能的飞速发展带动着软件工程的发展,最终使得软件工程产生新的变革.因为人工智能特有的性质,因而导致了人工智能软件与传统软件的差异性.本文对比了 ...
- 区块链游戏开发颠覆传统游戏开发的 5 种方式
区块链技术已在许多行业中使用,但它尤其扰乱了游戏行业.区块链游戏开发并不是一个新概念,但还是比较新的.公司现在正在寻找在他们的游戏中使用区块链技术的方法. 区块链游戏开发颠覆传统游戏开发的一些方式 包 ...
- 物联网应用开发与传统软件开发的区别
自从共享单车火了以后物联网应用开发就比较热门了, 甚至一些非物联网的公司也开始切入物联网项目中去,结果用传统的互联网技术和团队开发出来的项目问题多多.核心原因是物联网应用开发本身有一些特殊性需要关注, ...
- 敏捷软件开发与传统软件工程的比较
敏捷软件开发与传统软件工程的比较 软件工程的开发过程中有两种不同的管理和开发体系,一种是基于"瀑布模型"的预设性传统软件工程,另一种是轻量级的适应性敏捷软件 ...
- 一秒看懂:SaaS软件和传统软件的区别!
现在市场上有很多SaaS软件,当然传统软件也有很多,所以很多企业在找管理系统的时候,都会有选择困难的问题,不知道究竟选择哪个好,万一选错了,那对于企业来说则是一个巨大的损失.所以今天给大家列举一下&q ...
- 超越传统软件开发技术
王安全:2006年加入阿里巴巴(http://www.alibaba.com/)集团研究院,任软件架构师:2007年阿里集团分拆,进入阿里软件(http://www.alisoft.com/),从事架 ...
- Leangoo项目管理软件管理 传统硬件产品开发全流程
本场景描述的是基于阶段式硬件研发流程以及在 Leangoo项目管理软件 中如何实现. 硬件产品开发流程 下图所示的是一个硬件产品开发大体上所需要经历的全部流程: 1)立项 在立项之前首先需要确定产品定 ...
- Leangoo项目管理软件-传统硬件产品开发全流程
本场景描述的是基于阶段式硬件研发流程以及在 Leangoo 中如何实现. 硬件产品开发流程 下图所示的是一个硬件产品开发大体上所需要经历的全部流程: 1)立项 在立项之前首先需要确定产品定位,对市场规 ...
- 软件开发生命周期及开发模型
软件开发生命周期 软件开发生命周期又叫做SDLC(Software Development Life Cycle),它是集合了计划.开发.测试和部署过程的集合.如下图所示 : 需求分析 这是生命周期的 ...
最新文章
- Cassandra 可视化工具
- R语言使用t.test函数计算两组独立数据的t检验(Independent t-test)
- 推荐一款学习R的APP
- 安装oracle11g时,Enterprise Manager配置成功,出现以下警告……
- Java 随心笔记10
- down perm什么意思_没想到“羽绒服”竟叫down coat!为啥有个down?
- 周星驰八级全国统一试卷
- (day 20 - 中序遍历加双指针)剑指 Offer 36. 二叉搜索树与双向链表
- 【Python学习实践教程】10个Python经典项目实战,练手必备
- word刷子刷格式_Word文档中格式刷怎么用?
- 2020 CSP-S第二轮认证一等奖获奖名单
- 如何下载一个网页的背景图片
- android手机 hdmi,手机的高清输出——MHL和micro HDMI测试
- php insertrow,table insertRow、deleteRow定义和用法总结_javascript技巧
- 图片与视频的相互转换
- bug bounty - 绕过限制劫持Skype账号
- echarts 文本标签配置 label文字样式
- PDPS软件:机器人行走轴虚拟仿真操作方法,即外部轴添加与配置
- 签了工作之后才发现,自己太草率了.....我看过的关于职业规划最好最全面的一篇文章...
- 熬夜加班赚钱?放弃吧,你的基因里有一个大写的穷。