1、第二章软件开发模型 第一节软件开发模型(1) (时间100分钟) 一、简要总结第一章(3分钟) 学习软件工程的目的和意义;软件定义、特点;软件危机;软件工程的概念;软件工程框架。 二、简要介绍第二章:(7分钟) 软件工程是一种层次化技术,是建立在以质量焦点为基础的,分过程、方法和工具三个研究层次的综合技术。 软件开发模型是描述软件开发过程中各种活动如何执行的模型。因此又称为软件过程模型。软件过程模型是对软件开发实际过程的抽象和简化。不同的开发方法有不同的软件过程模型。本章主要讲述目前典型的软件开发模型:瀑布模型、原型模型、螺旋模型、增量模型、智能模型、喷泉模型。 三、讲解
2、第一节:软件开发模型(1)(80分钟) (一)基本概念 1.软件生存周期(Software Life Cycle): 软件生存周期(Software Life Cycle):软件生命周期实质上是大型系统开发过程中各项目阶段的一种表示方法,如同任何事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程。根据这一思想,把上述基本的过程活动进一步展开,可以得到软件生命期的6个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护。 软件生命期模型是从软件项目需求定义直至软件经使用后废弃为止,跨越整个生命周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。 一个软件项
3、目从问题提出开始,直到软件产品最终退役(废弃不用)为止。软件生存周期方法学把整个生存周期划分为多个相对独立的较小阶段,给每个阶段赋予确定而有限的任务,从而降低了整个软件工程的难度,提高了软件开发生产率;对软件生存周期的每个阶段采用科学的、规范的方法和管理,使软件开发全过程以一种有条不紊的方式进行,保证了软件质量,提高了软件的可维护性和软件开发的成功率。 2.软件开发过程开发标准的要点 ① 采用生存周期方法学开发软件,必须从对任务的抽象逻辑分析开始,一个阶段一个阶段地进行。 ② 划分阶段应遵循的基本原则是各阶段的任务彼此之间尽可能相对独立,同一阶段各项任务的性质尽可能相同,从而降低每个
4、阶段任务的复杂程度,简化不同阶段之间的联系,有利于软件开发过程的组织和管理。 ③ 每个阶段有相对独立的任务,前一个阶段任务的完成是后一个阶段任务开始的前提和基础,而后一阶段任务的完成是前一阶段提出“解”的进一步具体化和实现细节。 ④ 每一个阶段的开始和结束都有严格标准。对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。每一个阶段结束之前,都必须对这个阶段的成果进行严格的技术复审和管理审查。审查的主要对象是每个阶段都应该提交的、最新版本的、高质量的相关文档资料。 ⑤ 完成每个阶段的任务,应该采用适合该阶段任务特点的规范方法和系统化技术。 3. 软件开发过程模型
5、 软件开发过程模型(软件生存周期模型),是把软件生存周期中软件生产活动的有序流程用一个合理的框架——开发模型规范描述。软件开发模型是软件开发全部过程、活动和任务的结构框架。软件开发过程模型是一种软件过程的抽象表示法,它从一个特定的角度表现一个开发过程。软件过程模型主要是根据软件的类型、规模,特别是软件的开发方法、开发环境等多种因素确立模型。 最早出现的软件开发模型是1970年W.Royce提出的瀑布模型,而后随着软件工程学科的发展和软件开发的实践,相继提出了原型模型、演化模型、增量模型、喷泉模型等 (二)软件过程各阶段任务 各种软件过程模型虽然有所不同,一般都由软件定义、软件开发和软件维
6、护三个时期组成,每个时期又可由多个阶段(子阶段)组成。 软件定义时期的活动是弄清软件“做什么”,软件开发时期的活动是集中解决软件“怎样做”,软件维护时期的活动是聚焦于软件的“修改/完善”,它们的主要活动特征可以概括为 “ What-How-Change ”。 1. 软件定义时期各阶段任务 软件定义时期是了解用户(或客户)提出的需求、确定项目的总目标、考察和分析项目的可行性、导出实现项目目标应该采用的策略,系统的功能,并估计该项目需要的资源和成本,制定工程进度表等。软件定义时期可以划分成问题定义、可行性研究、需求分析和开发计划四个阶段,其中,最核心的是需求分析阶段,所以,软件定义时期也可
7、以称为需求分析时期。 (1)问题定义和可行性研究 问题定义主要是弄清“用(客)户需要解决什么问题”,提交关于问题性质、工程规模的系统目标与范围的说明文档。可行性研究是确定所定义的问题是不是能够实现,值不值得实现。为此必须从抽象的概念出发,对项目做一次简化的需求分析和粗略的系统概要设计,寻求一种至数种在技术、经济、运行和法律诸方面都可行的解决方案,并给出可行性论证报告。 (2)需求分析和开发计划 需求分析(阶段)的任务是分析用户对软件系统的全部需求,确定目标系统的逻辑模型,即目标系统是“做什么”的,并通过需求规格说明文档准确地表达。开发计划的任务是在软件项目经过可行性研究和需求分析之
8、后,制定出主要包括成本估计、资源配置、工程进度安排的软件项目开发和管理文档。 2. 软件开发时期各阶段任务 软件开发时期的任务是设计和实现已定义的,并经过需求分析的软件系统。软件开发时期通常划分成软件设计、软件实现和软件测试三个阶段。 软件测试也可以分解到软件实现的各个活动中,可重新划分成编码和单元测试、集成测试、系统测试三个阶段。甚至,还可以认为软件测试不是一个独立的阶段,因为它应该和所有软件生产活动并行进行。 (1)软件设计阶段任务 软件设计阶段是为目标系统的逻辑模型设计出一种(不惟一的)软件实现模型,确定软件的总体结构、数据结构、算法细节和用户界面,并给出软件设计的详尽的
9、软件设计说明文档。软件设计阶段分成总体设计和详细设计两个子阶段。总体设计是从需求规格说明文档导出软件结构图。详细设计为软件结构图中的各个模块的数据结构、算法和模块接口等进行细节设计,并给出过程性描述。 (2)软件实现阶段任务 软件实现阶段的任务是把软件的设计用一种程序设计语言实现。实现阶段一般分成编码和系统集成两个步骤(或子阶段)进行。编码是根据目标系统的性质和实际开发环境,选取一种适当的程序设计语言,把详细设计的模块过程性描述“翻译”成所选定程序语言的源程序。对于多模块的系统集成是把所有的程序模块,按照它的软件结构组装(集成)成一个完整的软件系统。 (3)软件测试阶段任务 软件测
10、试阶段完成产品交付前的“找错”和“改错”两大任务,其测试过程必须通过测试报告文档反映。按照测试活动的目标,软件测试可细分为单元(模块)测试、综合(集成)测试、确认测试和系统(验收)测试等多个测试层次。软件测试是对开发活动的技术复审,也可以分解到软件实现阶段的各个活动环节。 3. 软件维护时期(阶段)任务 软件维护时期(阶段)任务是在整个软件运行时期内,当发现错误时加以改正,以确保运行正常;当环境改变时修改软件,以适应新的环境;当用户有新要求时及时改进软件,以满足需求等一系列维护活动。每一项维护活动一般都经过提出(或报告)维护问题、分析维护要求、提出维护方案、审批维护方案、确定维护计划、
11、修改软件设计、修改程序、测试/验收、维护报告等一系列环节(维护活动实质是一次压缩和简化了的软件定义和开发过程)。 (二)典型的软件过程模型 软件工程的前20年,软件过程模型的特征是“线性思维”,即把软件的开发活动分解成一系列线性的描述、开发、有效性验证和软件进化等基本过程活动,并且用单独的过程阶段来表现这些活动。随着软件规模的不断增长,大型而复杂的软件采用渐增式或迭代式的开发理念,即把软件的描述、开发、有效性验证等主要开发活动交替进行,让开发的软件在迭代过程中逐步完成和完善。 (三)瀑布模型 1.瀑布模型结构 瀑布模型(Waterfall Model)也称线性顺序模型。瀑布模型把
12、开发过程分成固定的、相对独立的各个阶段,每个阶段都有确定的、有限的任务,而且在各个阶段采用一些规范的开发方法和管理手段,力求保证软件质量和提高软件生产率。瀑布模型各个阶段的工作顺序展开,恰如“奔流不息、拾级而下”的瀑布,故而得名。模型结构如图5所示。 图5. 瀑布模型 2.瀑布模型的特点 1.阶段的“里程碑”标志 2.阶段间的顺序性和依赖性 3.复审/验证环节 4.瀑布模型的适用于预先确定型系统 该模型适用于需求非常清楚的软件开发环境。 四、本次课小结(5分钟) 主要讲述了软件开发模型中的一些基本概念,阐述了软件过程各阶段任务,简单介绍了典型的软件过程
13、模型,重点讨论了瀑布模型。要求学生对以上所讲内容理解、掌握。 五、布置作业、课外思考题,安排预习(5分钟) 第二章第二节软件开发模型(2) (时间150分钟) 一、简要总结第一节(5分钟) 回顾软件开发模型中的一些基本概念,软件过程各阶段任务,简单介绍了典型的软件过程模型,瀑布模型的结构和特点。 二、讲解第一节:软件开发模型(2)(130分钟) (一)原型模型 原型模型可分为:快速原型模型、抛弃式原型模型、演化式原型模型 1. 快速原型模型 快速原型模型(Rapid Prototype Model,简称原型模型)打破了瀑布模型的“线性”特征,是一种系统型化的子集扩
14、展式开发模式。原型模型方法采原用合理的抽象,快速建立一个旨在展示目标系统主要功能的软件“样品”————原型系统,取代形式的、僵硬的(不易更改的)的规格说明,用户通过实际试用原型系统而提供真实的反馈意见。 速成原型的工作模型是一个循环的模型。如图6、图7所示。 1. 快速分析 快速确定软件系统的基本要求,确定原型所要体现的特征(界面,总体结构,功能,性能) 2. 构造原型 考虑主要特征,快速构造一个可运行的系统。有三类原型:用户界面原型,功能原型,性能原型。 3. 运行和评价原型 4. 修改与改进 图6. 快速原型模型 图7。细化的快速原型模型
15、2.抛弃式原型模型 模型结构如图8所示。 图8. 抛弃式原型模型 抛弃式原型模型建立原型的目的是,评价目标系统的某一个或某一些特性,以便更准确地确定需求,或者更严格地验证设计方案。使用完之后就把该原型系统抛弃掉,然后再重新构造正式的目标系统。抛弃式原型模型本质上仍属于瀑布模型,建立原型系统只不过是“需求分析”和“有效性验证”的一种辅助手段,需求分析阶段结束时原型系统的生存周期也就终止。 3.演化式原型模型 模型结构如图9所示。 图9. 演化式原型模型
16、 演化式原型模型是一种迭代式的动态开发方法。 ① 演化式的原型开发,必须从对用户需求把握准确的部分做起,优先处理这部分工作,而对用户需求把握程度较差的部分和模糊的需求靠后安排,可以在用户明确要求之后再处理。 ② 原型系统的演化过程,可以有效提高系统可靠性、健壮性和可维护性。 ③ 有效地快速进行原型的建立和迭代,提高开发效益。 ④ 原型的开发提高系统与用户的友善性,并能提早进行实际系统的应用培训。 (二)增量模型 模型结构如图10所示。 增量模型(Incremental Model)把软件描述、设计、实现活动分解成一系列相互有联系的增量构件的迭代开发,是瀑布模型顺序特征
17、和快速原型模型迭代特征相结合的一种软件构件化的模型。增量式的开发过程,首先根据客户需要提供的服务的优先次序,确定一系列交付增量,每个增量提供系统功能的一个子集。随着开发过程的进展,每次迭代产生一个可发布的(可执行的)软件增量构件。 增量模型是一种非整体开发的模型。是一种进化式的开发过程。 根据增量的方式和形式的不同,分为: 基于瀑布模型的渐增模型 基于原型的快速原型模型 该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。 图10. 增量模型 三、本次课小结(10分钟) 主要讨论了
18、快速原型模型、抛弃式原型模型、演化式原型模型以及增量模型的结构,开发步骤,开发方法。对比这几种开发模型的特点和使用的开发环境。 四、布置作业、课外思考题,安排预习(5分钟) 第二章第三节软件开发模型(3) (时间100分钟) 一、简要总结第二节(5分钟) 简要回顾上节课所讲内容:快速原型模型、抛弃式原型模型、演化式原型模型以及增量模型的结构,开发步骤,开发方法。(提问学生这几种开发模型的特点和使用的开发环境)。 二、讲解第三节(80分钟) (一)螺旋模型 螺旋模型(Spiral Model)是增加了风险分析和规避措施的“原型 + 瀑布”的迭代式开发模型,由于一系列活动和活动
19、间的回溯过程用螺旋线描述,故而得名。 螺旋模型是一种迭代模型,每迭代一次,螺旋线就前进一周。软件开发又前进一个层次,系统又生成一个新版本,而软件开发的时间和成本又有了新的投入。最后得到一个客户满意的软件版本。 当项目开发过程沿螺旋线按顺时针方向前进时,每一个螺旋周期都包括风险分析(开发的中、后期实际是设计或实现的风格分析)。模型结构如图11所示。螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤: 第一,确定目标、方案和限制条件; 第二,评估方案、标识风险和解决风险; 第三,开发确认产品; 第四,计划下一周期工作。 对大型软件,需要多个原型描述系统的生存期
20、适于螺旋模型开发方法,将瀑布模型与原型化模型结合起来,并加入风险分析讨论。 图11. 螺旋模型结构 螺旋模型是由上面四个部分组成的迭代模型。螺旋模型的每一周期都包括需求定义、风险分析、工程实现和评审四个阶段。开发过程每迭代一次,螺旋线就增加一周, 喷泉模型该模型表明软件开发活动之间没有明显的间隙,用于支持面向对象开发过程。由于对象概念的引入,使分析、设计、实现之间的表达没有明显间隙。并且,这一表达自然地支持复用 (二)智能模型 智能模型(intelligent model)也称为基于知识的软件开发模型,是知识工程与软件工程相
21、结合的软件开发模型。如图12所示。 (三)喷泉模型 该模型是由B.H.Sollers和J.M.Edwards于1990年提出的一种新的开发模型。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,喷泉模型使开发过程具有迭代性和无间隙性。其模型结构如图13所示。喷泉模型特点如下: 1. 开发过程有分析、系统设计、软件设计和实现4个阶段。 2.各阶段相互重叠,它反映了软件过程并行性的特点。 3.以分析为基础,资源消耗成塔型。 4.反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗。 5.强调增量开发,整个过程是一个迭代的逐步提炼的过程。
22、 图12. 智能模型结构 图13. 喷泉模型结构 三、本次课小结(10分钟) 本次课主要讨论了螺旋模型演化模型的结构,开发步骤,开发方法。对比这几种开发模型的特点和使用的开发环境。 本章介绍软件生存周期、软件(开发)过程、软件开发过程模型等基本概念,概述软件过程从问题定义到退役的阶段划分和各个阶段的任务,着重讨论瀑布模型、原型模型、增量模型、螺旋模型、智能模型、喷泉模型。 软件工程是建立在以质量焦点为基础,分过程、方法和工具三个层次的一门层次化技术。软件工程的基础层是软件(开发)过程。软件过程是软件(产品)生产活动的一个框架,可以分解成一系列有序的开发阶段。 四、布置作业、课外思考题,安排预习(5分钟)






