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

因——差异之源

  近来秋将尽,京中阴霾好几日不见好转,更有几天雨水扰人心烦。幸得一日周末,又逢雨过天晴,秋高气爽,捡得几番文笔来细述敏捷软件开发与传统软件工程之异同。

从字面看来,二者无非是“敏捷”与“传统”一词之差。然而这两个词又同属修饰之词,因此就这两个词之差自然就是两种开发方法的差别所在。

敏捷一词,自然是好理解。正如众人所云如游侠身手之敏捷,为称赞游侠反映之迅速,应对变化之机敏。此处用以修饰软件开发,我们亦可套用迅速应变之意,也就是在软件开发过程中能迅速应对需求的改变。至于传统,传统一词有许多注解,佛语曰:色不异空,空不异色。万物并非本来实有,因缘所生。如今要用到此道理来解释传统。这里传统与敏捷结缘,自然用敏捷的反面来解释传统最为恰当。于是,传统就解释为对变化应变迟缓之意。

  正所谓大道至简,方才所述为敏捷与传统字面词意的区别,而这种区别正是敏捷软件开发与传统软件开发的区别根源所在。以下所述的具体差异,皆因此而生。为求思虑周全,仅用简单罗列对比加以详述其中的异同。

果——细述差异

  仅对敏捷传统二者词义进行词义进行分析,语言略显苍白,不能通达其中的深邃大义。在此对他们定义进行详细说明。

所谓敏捷开发,是以客户需要之变化为根本,用迭代、循序渐进的方法进行软件开发。如何以用户为根本,只能让客户常久持续地参与在软件开发过程之中。然而客户在开发方面毫无认识,又如何让客户参与进来?就只能给客户看成果,提意见了。为了能让客户看成果,软件开发过程中就得保证软件是随时可以运行进来的。敏捷开发有12条原则:

其一,迟早交软件,持续交软件,使客户满意。

其二,欢迎变更,即使在后期。

其三,交付频率短越好。

其四,业务人员和开发人员天天一起工作。

其五,开发人员个人提供支持,并给予信任。

其六,面对面交谈。

其七,把可运行软件作为进度的首要度量标准。

其八,开发速度持续稳定。

其九,关注优秀技能和设计。

其十,简单。

其十一,最好的架构、需求和设计出自于自组织团队。

其十二,团队定期反省。

  至于传统软件工程,大体基于“瀑布模型”,瀑布式开发是一种传统的计算机软件开发,之所以叫瀑布,自然有李白描述的“飞流直下三千尺”的气势,不过这里指的是一去不回头的势头。它是最典型的预见性软件开发方法,严格遵守计划、分析、设计、编码、测试、维护的步骤。相比于敏捷软件开发,传统式的似乎不把重点放在客户上,而是以软件架构(software architecture)为核心。

实例差异:

  敏捷开发实例包括极限编程(extreme programming,XP)、自适应软件开发(adaptive software development,ASD)、Crystal、Scrum、特性驱动编程(feature-driven development,FDD)。它是一个标准的,定义良好的,组织持续改进的过程。其中极限编程是敏捷开心使用最广泛的方法。

  传统软件工程模型包括包括瀑布模型、增量模型、螺旋模型、快速原型模型、喷泉模型等。它们的共同点是项目需要的细节是在开发之前给出的,开发过程客户不会参与,而开发团队会在项目开发完整后一并交给客户。他们的一般流程是分析、设计、开发、测试、实施、维护,整个过程没有客户的参与。或者也可以划分为下面几个阶段:问题定义、可行性研究,需求分析、总体设计、详细设计、编码与单元测试、综合测试、软件维护。各个阶段的工作自顶向下,从抽象到具体顺序进行,每个阶段都必须完成规定的文档,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。

  这里说到模型,就有必要给模型作一些解释。这里的模型指软件开发过程模型,过程模型描述了软件工程工作中遇到的过程相关的问题,明确了问题环境并给出了针对该问题的解决方案。

方法的应用:

1、主要目标:敏捷开发的目标是以最好的形式适应变更,最大程度地让程序符合客户的需要。尽量缩短可运行软件提交的周期,提高软件提交的频率,来获得更多的来自客户的反馈。

传统开发的目标则是在开发前使与客户进行充分交流,提高软件开发的可预见性、稳定性和可靠性。

2、规模:由于常变和相对较低的可靠性,敏捷开发不太适用于大规模软件的开发。什么叫大规模这里不能给出较为严格的定义。可以想象,当规模达到一定程序时,一开始不做好详细而细致的规划设计是不切实际的。

