软件开发模型基础知识

目录

一、开发生命周期模型

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种)

1、瀑布模型

瀑布模型也称为生命周期法,是生命周期法中最常用的开发模型,它把软件开发的过程分为软件计划、需求分析、软件设计、程序编码、软件测试运行维护6个阶段,规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。

采用瀑布模型的软件过程如图

  1. 软件计划(问题的定义及规划):主要确定软件的开发目标及其可行性。
  2. 需求分析:在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。
  3. 软件设计:主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等。软件设计一般分为总体设计(概要设计)和详细设计
  4. 程序编码:将软件设计的结果转换成计算机可运行的程序代码。在程序编写中必须制定统一、符合标准的编写规范,以保证程序的可读性,易维护性,提高程序的运行效率。
  5. 软件测试:在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。
  6. 软件维护:软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求,要延续软件的使用寿命,就必须对软件进行维护。

瀑布模型是最早出现的软件开发模型,在软件工程中占有重要的地位,它提供了软件开发的基本框架。瀑布模型的本质是“一次通过”,即每个活动只做一次,最后得到软件产品,也称做线性顺序模型”或者传统生命周期

其过程是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容,给出该项活动的工作成果,作为输出传给下一项活动;对该项活动实施的工作进行评审,若其工作得到确认,则继续下一项活动,否则返回前项,甚至更前项的活动进行返工。

瀑布模型优点

  • 有利于大型软件开发过程中人员的组织与管理,
  • 有利于软件开发方法和工具的研究与使用,从而提高了大型软件项目开发的质量和效率。

然而软件开发的实践表明,上述各项活动之间并非完全是自上而下的,而是呈线性图示,因此,瀑布模型存在严重的缺陷

瀑布模型优点缺点

  • 由于开发模型呈线性,所以当开发成果尚未经过测试时,用户无法看到软件的效果。这样,软件与用户见面的时间间隔较长,也增加了一定的风险。
  • 在软件开发前期未发现的错误传到后面的开发活动中时,可能会扩散,进而可能导致整个软件项目开发失败。
  • 在软件需求分析阶段,完全确定用户的所有需求是比较困难的,甚至可以说是不太可能的。

2、变换模型

变换模型(演化模型)是在快速开发一个原型的基础上,根据用户在调用原型的过程中提出的反馈意见和建议,对原型进行改进,获得原型的新版本,重复这一过程,直到演化成最终的软件产品。

3、螺旋模型

螺旋模型将瀑布模型和变换模型相结合,它综合了两者的优点,并增加了风险分析。它以原型为基础,沿着螺线自内向外旋转,每旋转一圈都要经过制订计划、风险分析、实施工程、客户评价等活动,并开发原型的一个新版本。经过若干次螺旋上升的过程,得到最终的系统,如图

4、喷泉模型

喷泉模型对软件复用和生命周期中多项开发活动的集成提供了支持,主要支持面向对象的开发方法。"喷泉"一词本身体现了迭代和无间隙特性。系统某个部分常常重复工作多次,相关

功能在每次迭代中随之加入演进的系统。所谓无间隙是指在开发活动中,分析、设计和编码之间不存在明显的边界,如图

5、V模型

在开发模型中,测试常常作为亡羊补牢的事后行为,但也有以测试为中心的开发模型,那就是V模型。V模型只得到软件业内比较模糊的认可。V模型宣称测试并不是一个事后弥补行为,而是一个同开发过程同样重要的过程,如图

V模型描述了一些不同的测试级别,并说明了这些级别所对应的生命周期中不同的阶段。在图中,左边下降的是开发过程各阶段,与此相对应的是右边上升的部分,即测试过程的各个阶段。请注意在不同的组织中,对测试阶段的命名可能有所不同。

V模型的价值在于它非常明确地表明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系:

  • 单元测试的主要目的是针对编码过程中可能存在的各种错误。例如:用户输入验证过程中的边界值的错误。
  • 集成测试的主要目的是针对详细设计中可能存在的问题,尤其是检查各单元与其他程序部分之间的接口上可能存在的错误。
  • 系统测试主要针对概要设计,检查系统作为一个整体是否有效地得到运行。例如:在产品设置中是否达到了预期的高性能。
  • 验收测试通常由业务专家或用户进行,以确认产品能真正符合用户业务上的需要。

6、增量模型

增量模型融合了瀑布模型的基本成分(重复的应用)和原型实现的迭代特征。

增量模型采用随着时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的"增量“。

当使用增量模型时,第一个增量往往是核心的产品,也就是说第一个增量实现了基本的需求,但很多补充的特征还没有发布。

