首页 > 代码库 > 敏捷软件开发与传统软件工程
敏捷软件开发与传统软件工程
敏捷软件开发与传统软件工程
摘要:本文从敏捷软件、传统软件的概念,提出相关开发模型等方面对敏捷软件工程和传统软件工程进行描述。
一、敏捷软件开发
敏捷型软件开发是一种开发方法,是一种软件开发的流程。从广义上来给敏捷开发下定义,敏捷开发(agile development)是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。
敏捷开发模型是多种软件开发项目管理方法的集合,其中包括了极限编程(XP)、迭代增量化模式(Scrum)等十几种软件开发模型。
极限编程(XP)
“Extreme(极限)”是指,对比传统的项目开发方式,XP强调把它列出的每个方法和思想做到极限、做到最好。极限编程要求有极限的工作环境、极限的需求、极限的设计、极限的编程和极限的测试。
(1)极限的工作环境
为了在软件开发过程中最大程度地实现和满足客户和开发人员的基本权利和义务,XP要求把工作环境也做得最好。
(2)极限的需求
客户应该是项目开发队伍中的一员,而不是和开发人员分开的。因为从项目的计划到最后验收整个过程客户一直起着很重要的作用。开发人员和客户一起,把各种需求分割为一个个小的需求模块,这些模块又会根据实际情况被组合在一起或者被再次分解成更小的模块。上述需求模块都被记录在一些小卡片(Story Card)上,之后将这些卡片分别分配给程序员们,并在一段时间内(通常不超过3个星期)实现。客户根据每个模块的商业价值进行排序,确定开发的优先级。开发人员要做的是确定每个需求模块的开发风险。风险高的(通常是因为缺乏类似的经验)需求模块将被优先研究、探索和开发。经过开发人员和客户分别从不同的角度评估每个模块后,它们被安排在不同的开发周期里,客户将得到一个尽可能准确的开发计划。
(3)极限的设计
从具体开发过程的角度来看,XP内部的过程是多个基于测试驱动的开发(Test Driven Development)周期。诸如计划和设计等外层的过程都是围绕这些测试展开的,每个开发周期都有很多相应的单元测试(Unit Test)。
(4)极限的编程
编程是程序员使用某种程序设计语言编写程序代码,并最终得到能够解决某个问题的程序的过程。XP极其重视编程,提倡配对编程(Pair Programming),即两个人一起写同一段程序,而且代码所有权是归于整个开发队伍(Collective Code Ownership)。程序员在写程序和优化程序的时候,都要严格遵守编程规范。任何人都可以修改其他人写的程序,修改后要确定新程序能通过单元测试。
(5)极限的测试
XP提倡开发人员经常把开发好的模块整合到一起(Continuous Integration),并且在每次整合后都进行单元测试。对代码进行的任何复核和修改,也都要进行单元测试。发现了错误,就要增加相应的测试,因此XP方法不需要错误数据库。
迭代增量化模式(Scrum)
Scrum 是一个用于开发和维持复杂产品的框架 ,是一个增量的、迭代的开发过程,通常用于敏捷软件开发。。原词来自于橄榄球中“带球过人”。在橄榄球比赛的每次冲刺前,都将有一个计划安排的过程,但冲刺开始后则由队员在原计划的基础上随机应发。
Scrum流程图:
SCRUM框架:
二、
二、传统软件工程
传统软件工程是一种方法学,这种方法学强调以模块为中心,采用模块化,自顶向下,逐步求精设计过程。它的开发模型有瀑布模型、螺旋模型和快速原型模型等。
(1)瀑布模型(Waterfall Model)
瀑布模型的软件开发过程与软件生命周期是一致的并且它是由文档驱动,两相邻阶段之间存在因果关系,需要对阶段性的产品进行审批。瀑布模型假定用户的需求是不变的,因此缺乏灵活性。
(2)
(2)快速原型模型(Rapid Prototype)
快速原型模型在功能上等价于产品的一个子集。根据客户的需要在很短的时间内解决用户最迫切的需要,此时只是部分功能的实现,快速原型模型最重要的目的是确定用户真正的需求并支持需求的动态变化。一般不会单独使用,而和瀑布模型或螺旋模型一起使用。
(3)螺旋模型
螺旋模型是瀑布模型和快速原型模型的有机结合,它是由风险驱动的,它强调了其他模型所忽略的风险分析,适合较大的系统,但是缺乏对风险的评估。
总结:
(1)敏捷开发与传统软件开发的比较
敏捷开发的优点是轻量级、简单、可快速交付、最大的特点是高度透明、检验和适应,注重开发团队之间以及开发团队与客户的及时沟通,主张响应需求变化,但是不够系统。
传统软件架构的优点在于预见性和系统性,能在正式开发前预见软件的功能需求和非功能需求,最大的特点是重视文档和结构明显,主张固定的流水开发,很难响应客户需求的变化,难以保证开发的灵活性。
(2)敏捷开发与传统软件工程的融合
将具有系统性和预见性的传统软件工程架构嵌套到敏捷开发的每次轻量级的迭代中,将软件架构颗粒化,嵌套到整个敏捷开发,使软件工程兼具软件架构的预见性和敏捷开发的适应性,根据项目的大小来调整嵌套的程度,根据每次迭代项目的大小来选择不同的架构,实现敏捷开发与软件架构融合的双赢。
【1】Kent Beck 著,唐东铭 译 极限编程,北京 人民邮电出版社,2002
【2】百度百科:极限编程 http://baike.baidu.com/view/259207
【3】《软件工程——实践者的研究方法》[J]. 计算机教育, 2010(03):80-80.
【4】李航. 敏捷型软件开发方法与极限编程概述[J]. 计算机工程与设计, 2003, 24(10):116-118.
敏捷软件开发与传统软件工程