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

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

一、前言

  随着社会和科技的不断发展,信息产业己经和人们的生活息息相关,成为不可或缺的一部分。软件工程作为信息产业的核心部分发生了翻天覆地的变化。传统的软件工程思想己经越来越不适应快速变化的信息社会,为此一种新软件工程思想-----敏捷软件开发进入了我们的视野。

二、软件工程

(一)概述

  Software engineering is the application of engineering to the design, development, implementation, testing and maintenance of software in a systematic method. [1][2][3]

  ——Wikipedia

  软件工程是以系统方法对工程设计,开发,实施,测试和维护软件的应用。

(二)传统软件工程

  软件开发模型是跨越整个软件生存周期的系统开发、运行和维护所实施的全部工作和任务的结构框架,它给出了软件开发活动各阶段之间的关系。[4]常见的传统软件开发模型有瀑布模型、快速原型模型、螺旋模型、增量模型、喷泉模型、形式化方法模型等。

  由于本课程目前一直在围绕瀑布模型进行有关训练,而且由于模型数量较多,毫无疑问我的了解并不全面,倘若一一言及势必有很多缺失,因此我将主要以瀑布模型为代表进行讨论。

(三)瀑布模型

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

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

图1

三、敏捷软件开发

(一)概述

  Agile software development describes a set of principles for software development under which requirements and solutions evolve through the collaborative effort of self-organizing cross-functional teams. [6] It advocates adaptive planning, evolutionary development, early delivery, and continuous improvement, and it encourages rapid and flexible response to change. [7] These principles support the definition and continuing evolution of many software development methods. [8]

  ——Wikipedia

  敏捷软件开发描述了一套软件开发的原则,通过自组织跨职能团队的协作努力,需求和解决方案得以发展。它倡导适应性规划,进化发展,早期交付和持续改进,并鼓励快速灵活地应对变化。这些原则支持许多软件开发方法的定义和持续发展。

(二)简介

  敏捷开发是近些年兴起的一种软件开发与管理的思想,以其灵活性,易操作性得到软件行业的广泛关注。敏捷开发方法是一组开发方法的统称,主要包括极限编程、Scrum、精益开发和动态系统开发方法(DSDM)、特征驱动开发(FDD)等。它的基本原则有迭代式开发、增量交付、互动式开发、持续集成等。在软件开发过程中,敏捷开发具有开发精确、高质量、高速度、高投资回报、高效率等优点。

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

  1. 敏捷开发十二条准则[9]

  (1)Customer satisfaction by early and continuous delivery of valuable software.

      通过尽早和不断交付有价值的软件满足客户需要。

  (2)Welcome changing requirements, even in late development.

      欢迎需求的变化,即使在开发后期。

  (3)Working software is delivered frequently (weeks rather than months).

      经常交付可以工作的软件,从几星期到几个月,时间尺度越短越好。

  (4)Close, daily cooperation between business people and developers.

      业务人员和开发者应该在整个项目过程中始终朝夕在一起工作。

  (5)Projects are built around motivated individuals, who should be trusted.

      以积极向上的人为中心进行软件开发,给开发者提供适宜的环境,满足他们的需要,并相信他们能够完成任务。

  (6)Face-to-face conversation is the best form of communication (co-location).

      在开发小组中最有效率也最有效果的信息传达方式是面对面的交谈。

  (7)Working software is the principal measure of progress.

      可以工作的软件是进度的主要度量标准。

  (8)Sustainable development, able to maintain a constant pace.

      敏捷过程提倡可持续开发。出资人、开发人员和用户应该总是维持不变的节奏。

  (9)Continuous attention to technical excellence and good design.

      对卓越技术与良好设计的不断追求将有助于提高敏捷性。

  (10)Simplicity—the art of maximizing the amount of work not done—is essential.

      简单——尽可能减少工作量的艺术至关重要。

  (11)Best architectures, requirements, and designs emerge from self-organizing teams.

      最好的架构、需求和设计都源自自我组织的团队。

  (12)Regularly, the team reflects on how to become more effective, and adjusts accordingly.

      每隔一定时间,团队都要总结如何更有效率,然后相应地调整自己的行为。

  2.敏捷软件开发宣言[10]

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

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

    客户合作 胜过 合同谈判;

    响应变化 胜过 遵循计划。

  3.敏捷开发概念的理解

  (1)敏捷开发是一种以人为核心,增量迭代、及时交付的开发方法;

  (2)是一种自下而上的轻量级开发方法,提升开发效率和产品质量;

  (3)是一种应对需求快速变化的软件开发能力,重在实践。