客户对每一个增量的使用和评估,都作为下一个增量发布的新特征和功能。这个过程在每一个增量发布后不断重复,直到产生最终的完善产品。

增量模型强调每一个增量均发布一个可操作的产品。

增量模型像原型实现模型和其他演化方法一样,本质上是迭代的。但与原型实现不同的是增量模型强调每一个增量均发布一个可操作产品。

早期的增量是最终产品的"可拆卸"版本,但它们确实提供了为用户服务的功能,并且提供了给用户评估的平台。

增量模型的特点是引进了增量包的概念,无须等到所有需求都出来,只要某个需求的增量包出来即可进行开发。虽然某个增量包可能还需要进一步适应客户的需求,还需要更改,但只要这个增量包足够小,其影响对整个项目来说是可以承受的。

优点

  • 人员分配灵活,刚开始不用投入大量人力资源,如果核心产品很受欢迎,则可以增加人力实现下一个增量;
  • 当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作用。
  • 增量能够有计划地管理技术风险

缺点

  • 如果增量包之间存在相交的情况且不能很好地处理,就必须做全盘的系统分析。

增量模型将功能细化、分别开发的方法适用于需求经常改变的软件开发过程

7、RAD模型

快速应用开发(RapidApplicationDevelopment,RAD)模型是一个增量型的软件开发过程模型,强调极短的开发周期

RAD模型是瀑布模型的一个“高速变种,通过大量使用可复用构件,采用基于构件的建造方法赢得快速开发。如果需求理解得好且约束了项目的范围,利用这种模型可以很快地创建出功能完善的“信息系统“。其流程从业务建模开始,随后是数据建模、过程建模、应用生成、测试及反复。

采用RAD模型的软件过程如图所示

RAD模型各个活动期所要完成的任务如下。

  • 1业务建模:以什么信息驱动业务过程运作?要生成什么信息?谁生成它?信息流的去向是哪里?由谁处理?可以辅之以数据流图。
  • 2数据建模:为支持业务过程的数据流,找数据对象集合,定义数据对象属性,与其他数据对象的关系构成数据模型,可辅之以E-R图。
  • 3过程建模:使数据对象在信息流中完成各业务功能。创建过程以描述数据对象的增加、修改、删除、查找,即细化数据流图中的处理框。
  • 4应用程序生成:利用第四代语言(4GL)写出处理程序,重用已有构件或创建新的可重用构件,利用环境提供的工具自动生成并构造出整个应用系统。
  • 5测试与交付,由于大量重用,一般只做总体测试,但新创建的构件还是要测试的。

与瀑布模型相比,RAD模型不采用传统的第三代程序设计语言来创建软件,而是采用基于构件的开发方法,复用已有的程序结构(如果可能的话)或使用可复用构件,或创建可复用的构件(如果需要的话)。在所有情况下,均使用自动化工具辅助软件创造。很显然,加在一个RAD模型项目上的时间约束需要"一个可伸缩的范围"。如果一个业务能够被模块化使得其中每一个主要功能均可以在不到三个月的时间内完成,那么它就是RAD的一个候选者。每一个主要功能可由一个单独的RAD组来实现,最后再集成起来形成一个整体。

RAD模型通过大量使用可复用构件加快了开发速度,对信息系统的开发特别有效。

缺陷

  • 并非所有应用都适合RAD。RAD模型对模块化要求比较高,如果有哪一项功能不能被模块化,那么建造RAD所需要的构件就会有问题;如果高性能是一个指标,且该指标必须通过调整接口使其适应系统构件才能赢得,RAD方法也有可能不能奏效。
  • 开发者和客户必须在很短的时间完成一系列的需求分析,任何一方配合不当都会导致RAD项目失败。
  • RAD只能用于信息系统开发,不适合技术风险很高的情况。当一个新应用要采用很多新技术或当新软件要求与已有的计算机程序有较高的互操作性时,这种情况就会发生。

8、基于构件的模型

构件(Component,组件)是一个具有可重用价值的、功能相对独立的软件单元。

基于构件的软件开发(ComponentBasedSoftwareDevelopment,CBSD)模型是利用模块化方法,将整个系统模块化,并在一定构件模型的支持下,复用构件库中的一个或多个软件构件,通过组合手段高效率、高质量地构造应用软件系统的过程。

基于构件的开发模型融合了螺旋模型的许多特征,本质上是演化型的,开发过程是迭代的。基于构件的开发模型由软件的需求分析和定义、体系结构设计、构件库建立、应用软件构建、测试和发布5个阶段组成。采用基于构件的开发模型的软件过程如图

