浅谈敏捷软件开发与传统软件开发

本文将介绍传统软件开发与敏捷软件开发,并简单分析二者的优缺。

首先我查阅相关资料大致了解了下为什么会爆发“软件危机”和什么是“软件危机”。由于在早期的软件开发活动中有明显的个体化特征,开发流程不规范,人们没有将软件与程序加以详细的区别,对程序之外的数据和相关文档资料没有给予重视,对编写程序之外的软件活动也没有给予重视,因此出现了“软件危机”。“软件危机”的特点有:开发成本急剧上升、不能按时交付软件、软件难以维护、无法保证软件质量、无法满足用户需求。故人们开始研究软件开发方法,1968年提出“软件工程”的概念。在这种情况下,1970年瀑布模型被推出。

到此我们引出传统软件开发。传统软件主要包括过程、工具和方法3要素。软件工程方法主要有形式化方法、面向对象方法、结构化方法。传统软件工程方法很大一个缺陷是软件可能没有完全满足客户的需求,由此造成成本剧增、软件质量下降、软件延期等问题。为什么这样讲?我们需要了解传统的软件开发流程。其大致分为七步:1.可行性分析与项目开发计划。2.需求分析。3.概要设计。4.详细设计。5.编码过程。6.软件测试。7.软件维护。 从这个流程我们可以知道传统的软件开发开发流程是一个文档驱动的流程,它将整个软件开发过程划分为顺序相连的几个阶段。每个阶段都有特定的任务,只有在完成一个阶段的所有任务(文档)后,才能进入下一个阶段。这就意味着只有当所有系统模块全部开发后,我们才能进行系统集成,对于由模块众多的复杂系统来讲,这是一个非常艰巨而漫长的工作。也就是说用户需要等相当长一段时间才能得到一个可用的软件,而这个软件可能存在潜在的bug。用户在这段等待时间内,他的需求可能发生了变化,此时再告知开发团队,这就将造成开发成本与周期都大大增加。所以在这个商业经济的信息时代,这样的开发过程有时会显得“跟不上节奏”。但是对于一些需求在确定的软件开发工作,传统软件开发也是具有很大优势的。

典型的传统软件开发模型有:瀑布模型、增量过程模型、演化过程模型、螺旋模型、协同模型等等。

既然传统软件开发存在着或多或少的问题,那么在2001年,kent Beck和其他16位知名软件开发者、软件工程作家以及软件咨询师共同签署了“敏捷软件开发宣言”。至此,敏捷软件开发思想诞生。从本质上讲,敏捷方法是为了克服传统软件工程中认识和实践的弱点而形成的。敏捷软件开发有许多有优点,但并不是适用于所有的项目、所有的人。敏捷软件开发特点是鼓励沟通、重视软件开发效率、适用于软件需求不确定、用户易于沟通并且能参与开发、开发人员有责任感并且积极向上、十个人一下的项目开发、以保证软件开发有成功的产出为前提,尽可能减少在开发过程中制成品的方法、根据具体的产品类型和运行环境,尽可能快的将切实可行的软件交付给用户。个体和交互胜过过程和工具、可以工作的软件胜过面面俱到的文档、客户合作胜过合同谈判、相应变化胜过循环计划是敏捷开发的核心价值观。

为更好说明敏捷软件开发,下面简要介绍一种敏捷开发方法。

极限编程是一个灵活、轻量、周密、严谨的敏捷软件开发方法。它的开发方法接近螺旋式,是将复杂的开发过程分解为一些相对简单的小的周期。极限编程是一个客户和开发人员都可以清楚了解软件变化、进度、潜在困难和待解决问题,可以让客户和开发人员有及时交流和反馈的开发过程。极限编程强调的是人与人之间的相互合作的过程,其开发过程突出了人在软件开发过程中的优势。极限编程是为了满足计算机软件下载需要的软件,甚至在软件生命周期的后期都能有效相应客户的需求变化。极限编程采用以下方式:系统隐喻、编码规范、小型发布、现场客户、持续集成、代码集体所有权、简单设计、测试、规划策略方法。从极限编程的介绍中我们可以隐约看出它和传统软件开发方法的不同,下面我们将详细讨论二者的优缺点。