3、环境:就应用的环境来说,敏捷开发也适用于变更频繁的环境,而传统的软件开发则更睛睐于稳定的,变化小的情况。

开发过程管理:

1、客户关系:这两种开发方法都怎么处理好开发团队跟客户的关系呢?敏捷开发的根本是用户需要,而且在开发过程中,客户会跟开发人员在进行频繁的交流沟通,另外还有可运行的中间成果给客户展示,这些都足以用来取得客户对开发团队的信任和支持。而传统的软件开发模式则不同,它只依赖于合同和规格说明,他们没中间成果给用户展示,开发过程也没有太多的交流,整个开发过程客户必须有耐心等待最终产品完成。而在这过程中,开发团队只能凭靠过程的熟练程度来取得客户的信任。

2、开发计划的控制:敏捷开发一开始没有制订具体的开发计划,计划只能是持续地给用户提交中间产品,并吸取客户意见再持续改进。而传统软件开发则需要制订详细的开发计划,开发人员按计划一个阶段一个阶段地完成开发,并按计划与客户进行有效的沟通和协调。

3、项目的沟通:敏捷开发依赖于频繁的开发人员和客户之间的沟通,虽然沟通很频繁,但是客户对开发工作内部知识可谓是毫不知情的。这样的客户一般都是提一些很模糊的要求,并不能对开发人员用什么方式去开发提供意见,更不能对软件的内部结构进行详细地说明,这样难免会存在风险。而传统的开发则是依赖于文档开发,文档化的知识具有明确性,但是不同的人理解起来就不太一样,这样没有与客户充分交流,同样也存在风险。

技术:

1、软件需求:敏捷软件开发的需求不需要很正式,也不需要很明确,甚至没有正规的文档说明,而只是凭着客户提出的一些模糊的设想去进行开发,在开发过程中再去对需求进行进一步的细化。而传统的开发则更倾向于明确的、详细的、形式化的开发需求,而且开发过程一般不怎么去修改需求。

2、开发:敏捷软件开发对设计的偏好是简单。简单的设计能以更低的成本进行改写和快速地响应需要的变化。传统开发则更侧重于完善细致地设计,这样能增强开发过程的可靠性。

3、测试:敏捷开发在开发之前进行开发测试,并在开发过程中进行不断地测试,而传统开发的测试是对规格说明进行测试。

  以上从各方面对二者进行了对比,但在总觉缺少点什么。正如放翁一句“纸上得来终觉浅,绝知此事要躬行”,可审察今日这势态,要把两种方法都尝试过是不切实际的了,只好另求它法。于是想到再把二者的典型方法加以介绍,想来也能写到位了。

瀑布模型:

  瀑布,以一气呵成之态势示人,此处用心修饰软件开发的一种模型,自然是一种顺序型。瀑布型属于传统的软件开发模型,有人称之为经典生命周期,它提出了一个系统的顺序的软件开发方法,从用户需求规格说明开始,通过计划、建模、构建和部属的过程终能得到一个完整的软件并提供持续的技术支持。瀑布模型有最早的软件工程范例之称,然时过境迁,“江山代有才人出”,老的方法终会为现代人质疑其有效性,在新的方法出现后不免被拿来与新方法做对比。由于它属于传统模型,自然有着传统模型的缺点。这些缺点无非是从上文中寻来,在此再做简单例举。比如线性模型不可迭代性,不能确实客户需求的模糊描述,客户必须有耐心等待产品最终才能产生。

极限编程:

  极限编程是敏捷开发使用最广泛的一个方法。极限编程强调用户和开发者进行紧密的非正式的合作。此外,为了做到简明,极限编程提倡开发者只对即时需求做设计,而不考虑长远需求。这样能让代码设计简单化,方便以后变更甚至重构。在极限编程过程中得到有效的反馈来处于软件本身、客户和软件开发者。

极限编程可分为以下四个活动,而这四个活动是顺循环执行地,重点在于循环。

策划:了解客户的初步需求,为软件各功能设置权值也就是优先级。计算成本,分配工作。

设计:设计追求简单。为软件功能设计实现原则,不鼓励额外功能。

编码:不直接开始写代码,而是先开发一系列用于测试本次开发功能的测试代码。

测试:编码前先写好测试代码是极限编程方法的关键因素。所建立的单元测试应当使用一个可以自动实施的框架。

  文终处天色已晚。

时间: 2024-10-13 01:15:24

敏捷软件开发与传统软件工程——因果篇的相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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