构件作为重要的软件技术和工具得到了极大的发展,这些新技术和工具有MicrosoftDCOM,SunEJB,OMGCORBA等。

基于构件的开发活动从标识候选构件开始,通过搜索已有构件库,确认所需要的构件是否已经存在,如果已经存在,就从构件库中提取出来复用;如果不存在,就采用面向对象方法开发它。在提取出来的构件通过语法和语义检查后,将这些构件通过胶合代码组装到一起实现系统,这个过程是迭代的。

基于构件的开发方法使得软件开发不再一切从头开始,开发的过程就是构件组装的过程,维护的过程就是构件升级、替换和扩充的过程,

优点

  • 构件组装模型导致了软件的复用,提高了软件开发的效率;
  • 构件可由一方定义其规格说明,被另一方实现,然后供给第三方使用;构件组装模型允许多个项目同时开发,降低了费用,提高了可维护性,可实现分步提交软件产品。

缺点

  • 由于采用自定义的组装结构标准,缺乏通用的组装结构标准,引入具有较大的风险;
  • 可重用性和软件高效性不易协调,需要精干的、有经验的分析人员和开发人员,一般的开发人员插不上手,客户的满意度低;
  • 过分依赖于构件,构件库的质量影响着产品质量。

9、原型方法

软件原型是所提出的新产品的部分实现,建立原型的主要目的是为了解决在产品开发的早期阶段的需求不确定的问题,其目的是明确并完善需求、探索设计选择方案、发展为最终的产品。

原型有很多种分类方法。

从原型是否实现功能来分,软件原型可分为水平原型垂直原型两种。

  • 水平原型也称为行为原型,用来探索预期系统的一些特定行为,并达到细化需求的目的。水平原型通常只是功能的导航,但并未真实实现功能。水平原型主要用在界面上。
  • 垂直原型也称为结构化原型,实现了一部分功能。垂直原型主要用在复杂的算法实现上。

从原型的最终结果来分,软件原型可分为抛弃型原型和演化型原型。

  • 抛弃型原型也称为探索型原型,是指达到预期目的后,原型本身被抛弃。抛弃型原型主要用在解决需求不确定性、二义性、不完整性、含糊性等。
  • 演化型原型为开发增量式产品提供基础,是螺旋模型的一部分,也是面向对象软件开发过程的一部分。演化型原型主要用在必须易于升级和优化的项目,适用于Web项目。

有些文献把原型分为实验型探索型演化型

  • 探索型原型的目的是要弄清对目标系统的要求,确定所希望的特性,并探讨多种方案的可行性。
  • 实验型原型用于大规模开发和实现之前,考核方案是否合适,规格说明是否可靠。
  • 进化型原型的目的不在于改进规格说明,而是将系统建造得易于变化,在改进原型的过程中,逐步将原型进化成最终系统。

还有些文献也把原型分为抛弃式原型演化式原型递增式原型

原型法适合于用户没有肯定其需求的明确内容的时候

它是先根据已给的和分析的需求,建立一个原始模型,这是一个可以修改的模型(在生命周期法中,需求分析成文档后一般不再多修改)。

在软件开发的各个阶段都把有关信息相互反馈,直至模型的修改,使模型渐趋完善。在这个过程中,用户的参与和决策加强了,最终的结果是更适合用户的要求。

这种原型技术又可分为三类:抛弃式、演化式和递增式。

这种原型法成败的关键及效率的高低在于模型的建立及建模的速度。

10、XP方法

XP是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学而且充满乐趣的软件开发方式。与其他方法论相比,其最大的不同在于:

  • 在更短的周期内,更早地提供具体、持续的反馈信息。
  • 迭代地进行计划编制,首先在最开始迅速生成一个总体计划,然后在整个项目开发过程中不断地发展它。
  • 依赖于自动测试程序来监控开发进度,并及早地捕获缺陷。
  • 依赖于口头交流、测试和源程序进行沟通。
  • 倡导持续的演化式的设计。
  • 依赖于开发团队内部的紧密协作。
  • 尽可能达到程序员短期利益和项目长期利益的平衡。

如图所示,XP由价值观、原则、实践和行为四个部分组成,它们彼此相互依赖、关联,并通过行为贯穿于整个生命周期。

XP的核心是其总结的4大价值观,即沟通、简单、反馈勇气

它们是XP的基础,也是XP的灵魂。XP5个原则是快速反馈、简单性假设、逐步修改、提倡更改和优质工作。而在XP方法论中,贯彻的是"小步快走"的开发原则,因此工作质量决不可打折扣,通常采用测试先行的编码方式来提供支持。

XP中,集成了12个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准。

11、RUP方法