敏捷方法对于复杂的需求不明确的项目能够快速、廉价地成功完成,主要强调团队、可用的软件、客户合作、随时响应变化;而传统方法则在开发早期和客户洽谈,获取详细需求,主要强调协议、计划过程、文档等。

传统软件存在的缺陷:

1.测试阶段往往是整个代码编写完成后进行,测试无问题后将产品交付给客户。假如在测试阶段发现了问题,则有可能需要对整个模块进行返工来修改。

2.由于开发早期客户往往不能明确自己需要实现什么,因此早期建立的需求模型往往不能准确包含系统所需的功能,而在整个产品按照线性模式开发完后,客户则提出改变需求的要求,这样对系统进行频繁修改后,将导致整个系统的兼容性受到影响,尤其在大型系统中更是表现突出。

3.从商业的观点看,传统开发没有将投资回收率作为最优先的考虑,并不是一个最有效的开发方法。

在介绍敏捷开发开发时,我们已经大概了解了其相对于传统软件开发的优点,但是在实际应用中敏捷软件开发也存在一些问题:

1.敏捷方法明显地降低了文档的数量,甚至声明代码本身就是文档。这就需要开发人员为代码添加更多的注释,但是对于不习惯敏捷开发或团队新成员则很难做到,他们必须不断询问有经验的开发人员,这样会导致延迟迭代交付时间,甚至增加开发费用。而传统开发则强调文档对团队成员的指导作用,开发人员可以在不知道项目细节的情况下完成开发。

2.敏捷开发中强调交互和客户的参与。每次迭代前,团队和客户都将召开一个会议,团队成员将介绍在这次迭代中所作的工作,而客户则根据成员的介绍给出新的功能要求。实际中大部分情况,这种例会是非常乏味和沉闷的,因为团队成员必须重复地向其他成员和客户展示自己负责的模块,接受给出各种对需求的更改,而且每次迭代都是如此,通常为迭代分配的时间都是以周为单位的,开发人员经常感到时间不够用,尤其是自己负责的模块中包含一些复杂的算法时,时间就变得越紧,经常使得迭代延迟。而传统开发中客户不会参与开发过程,实现过程中开发人员只是根据文档编写代码,然后交付最终产品。这样开发人员不必关心那些频繁的迭代会议,而且时间上更加宽泛,有利于开发出更好的产品。

3.敏捷开发对开发人员的个人技能要求更高。前面提到过,敏捷开发强调交互和客户的参与,这就意味着每个团队成员都要具备一定的个人能力和社交技能。每次迭代都必须给客户提供完整的功能模块,并且需要让客户明白当前的开发进程以及开发中遇到的一些问题,开发人员不但需要将自己的工作描述清楚,还得正确理解客户提出的新需求,这需要具备较好的沟通技能。而实际中,不一定每一个开发人员都能具备这样的技能,一旦某一个人不能正确理解一些重要信息,将可能导致下一次迭代不能准确交付,更糟糕的是,如果理解有误,会使得开发的模块中包含多余的功能,结果是对模块进行修改,从而增加开发费用。因此,开发人员社交技能的提升将增加开发过程的稳定性。

【参考文献】

  1. 《软件工程:实践者的研究方法》Roger S.Pressman  2016年6月第一版第10次印刷
  2. 软件开发过程模型的发展 高禹、毕振波 《计算机技术与发展》 2008年7月 第18卷 第7期
  3. 软件开发生命周期法比较之敏捷与传统_张志丽 《电脑开发与应用》, 2013(12):32-34
  4. 传统软件开发与极限编程 郑道东 《软件导刊》2016年6月 第11卷 第6期
  5. 浅谈敏捷软件开发 王玉玺
时间: 2024-12-14 18:15:39

浅谈敏捷软件开发与传统软件开发的相关文章

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

