目录
一、开发生命周期模型
1、瀑布模型
2、变换模型
3、螺旋模型
4、喷泉模型
5、V模型
6、增量模型
7、RAD模型
8、基于构件的模型
9、原型方法
10、XP方法
11、RUP方法
二、系统开发方法论
1、结构化分析与设计
2、面向数据结构的设计
3、面向对象分析与设计
4、构件化开发
在开发模型知识点中,我们要掌握软件生命周期的概念、各种开发模型的特点和应用场合。
主要的开发模型有瀑布模型、增量模型、螺旋模型、喷泉模型、智能模型、V模型、RAD模型、CBSD模型、原型方法、XP方法、RUP方法等。(11种)
瀑布模型也称为生命周期法,是生命周期法中最常用的开发模型,它把软件开发的过程分为软件计划、需求分析、软件设计、程序编码、软件测试和运行维护6个阶段,规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
采用瀑布模型的软件过程如图
瀑布模型是最早出现的软件开发模型,在软件工程中占有重要的地位,它提供了软件开发的基本框架。瀑布模型的本质是“一次通过”,即每个活动只做一次,最后得到软件产品,也称做“线性顺序模型”或者“传统生命周期”。
其过程是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容,给出该项活动的工作成果,作为输出传给下一项活动;对该项活动实施的工作进行评审,若其工作得到确认,则继续下一项活动,否则返回前项,甚至更前项的活动进行返工。
瀑布模型优点
- 有利于大型软件开发过程中人员的组织与管理,
- 有利于软件开发方法和工具的研究与使用,从而提高了大型软件项目开发的质量和效率。
然而软件开发的实践表明,上述各项活动之间并非完全是自上而下的,而是呈线性图示,因此,瀑布模型存在严重的缺陷。
瀑布模型优点缺点
- 由于开发模型呈线性,所以当开发成果尚未经过测试时,用户无法看到软件的效果。这样,软件与用户见面的时间间隔较长,也增加了一定的风险。
- 在软件开发前期未发现的错误传到后面的开发活动中时,可能会扩散,进而可能导致整个软件项目开发失败。
- 在软件需求分析阶段,完全确定用户的所有需求是比较困难的,甚至可以说是不太可能的。
变换模型(演化模型)是在快速开发一个原型的基础上,根据用户在调用原型的过程中提出的反馈意见和建议,对原型进行改进,获得原型的新版本,重复这一过程,直到演化成最终的软件产品。
螺旋模型将瀑布模型和变换模型相结合,它综合了两者的优点,并增加了风险分析。它以原型为基础,沿着螺线自内向外旋转,每旋转一圈都要经过制订计划、风险分析、实施工程、客户评价等活动,并开发原型的一个新版本。经过若干次螺旋上升的过程,得到最终的系统,如图
喷泉模型对软件复用和生命周期中多项开发活动的集成提供了支持,主要支持面向对象的开发方法。"喷泉"一词本身体现了迭代和无间隙特性。系统某个部分常常重复工作多次,相关
功能在每次迭代中随之加入演进的系统。所谓无间隙是指在开发活动中,分析、设计和编码之间不存在明显的边界,如图
在开发模型中,测试常常作为亡羊补牢的事后行为,但也有以测试为中心的开发模型,那就是V模型。V模型只得到软件业内比较模糊的认可。V模型宣称测试并不是一个事后弥补行为,而是一个同开发过程同样重要的过程,如图
V模型描述了一些不同的测试级别,并说明了这些级别所对应的生命周期中不同的阶段。在图中,左边下降的是开发过程各阶段,与此相对应的是右边上升的部分,即测试过程的各个阶段。请注意在不同的组织中,对测试阶段的命名可能有所不同。
V模型的价值在于它非常明确地表明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系:
增量模型融合了瀑布模型的基本成分(重复的应用)和原型实现的迭代特征。
增量模型采用随着时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的"增量“。
当使用增量模型时,第一个增量往往是核心的产品,也就是说第一个增量实现了基本的需求,但很多补充的特征还没有发布。
客户对每一个增量的使用和评估,都作为下一个增量发布的新特征和功能。这个过程在每一个增量发布后不断重复,直到产生最终的完善产品。
增量模型强调每一个增量均发布一个可操作的产品。
增量模型像原型实现模型和其他演化方法一样,本质上是迭代的。但与原型实现不同的是增量模型强调每一个增量均发布一个可操作产品。
早期的增量是最终产品的"可拆卸"版本,但它们确实提供了为用户服务的功能,并且提供了给用户评估的平台。
增量模型的特点是引进了增量包的概念,无须等到所有需求都出来,只要某个需求的增量包出来即可进行开发。虽然某个增量包可能还需要进一步适应客户的需求,还需要更改,但只要这个增量包足够小,其影响对整个项目来说是可以承受的。
优点
- 人员分配灵活,刚开始不用投入大量人力资源,如果核心产品很受欢迎,则可以增加人力实现下一个增量;
- 当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作用。
- 增量能够有计划地管理技术风险。
缺点
- 如果增量包之间存在相交的情况且不能很好地处理,就必须做全盘的系统分析。
增量模型将功能细化、分别开发的方法适用于需求经常改变的软件开发过程。
快速应用开发(RapidApplicationDevelopment,RAD)模型是一个增量型的软件开发过程模型,强调极短的开发周期。
RAD模型是瀑布模型的一个“高速”变种,通过大量使用可复用构件,采用基于构件的建造方法赢得快速开发。如果需求理解得好且约束了项目的范围,利用这种模型可以很快地创建出功能完善的“信息系统“。其流程从业务建模开始,随后是数据建模、过程建模、应用生成、测试及反复。
采用RAD模型的软件过程如图所示
RAD模型各个活动期所要完成的任务如下。
与瀑布模型相比,RAD模型不采用传统的第三代程序设计语言来创建软件,而是采用基于构件的开发方法,复用已有的程序结构(如果可能的话)或使用可复用构件,或创建可复用的构件(如果需要的话)。在所有情况下,均使用自动化工具辅助软件创造。很显然,加在一个RAD模型项目上的时间约束需要"一个可伸缩的范围"。如果一个业务能够被模块化使得其中每一个主要功能均可以在不到三个月的时间内完成,那么它就是RAD的一个候选者。每一个主要功能可由一个单独的RAD组来实现,最后再集成起来形成一个整体。
RAD模型通过大量使用可复用构件加快了开发速度,对信息系统的开发特别有效。
缺陷:
构件(Component,组件)是一个具有可重用价值的、功能相对独立的软件单元。
基于构件的软件开发(ComponentBasedSoftwareDevelopment,CBSD)模型是利用模块化方法,将整个系统模块化,并在一定构件模型的支持下,复用构件库中的一个或多个软件构件,通过组合手段高效率、高质量地构造应用软件系统的过程。
基于构件的开发模型融合了螺旋模型的许多特征,本质上是演化型的,开发过程是迭代的。基于构件的开发模型由软件的需求分析和定义、体系结构设计、构件库建立、应用软件构建、测试和发布5个阶段组成。采用基于构件的开发模型的软件过程如图
构件作为重要的软件技术和工具得到了极大的发展,这些新技术和工具有Microsoft的DCOM,Sun的EJB,OMG的CORBA等。
基于构件的开发活动从标识候选构件开始,通过搜索已有构件库,确认所需要的构件是否已经存在,如果已经存在,就从构件库中提取出来复用;如果不存在,就采用面向对象方法开发它。在提取出来的构件通过语法和语义检查后,将这些构件通过胶合代码组装到一起实现系统,这个过程是迭代的。
基于构件的开发方法使得软件开发不再一切从头开始,开发的过程就是构件组装的过程,维护的过程就是构件升级、替换和扩充的过程,
优点
- 构件组装模型导致了软件的复用,提高了软件开发的效率;
- 构件可由一方定义其规格说明,被另一方实现,然后供给第三方使用;构件组装模型允许多个项目同时开发,降低了费用,提高了可维护性,可实现分步提交软件产品。
缺点
- 由于采用自定义的组装结构标准,缺乏通用的组装结构标准,引入具有较大的风险;
- 可重用性和软件高效性不易协调,需要精干的、有经验的分析人员和开发人员,一般的开发人员插不上手,客户的满意度低;
- 过分依赖于构件,构件库的质量影响着产品质量。
软件原型是所提出的新产品的部分实现,建立原型的主要目的是为了解决在产品开发的早期阶段的需求不确定的问题,其目的是明确并完善需求、探索设计选择方案、发展为最终的产品。
从原型的最终结果来分,软件原型可分为抛弃型原型和演化型原型。
有些文献把原型分为实验型、探索型和演化型。
还有些文献也把原型分为抛弃式原型、演化式原型和递增式原型。
原型法适合于用户没有肯定其需求的明确内容的时候。
它是先根据已给的和分析的需求,建立一个原始模型,这是一个可以修改的模型(在生命周期法中,需求分析成文档后一般不再多修改)。
在软件开发的各个阶段都把有关信息相互反馈,直至模型的修改,使模型渐趋完善。在这个过程中,用户的参与和决策加强了,最终的结果是更适合用户的要求。
这种原型技术又可分为三类:抛弃式、演化式和递增式。
这种原型法成败的关键及效率的高低在于模型的建立及建模的速度。
XP是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学而且充满乐趣的软件开发方式。与其他方法论相比,其最大的不同在于:
如图所示,XP由价值观、原则、实践和行为四个部分组成,它们彼此相互依赖、关联,并通过行为贯穿于整个生命周期。
XP的核心是其总结的4大价值观,即沟通、简单、反馈和勇气。
它们是XP的基础,也是XP的灵魂。XP的5个原则是快速反馈、简单性假设、逐步修改、提倡更改和优质工作。而在XP方法论中,贯彻的是"小步快走"的开发原则,因此工作质量决不可打折扣,通常采用测试先行的编码方式来提供支持。
在XP中,集成了12个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准。
RUP(RationalUnifiedProcess)是一个统一的软件开发过程,是一个通用过程框架,可以应付种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。
RUP是基于构件的,这意味着利用它开发的软件系统是由构件构成的,构件之间通过定义良好的接口相互联系。
在准备软件系统所有蓝图的时候,RUP使用的是统一建模语言UML。
显著的特点:
RUP中的软件过程在时间上被分解为四个顺序的阶段,分别是初始阶段、细化阶段、构建阶段和交付阶段。每个阶段结束时都要安排一次技术评审,以确定这个阶段的目标是否已经满足。如果评审结果令人满意,就可以允许项目进入下一个阶段。基于RUP的软件过程模型如图
图中可以看出:基于RUP的软件过程是一个迭代过程。通过初始、细化、构建和提交四个阶段就是一个开发周期,每次经过这四个阶段就会产生一代软件。除非产品退役,否则通过重复同样的四个阶段,产品将演化为下一代产品,但每一次的侧重点都将放在不同的阶段上。这些随后的过程称为演化过程。
在进度和工作量方面,所有阶段都各不相同。尽管不同的项目有很大的不同,但一个中等规模项目的典型初始开发周期应该预先考虑到工作量和进度间的分配,如表
对于演进周期,初始和细化阶段就小得多了。能够自动完成某些构建工作的工具将会缓解此现象,并使得构建阶段比初始阶段和细化阶段的总和还要小很多。
RUP的工作流程分为两部分:核心工作流程与核心支持工作流程。
系统的开发方法主要包括结构化分析与设计、面向数据结构的设计、面向对象分析与设计以及构件化方法四种。
这种方法采用结构化技术来完成软件开发的各项任务。该方法把软件生命周期的全过程依次划分为若干阶段,然后顺序地完成每个阶段的任务,与瀑布模型有很好的结合度,是与其最相适应的开发方法。
结构化方法的核心思想是"自顶向下,逐步分解"。
数据的输入、存储都涉及不同的数据结构,面向数据结构设计方法的基本思想是根据数据结构导出程序结构。
典型的面向数据结构的设计方法包括Jackson方法和Warnier方法。
Jackson方法的基本步骤:
面向数据结构的设计方法并没有明显地使用软件结构的概念,对于模块独立性原则也重视不足,因此并不适合于复杂的软件系统。
这种方法引入了"对象"的概念,将数据和方法封装在一起,提高了模块的聚合度,降低了耦合度,更大程度上支持软件复用。
面向对象方法是现在最流行和最具有发展前景的软件开发方法
为了降低开发费用、提高生产率,以及在快速的技术演化面前提供受控的系统升级的开发方式,就催生了基于构件的软件开发(Component-BasedSoftwareDevelopment,CBSD)。
它通过有计划地集成现有的软件部分来进行软件开发。
它可以有效地遏制复杂性、缩短发布时间、提高一致性,更有效地利用本领域的最佳方法、提高生产率、增加项目进度的可视性、支持并行和分布式的开发、减少维护费用。
采用CBSD后,所有的软件解决方案将可以使用预建的构件和模板,像"搭积木"式地建造。
这种"积木"就是构件(组件),构件是一个功能相对独立的具有可重用价值的软件单元。在面向对象方法中,一个构件由一组对象构成,包含了一些协作类的集合,它们共同工作来提供一种系统功能。
构件具有5个基本要素:规格说明、一个或多个实现、受约束的构件标准、包装方法和部署方法。
可重用性:可重用性是指系统和(或)其组成部分能在其他系统中重复使用的程度。
软件开发的全生命周期都有可重用的价值,包括项目的组织、软件需求、设计、文档、实现、测试方法和测试用例,都是可以被重复利用和借鉴的有效资源。
可重用性体现在软件的各个层次,通用的、可复用性高的软件模块往往已经由操作系统或开发工具提供,如通用库、标准组件和标准模板库等,并不需要程序员重新开发。