RUPRationalUnifiedProcess)是一个统一的软件开发过程,是一个通用过程框架,可以应付种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。

RUP是基于构件的,这意味着利用它开发的软件系统是由构件构成的构件之间通过定义良好的接口相互联系。

在准备软件系统所有蓝图的时候,RUP使用的是统一建模语言UML

显著的特点:

  1. 用例驱动
  2. 以基本架构为中心
  3. 迭代和增量

RUP中的软件过程在时间上被分解为四个顺序的阶段,分别是初始阶段、细化阶段、构建阶段和交付阶段。每个阶段结束时都要安排一次技术评审,以确定这个阶段的目标是否已经满足。如果评审结果令人满意,就可以允许项目进入下一个阶段。基于RUP的软件过程模型如图

图中可以看出:基于RUP的软件过程是一个迭代过程。通过初始、细化、构建和提交四个阶段就是一个开发周期,每次经过这四个阶段就会产生一代软件。除非产品退役,否则通过重复同样的四个阶段,产品将演化为下一代产品,但每一次的侧重点都将放在不同的阶段上。这些随后的过程称为演化过程。

在进度和工作量方面,所有阶段都各不相同。尽管不同的项目有很大的不同,但一个中等规模项目的典型初始开发周期应该预先考虑到工作量和进度间的分配,如表

对于演进周期,初始和细化阶段就小得多了。能够自动完成某些构建工作的工具将会缓解此现象,并使得构建阶段比初始阶段和细化阶段的总和还要小很多。

RUP的工作流程分为两部分:核心工作流程核心支持工作流程

  • 核心工作流程(在项目中的流程)包括业务需求建模、分析设计、实施、测试、部署;
  • 核心支持工作流程(在组织中的流程)包括环境、项目管理、配置与变更管理。

二、系统开发方法论

系统的开发方法主要包括结构化分析与设计面向数据结构的设计面向对象分析设计以及构件化方法四种。

1、结构化分析与设计

这种方法采用结构化技术来完成软件开发的各项任务。该方法把软件生命周期的全过程依次划分为若干阶段,然后顺序地完成每个阶段的任务,与瀑布模型有很好的结合度,是与其最相适应的开发方法。

结构化方法的核心思想是"自顶向下,逐步分解"

2、面向数据结构的设计

数据的输入、存储都涉及不同的数据结构,面向数据结构设计方法的基本思想是根据数据结构导出程序结构

典型的面向数据结构的设计方法包括Jackson方法和Warnier方法

Jackson方法的基本步骤:

  1. 先建立系统的数据结构;
  2. 接着以数据结构为基础,对应地建立程序结构;
  3. 列出程序中要用到的各种基本操作,然后将操作分配到适当的模块中去。

面向数据结构的设计方法并没有明显地使用软件结构的概念,对于模块独立性原则也重视不足,因此并不适合于复杂的软件系统

3、面向对象分析与设计

这种方法引入了"对象"的概念,将数据和方法封装在一起,提高了模块的聚合度,降低了耦合度,更大程度上支持软件复用。

面向对象方法是现在最流行和最具有发展前景的软件开发方法

4、构件化开发

为了降低开发费用、提高生产率,以及在快速的技术演化面前提供受控的系统升级的开发方式,就催生了基于构件的软件开发(Component-BasedSoftwareDevelopment,CBSD)。

它通过有计划地集成现有的软件部分来进行软件开发。

它可以有效地遏制复杂性、缩短发布时间、提高一致性,更有效地利用本领域的最佳方法、提高生产率、增加项目进度的可视性、支持并行和分布式的开发、减少维护费用。

采用CBSD后,所有的软件解决方案将可以使用预建的构件和模板,像"搭积木"式地建造。

这种"积木"就是构件(组件),构件是一个功能相对独立的具有可重用价值的软件单元。在面向对象方法中,一个构件由一组对象构成,包含了一些协作类的集合,它们共同工作来提供一种系统功能。

构件具有5个基本要素:规格说明、一个或多个实现、受约束的构件标准、包装方法和部署方法。

可重用性:可重用性是指系统和(或)其组成部分能在其他系统中重复使用的程度。

软件开发的全生命周期都有可重用的价值,包括项目的组织、软件需求、设计、文档、实现、测试方法和测试用例,都是可以被重复利用和借鉴的有效资源。

可重用性体现在软件的各个层次,通用的、可复用性高的软件模块往往已经由操作系统或开发工具提供,如通用库、标准组件和标准模板库等,并不需要程序员重新开发。

猜你喜欢

转载自blog.csdn.net/swadian2008/article/details/114690179
今日推荐