敏捷软件开发VS传统软件开发 软件开发方法是软件工程理论的重要内容,在软件开发方法中,对于开发软件时的"做什么"和"如何做",给出了明确的.详细的回答.那软件开发方法的"做什么"和"如何做"之间究竟有什么异同? 下面本文就传统软件开发和敏捷软件开发的来探讨一下. 关于传统软件开发 在软件开发方法出现之前,人们普遍错误的认为开发软件只是编写程序.当时,软件开发活动个体化非常严重,编写程序随心所欲,过分追求编程技巧,造成程序很难阅

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

敏捷软件开发与传统软件开发的对比 最早了解敏捷开发是通过大二的一次博雅课堂,一位在百度工作的北航学长跟我们分享了他近年来从事敏捷开发的经历.印象最深的一句话是一个延迟3个月交付100%功能的软件和一个按时交付75%核心功能的软件,敏捷软件开发者更愿意选择后者.本学期的软件工程基础课又向我们讲授了传统软件开发,经过课上和课后的学习,对于敏捷软件开发和传统软件开发有了浅显的认识和理解.由于课上学习的重点是传统软件开发,所以课下对敏捷软件开发进行了更多的涉猎,本文以敏捷软件开发为主体,来分析其与传统软

减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同

本篇文章讨论并不是:不要使用存储过程,因为有些事情还是要存储过程来完成,不可能不用.而是关于:"业务逻辑是不是要封装在存储过程中实现,这样子php.java等就是调用存储过程". 业务逻辑,通俗说就是:比如要取数据的操作,取出会员编号为x的数据,原来我们一般是封装成函数,或者直接编写sql语句查询.现在是交给数据库的存储过程去完成. +------------------------------------------------------------ 写这篇文章的缘由 +-----

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

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

浅谈敏捷开发

首先,了解下敏捷开发的定义:以用户的需求进化为核心,采用迭代.循序渐进的方法进行软件开发.通俗地说,就是把一个大任务分成很多小的块来做.相对传统软件开发模式,它主要是针对快速变化的需求,不断优化管理流程,最终推出优质软件. 对于敏捷开发,最吸引我的的是它的这几个核心原则:主张简单,拥抱变化,快速反馈.作为一个大三学生,编程从大一就开始接触,程序越来越复杂,也越来越力不从心.我想,每个编程人员都希望自己的程序简单明了,而不是代码上万,一看就眼花头疼.当今时代就是一个信息时代,信息的更迭变化瞬息万变

浅谈敏捷组织中PMO的角色

所谓的"敏捷组织"其实并没有标准的模式,而且PMO(项目管理办公室)并没有一个标准的角色定义.有一个非常普遍的误解,公司在选择"敏捷"或者"瀑布"的开发流程时只能做二元互斥的选择,导致的结果就是一些公司会试着让他们的业务和项目严格遵循这种模式到一种极致的状态.而正确的解决办法应当是让开放方式去适应业务需要,并且很多时候,两种开发方式应当兼而有之.一般来说,任何PMO都有责任去最大化组织内部项目组合的投资回报率,他们通过以下方式去达成: 通过选择对

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

敏捷软件开发与传统软件工程 一.前言 随着社会和科技的不断发展,信息产业己经和人们的生活息息相关,成为不可或缺的一部分.软件工程作为信息产业的核心部分发生了翻天覆地的变化.传统的软件工程思想己经越来越不适应快速变化的信息社会,为此一种新软件工程思想-----敏捷软件开发进入了我们的视野. 二.软件工程 (一)概述 Software engineering is the application of engineering to the design, development, implement

敏捷软件开发与传统软件工程——因果篇

因--差异之源 近来秋将尽,京中阴霾好几日不见好转,更有几天雨水扰人心烦.幸得一日周末,又逢雨过天晴,秋高气爽,捡得几番文笔来细述敏捷软件开发与传统软件工程之异同. 从字面看来,二者无非是"敏捷"与"传统"一词之差.然而这两个词又同属修饰之词,因此就这两个词之差自然就是两种开发方法的差别所在. 敏捷一词,自然是好理解.正如众人所云如游侠身手之敏捷,为称赞游侠反映之迅速,应对变化之机敏.此处用以修饰软件开发,我们亦可套用迅速应变之意,也就是在软件开发过程中能迅速应对需

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

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