四、敏捷软件开发与传统软件工程的对比

  1.了解有关信息后,我决定这样定义敏捷软件开发——positive response to change。也许这样定义并不确切,但我觉得与传统软件开发相比,敏捷软件开发最显著的特点是对变化“友好的”,认为变化是不可避免的,并始终致力于解决变化带来的问题。

  2.它们主要有以下区别:

  (1)敏捷开发以人为中心,而传统开发以过程为中心。在传统开发中,设计在初始阶段就已经完成了,并且在实现阶段将不再修改。换句话说,实现阶段就是对设计的完成,设计方案是不会改变的。这样就忽略了用户的反馈、忽略了开发人员的设计的主观能动性,使得开发人员只是专注于代码层面的事情。而敏捷开发提倡的是迭代,在每次迭代中都有分析、设计,也就意味着在迭代阶段可以把一部分完成的系统给用户演示,允许用户提意见、需求,也允许开发人员将上一次迭代中得到的想法提出来,并且把这些需求意见想法融入到迭代的分析、设计中,从而在根本上、在理念上,促进了双方的交流沟通,发挥了用户的分析评价和开发人员设计的主观能动性。

  (2)需求变化是不可避免的,传统开发模式采取“堵”的思想来控制变更,变更对项目进度、质量造成不利影响,而敏捷面对变化采取“疏”的思想坦然面对,通过多次短期迭代快速响应变更。

  (3)传统方法开发软件的过程,往往是用户与开发团队的利益博弈的过程,所以在开发过程中用户的参与度不高。这也往往会是导致最终开发软件与用户理想软件有差距的重要原因。 而在敏捷开发中,要求用户和开发团队一起开发,这在一定程度上解决了两方之间的“断层”,提高了效率。

  (4)传统方法中集成是在后期的一个重要阶段,而且是一个独立的阶段。 由于通常很长时间才会做一次集成,所以这个时候问题往往会非常多,如果要进行调试的话,难度很大。而在敏捷开发中,集成很频繁,因此每一次集成的改变也有限,即使集成失败也容易定位错误。

  (5)传统方法往往要到最后才能得到可执行的产品,而敏捷开发很早就可以得到可执行的产品。不论是从实用性还是从心理层面,有可执行的产品在手总能让人更加愉快一点。

五、个人感悟

  软件项目的最大挑战在于既要应付变动中的需求,又要在紧张的工期内完成项目。敏捷开发方法善于吸收其他方法的优点,它强调改进,在近年来较为流行。

  敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,相对于传统软件开发的“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通、频繁的交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。[11]

  虽然敏捷开发是一种新方法,但是事实上它是一种综合了多种传统开发方法的优点,整理出来的一套开发组织方法。 因此敏捷开发是一个新的思路,不一定是所有软件开发的终极选择。我们仍然不能摒弃传统的软件开发方式。传统的软件开发方式是新兴开发方式的基础,只有在传统的开发方式的基础上才能更好研究出新的开发方式。

六、参考文献

  [1]Abran et al. 2004, pp. 1–1

  [2]ACM (2007). "Computing Degrees & Careers". ACM. Retrieved 2010-11-23.

  [3]Laplante, Phillip (2007). What Every Engineer Should Know about Software Engineering. Boca Raton: CRC. ISBN 978-0-8493-7228-5. Retrieved 2011-01-21.

  [4]张友生, 李雄. 软件开发模型研究综述[J]. 计算机工程与应用, 2006, 42(3):109-115.

  [5]王冲. 敏捷开发与传统瀑布模型的比较及教学[J]. 福建电脑, 2011, 27(4):61-62.

  [6]Collier, Ken W. (2011). Agile Analytics: A Value-Driven Approach to Business Intelligence and Data Warehousing. Pearson Education. pp. 121 ff. ISBN 9780321669544. "What is a self-organizing team?"

  [7]"What is Agile Software Development?". Agile Alliance. 8 June 2013. Retrieved 4 April 2015.

  [8]Larman, Craig (2004). Agile and Iterative Development: A Manager‘s Guide. Addison-Wesley. p. 27. ISBN 978-0-13-111155-4.

  [9] Kent Beck, James Grenning, Robert C. Martin, Mike Beedle, Jim Highsmith, ||Steve Mellor, Arie van Bennekum, Andrew Hunt, Ken Schwaber, Alistair Cockburn, Ron Jeffries, Jeff Sutherland, Ward Cunningham, Jon Kern, Dave Thomas, Martin Fowler, Brian Marick (2001). "Principles behind the Agile Manifesto". Agile Alliance. Archived from the original on 14 June 2010. Retrieved 6 June 2010.

  [10]ROBERT C.MARTIN(美). 敏捷软件开发 : 原则、模式与实践[M]. 清华大学出版社, 2008.

  [11]梁永幸. 浅谈敏捷开发与其他传统开发方式的区别[J]. 电子世界, 2012(24):128-128.

时间: 2024-10-09 13:54:41

小议敏捷软件开发与传统软件工程的相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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