第1章 软件工程概述_第1页
第1章 软件工程概述_第2页
第1章 软件工程概述_第3页
第1章 软件工程概述_第4页
第1章 软件工程概述_第5页
已阅读5页,还剩139页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1软件工程

SoftwareEngineering

主讲:金兰2课程目的掌握软件工程的基本概念、原理和技术。掌握系统分析、系统设计、测试与维护的理论与方法。了解并掌握部分软件工程工具的使用。实践软件系统开发的全过程,构建一个软件系统。转变对软件的认识:程序

系统转变思维模式:程序员

系统分析员/系统设计员工程化训练规范、准则、项目管理3课程内容软件工程导论:包括软件与软件工程的概念、传统的开发方法、面向对象的开发方法、实现与测试、质量与质量保证、软件计划与管理、软件开发工具与环境等内容。软件建模技术:面向对象的软件建模与构造的基本概念、原理和方法。软件项目组织与管理:软件项目管理领域中所含的计划方法、活动排序与跟踪、质量保证、配置管理、风险防御、质量度量方法、软件人员的管理方法等内容。4课程内容第1章软件工程概述第2章软件开发方法简介第3-5章

结构化分析、设计和实现第6-8章面向对象分析、设计、实现及测试第9章运行和维护第10章软件工程标准化和软件质量第11章软件工程项目管理第12章结构化开发实例第13章面向对象软件开发实例5课程安排考试形式:考试平时(到勤+上机+作业)30%考试成绩70%6教材及参考资料教材:《软件工程实践教程(第2版)》刘冰机械工业出版社参考资料:《软件工程导论(第五版)》张海藩清华大学出版社《软件工程概论》郑人杰,马素霞,殷人昆机械工业出版社殷人昆.实用软件工程(第三版).清华大学出版社.2010.(美)RogerS.Pressman.(郑人杰,马素霞译).软件工程:实践者的研究方法(原书第7版),北京:机械工业出版社,2011.(美)ShariLawrencePfleeger,(加)JoanneM.Atlee(杨卫东译).软件工程(第3版).北京:人民邮电出版社,2007.郑人杰,马素霞,殷人昆.软件工程概论,机械工业出版社,2010.齐治昌.软件工程(第二版).北京:高等教育出版社,2004.《UML和OOAD快速入门》邱郁惠机械工业出版社7网络资源//

8第1章软件工程概述软件软件过程的概念软件过程模型Rational统一开发过程实例:软件外包开发过程9软件软件的特点软件的发展软件危机软件工程的概念软件工程的三要素软件工程方法软件工程的发展历史10软件的定义软件(software)是计算机程序、程序使用的数据(数据结构)以及相关文档的集合。(1)可以在计算机上运行的程序(program)。(2)运行程序需要的数据(data)。(3)软件开发、维护、使用需要的各种文档(document)。11软件的定义文档(Document)指用自然语言或者形式化语言所编写的文字资料和图表,用来描述程序的内容、组成、设计、功能规格、开发情况、测试结果及使用方法。文档有规定的格式和标准。国家标准GB/T8567—2006《计算机软件文档编制规范》12软件的特点(1)软件产品的生产主要是脑力劳动,还未完全摆脱手工开发方式,大部分产品是“定做”的。(2)软件是一种逻辑产品,是脑力劳动的结晶,看不见摸不着的,因而具有无形性。(3)软件产品不会用坏,不存在磨损、消耗问题。(4)软件产品的成本主要体现在软件的开发和研制上,软件开发研制完成后,通过复制就产生了大量软件产品。(5)软件费用不断增加,软件成本相当昂贵。13硬件和软件故障率曲线14软件的分类按软件的功能进行划分:系统软件操作系统数据库管理系统(DBMS)设备驱动程序支撑软件文本编辑程序支持需求分析、设计、实现、测试和支持管理的软件应用软件工程与科学计算软件计算机辅助设计/制造软件智能产品嵌入软件医疗、制药软件办公自动化软件计算机辅助教学软件15软件的分类

按软件的规模进行分类:分类参加人员开发期限程序规模/源程序行数特征微型11~4周500以下不必有严格的设计和测试文档小型1~21~6月1k~2k通常没有与其他程序的接口中型3~51~2年5k~50k需要有严格的文档和设计规范大型5~202~3年50k~100k需要按照软件工程方法进行管理超大型100~10004~5年1M(=1000k)必须按照软件工程开发,有严格的质量管理措施巨型2000~50005~10年1M~10M同上16例:•Windows95有1000万行代码

•Windows2000有5000万行代码,3000多个工程师,几百个小团队。Exchange2000和Windows2000开发人员结构Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人17软件的分类根据软件的服务对象进行分类:(1)定制软件(2)产品软件几家领军软件企业也建立了一些软件组件复用的技术标准,例如,OMG的CORBA、Microsoft的COM和DCOM、SUN的EJB和J2EE,但是目前还做不到大范围使用软件替代品。大多数软件仍然是为特定任务或用户定制的。18软件的发展程序设计阶段—40至50年代在这一时期,软件的生产主要是个体手工劳动的生产方式。使用机器语言、汇编语言作为工具;开发程序的方法上主要是追求编程技巧和程序运行效率。这个时期软件特征是只有程序、程序设计概念,不重视程序设计方法。程序系统阶段—50至60年代

这一时期主要围绕软件项目,开展了开发模型、支持工具以及开发方法的研究。如:瀑布模型、结构化方法(自顶向下)、结构化语言(Pascal、C、Ada语言)、管理方法(费用估算、文档复审)、支持工具(计划、配置管理工具等)软件工程阶段—70年代以后

开展了有关软件生产技术、软件复用技术、软件生产管理的研究和实践;提出具有广泛应用前景的面向对象方法和相关的语言(Smalltalk、C++);近年来,软件工程的研究从过程转向产品更加注重程序的开发范型和软件生产。高智能、自动化CASE成为软件工程技术研究的热点

阶段描述内容程序设计程序系统软件工程软件所指内容程序程序及说明书程序、文档及数据主要程序设计语言汇编及机器语言高级语言软件语言(需求定义语言、软件功能语言、软件设计语言、程序设计语言

)软件工作范围程序编写包括设计和测试包括整个软件生存周期需求者程序设计者本人少数用户市场用户开发软件的组织个人开发小组开发小组及大、中型软件开发机构软件规模小型中、小型大、中、小型决定质量的因素个人程序设计技术小组技术水平管理水平开发技术和手段子程序、程序库结构化程序设计数据库、开发工具、工程化开发方法、标准和规范、网络和分布式开发、面向对象技术、软件过程与过程改进维护责任者程序设计者开发小组专职维护人员硬件特征价格高、存储容量小、工作可靠性差降价,速度、存储容量及工作可靠性有明显提高向超高速、大容量、微型化及网络化方向发展软件特征完全不受重视软件技术的发展不能满足需求,出现软件危机开发技术有进步,但未获突破性进展,价格高,未完全摆脱软件危机20软件技术的总体发展趋势平台网络化 方法对象化 系统构件化

产品家族化 开发工程化 过程规范化 生产规模化 竞争国际化21国际软件产业现状其中,各国在全球软件总额中所占的份额:中国1.2%爱尔兰1.5%44.63%印度1.48%韩国1.39%日本9.6%美国40.2%其它国家22软件危机软件危机的概念软件危机的形成软件危机的具体表现软件危机的根源消除软件危机的途径23软件危机的概念软件危机在计算机软件的开发和维护过程中所遇到的一系列严重问题。几乎所有的软件都不同程度地存在问题。24软件危机的概念从20世纪60年代开始,软件界经常遭受软件危机的袭扰。以IBM公司的OS/360操作系统为例。它共有4000多个模块、100万行指令,共投入5000人年,耗资5亿美元,但在交付使用的系统中仍找出2000个以上的错误。软件开发所需的高成本与软件产品的低质量之间存在尖锐的矛盾。这种现象被称为“软件危机”(SoftwareCrisis)。25软件危机的形成1.硬件生产率大幅提高

如今,计算机硬件产品已系列化、自动化、标准化,"即插即用"。

生产效率几百万倍的提高。生产能力过剩。

26软件危机的形成2.软件生产随规模增大复杂度增大以美国宇航局的软件系统为例:

1963年水星计划系统200万条指令

1967年双子星座计划系统400万条指令

1973年阿波罗计划系统1000万条指令

1979年哥伦比亚航天飞机系统4000万条指令

假设1个人一年生产一万条有效指令,那么是否4000人生产一年,或400人生产10年就能完成任务呢?答案是否定的。一万条指令的复杂度决不仅仅是100条指令复杂度的100倍。

27软件危机的形成3.软件生产率很低软件的生产却还沿用"手工作坊"的生产方式。生产效率仅提高了几倍。生产能力极其低下。

28软件危机的形成4.硬、软件供需失衡

社会大量需求,生产成本高,生产过程控制复杂,生产效率低等等因素构成软件生产的恶性循环。

由此产生"软件危机"。

29软件危机的形成5.矛盾引发"软件危机"

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

为了研究、解决软件危机,诞生了一门新兴学科--软件工程学。把软件作为工程对象,从技术措施和组织管理两个方面来研究、解决软件危机。

30软件危机的具体表现(1)软件开发进度难以预测拖延工期几个月甚至几年的现象并不罕见,这种现象降低了软件开发组织的信誉。案例31以丹佛新国际机场为例:

该机场规模是曼哈顿机场的两倍,宽为希思机场的10倍,可以全天侯同时起降三架喷气式客机;投资1.93亿美元建立了一个地下行李传送系统,总长21英里,有4,000台遥控车,可按不同线路在20家不同的航空公司柜台、登机门和行李领取处之间发送和传递行李;支持该系统的是5,000个电子眼、400台无线电接受机、56台条形码扫描仪和100台计算机。按原定计划要在1993年万圣节前启用,但一直到1994年6月,机场的计划者还无法预测行李系统何时能达到可使机场开放的稳定程度。据研究结果统计:只有15%的项目是按计划完成的。32软件危机的具体表现(2)软件开发成本难以控制投资一再追加,令人难以置信。往往是实际成本比预算成本高出一个数量级。案例33例如,20世纪80年代初,美国国内税收服务处(IRS)让Sperry公司开发一套联邦税收表格自动处理系统。结果是:系统被证明不适合当前的工作量,花费几乎是预算的两倍,必须立即更换(华盛顿邮报的报道)。到1985年,还需要再追加9千万美元来改进Sperry公司最初价值1.03亿美元的设备。另外,因为出现的问题阻碍了IRS按时返还纳税者的税款,IRS还被迫偿还4.02亿美元的利息以及2.23千万美元的工资给加班职员。据研究统计结果表明:仅有10%的项目是按费用计划完成的。34软件危机的具体表现(3)产品功能难以满足用户需求开发人员和用户之间沟通难、沟通不彻底。在双方互不充分了解的情况下,就"闭门造车"的开发方式必然导致最终的产品不符合用户的实际需要。35软件危机的具体表现(4)软件产品质量无法保证软件是逻辑产品,因而造成质量控制困难。软件产品检测错误困难。案例

36例如,一次美国在肯尼迪角发射一枚阿脱拉斯火箭,预定将用这种火箭运载飞往金星的宇宙飞船。火箭飞离地面几十英里高空开始翻转,地面控制中心被迫下令自爆炸毁。后经检查发现是飞行计划程序中漏掉一个连字符。就是这样一个连字符的疏漏造成这枚价值1850万美元的火箭实验失败。据统计数字表明:在大型系统中,约3/4的系统有问题。37软件危机的具体表现(5)软件产品难以维护

非开发者本人,很难及时检测、排除系统故障。在原系统中增加新的功能,产生“波动效应”,增加系统中的错误。38软件危机的具体表现(6)软件缺少适当的文档资料

软件的文档资料是:开发者和用户的之间权利和义务的合同书。系统管理者、总体设计者向开发人员下达的任务书。系统维护人员的技术指导手册。用户的操作说明书。

39软件危机的具体表现(7)软件开发供不应求

1960~1980年期间,计算机硬件的生产由于采用计算机辅助设计、自动生产线等先进工具,使硬件生产率提高了100万倍,而软件生产率只提高了2倍,相差十分悬殊。软件产品“供不应求”的现象致使不能充分利用现代计算机硬件提供的巨大潜力。40软件危机的根源

危机根源软件本身特点逻辑部件规模庞大:(Windows2000:5000万行代码)开发方法的缺陷忽视需求分析软件开发=程序编写轻视软件维护41消除软件危机的途径解决途径组织管理工程项目管理方法技术措施软件开发技术与方法软件工具42软件工程软件工程的定义B.W.Boehm软件工程的7条基本原理软件工程方法学43盖房子与构建系统房子建造过程:确定和分析需求提出并文档化房子的总体设计提出房子的详细规格说明识别并设计房子的组成部分构建房子的每一个组成部分测试房子的每一个组成部分把房子的各个组成部分集成在一起,在住户搬进来之前做最后的修改。由房子的住户持续进行维护。44盖房子与构建系统构建一个系统:需求分析和定义系统设计程序设计编写程序(程序实现)单元测试集成测试系统测试系统交付维护45软件工程的定义软件工程专家Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。强调的是程序和文档。IEEE1983:软件工程是开发、运行、维护和修复软件的系统方法。强调的是系统方法而不是一种个人的“技艺”。46软件工程的定义FritzBauer:软件工程是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用的完善的工程化原则。强调的是经济性和工程化原则。IEEE1993:软件工程是:

1.把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;

2.研究1中提到的途径。47软件工程的定义《计算机科学技术百科全书》中的定义:软件工程是应用计算机科学、数学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。计算机科学、数学用于构建模型与算法;工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡;管理科学用于计划、资源、质量、成本等管理。48软件工程的交叉学科计算机科学和数学计算机科学和数学用于构造模型与算法工程科学用于制定规范、设计范型、评估成本及确定权衡管理科学管理科学用于计划、资源、质量和成本的管理49B.W.Boehm软件工程的7条基本原理著名软件工程专家B.W.Boehm于1983年发表的一篇论文中提出了软件工程的七条基本原理。这七条原理是确保软件产品质量和开发效率的最小准则集合。50B.W.Boehm软件工程的7条基本原理1.用分阶段的生命周期计划严格管理据统计发现:不成功软件项目中半数是因计划不周造成的。在软件的整个生命周期中应该制定并严格执行六类计划:项目概要、项目进度表、项目控制、产品控制、验证及运行维护计划。51B.W.Boehm软件工程的7条基本原理2.坚持进行阶段评审大部分错误是在编码之前造成的。根据Boehm统计,设计错误占63%,编码错误占37%。错误发现与改正得越晚,所付出的代价也越高。52B.W.Boehm软件工程的7条基本原理3.实行严格的产品控制在软件开发过程中不应随意改变需求。一切有关修改软件的建议都必须按照严格的规程进行评审,获准后才能实施修改。53小笑话—软件需求的改动是必然MarshallP.Cline,GregA.Lomow,C++FAQs,Addison-Wesley,1995记载:

没有一个软件的需求改动少于三次。唯一只改动需求两次的客户是个死人。这个可怜的家伙还是在运送第三次需求的路上被车子撞死的。54B.W.Boehm软件工程的7条基本原理4.采用现代程序设计技术以前的结构化程序设计技术,如今的面向对象程序设计技术都被实践证明是各个不同历史阶段的优秀程序设计技术和方法。采用先进的技术既可以提高软件开发的效率,又可以提高软件维护的效率。55B.W.Boehm软件工程的7条基本原理5.结果应能清楚地审查软件产品是看不见、摸不着的逻辑产品,软件开发人员的工作进展情况可见性差。为了提高开发过程的可见性,应根据软件开发项目中的目标完成期限,规定开发组织的责任和产品标准,使得到的结果能够清楚的审查。56B.W.Boehm软件工程的7条基本原理6.开发小组的人员应该少而精素质高的人员的开发效率比素质低的人员的开发效率可能高几倍至几十倍,而错误则明显得少。人数N增多,通信路径为N(N-1)/2条,通信开销急剧增加,管理难度也增加。57B.W.Boehm软件工程的7条基本原理7.承认不断改进软件工程实践的必要性要积极主动地采纳新的软件技术,要不断总结经验。B.W.Boehm指出:前六条基本原理,能够实现软件的工程化生产;第七条原理,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。58软件工程方法学通常把在软件生命周期全过程中使用的一整套技术的集合称为:方法学(methodology),也称为:范型(paradigm)。

59Softwareengineeringlayers工具方法过程质量焦点软件工程方法学包括三个要素:工具是为软件工程方法提供自动的或半自动的软件支撑环境;方法回答“如何做”的问题;过程规定了完成各项任务的工作步骤。60软件工程方法学目前使用得最广泛的软件工程方法学,分别是:传统方法学面向对象方法学61传统方法学传统方法学也称为:生命周期方法学、结构化范型。结构化方法的组成:结构化分析方法SA结构化设计方法SD结构化程序设计方法SP结构化测试ST该方法的核心是基于功能分解的模块化层次结构方法。62传统方法学的缺点过分强调了分阶段实施,使得开发过程各个阶段之间存在严重的顺序性和依赖性;很难将一个复杂的问题化简、分解;设计方法存在很大的主观随意性;基于功能分解的系统结构难于修改和扩充;思维成果的可重用性很差;数据和对数据的处理是分离的;63面向对象方法学面向对象方法的四个要点:(1)把对象(Object)作为融合了数据及在数据上的操作行为的统一的软件构件。(2)把所有对象都划分成类(Class)。(3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。(4)对象彼此之间仅能通过发送消息互相联系。64面向对象方法学面向对象方法学的组成:面向对象分析方法OOA面向对象设计方法OOD面向对象编程方法OOP面向对象测试方法OOT面向对象的软件维护65面向对象分析(OOA)OOA模型应包括:把具有相同属性和相同服务的对象归结为类;用一般-特殊结构描述一般类与特殊类之间的关系(继承关系);用整体-部分结构描述实体间的组成关系;用实例连接和消息连接表示实体之间的静态联系和动态联系。66面向对象设计(OOD)OOD包括两方面的工作: ①把OOA模型直接搬到OOD中来; ②补充一些人机界面、数据存储、任务管理等内容。从OOA->OOD只需进行局部的修改或调整,并增加几个与实现有关的独立部分即可。自然地实现无缝衔接,降低了工作量和出错率。67面向对象编程(OOP)在“OOA→OOD→OOP”的设计模式中,OOP的分工相对简单多了;OOP的工作就是用一种OO程序设计语言把OOD模型中的每个元素描述出来。68面向对象测试(OOT)OOT的主要特点是:测试以类为基本单位进行。测试针对类定义范围内的属性和服务、以及有限的对外接口所涉及到的部分。若父类已被测试或父类是可重用构件,则对子类的测试重点只是那些新定义的属性和服务。69面向对象的软件维护OO方法为改进软件维护提供了有效的途径。主要表现在:因为OO方法在各个阶段表示的一致性,使得实现的程序与问题域是一致的,便于理解和阅读,也为纠错和功能扩充提供了便利。在OO方法中,由于对象的封装性,使一个对象的修改对其它对象的影响很小,从而可以减少错误传播所产生的“波动效应”,使得用OO方法开发的软件易维护。70OO方法的主要优点⑴与人类习惯的思维方式一致⑵稳定性好传统方法以“过程为中心”OO方法以“对象为中心”⑶可重用性好⑷可维护性好软件过程概念软件生命周期软件开发过程定义7172软件生命周期软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为软件的生命周期。软件生命周期组成:软件定义软件开发软件维护73软件生命周期的工作流程图

74软件生命周期(1)软件定义时期确定软件开发必须完成的任务;论证软件的可行性;确定用户需求的详细功能和性能。这个时期可以划分为三个阶段:问题定义可行性研究需求分析75软件生命周期(2)软件开发时期设计和实现软件的定义。软件开发时期包括四个阶段:总体设计详细设计编码及单元测试综合测试76软件生命周期(3)软件维护时期:软件维护是对投入使用的软件的修改,实际上是对软件的一次重新定义和开发过程。77软件生命周期软件生命周期方法学把软件开发人员分为三个层次:系统分析员软件工程师程序员系统分析员在软件定义时期起主要作用;软件工程师和程序员是软件开发和维护时期的核心力量。78涉及整个软件生命周期扩展到软件工作的范围只考虑编写程序79软件生命周期划分为:1.问题定义问题是什么?2.可行性研究有可行解吗?3.需求分析必须做什么?4.概要设计如何解?5.详细设计具体如何解?6.编码与单元测试编码+测试计划、方案和结果7.综合测试测试计划、方案和结果8.软件维护持久地满足用户需要80软件生命周期各个阶段应该完成的基本任务1.问题定义“要解决的问题是什么”。

形成工程目标和规模的书面报告。81软件生命周期各个阶段应该完成的基本任务2.可行性研究“上一个阶段所确定的问题是否有行得通的解决办法”。从技术、经济和社会等方面研究并论证软件系统的可行性。823.需求分析“目标系统必须做什么”。编制软件需求规格说明书(specification)

。软件生命周期各个阶段应该完成的基本任务83软件生命周期各个阶段应该完成的基本任务4.总体设计“怎样实现目标系统?”设计程序的体系结构;编写概要设计说明书。84软件生命周期各个阶段应该完成的基本任务5.详细设计“应该怎样具体地实现这个系统”

详细设计有时也称模块设计,包括模块的算法和数据结构。编写详细设计说明书85软件生命周期各个阶段应该完成的基本任务6.编码和单元测试编码: 将详细设计转化为程序代码,提供源程序清单

。单元测试: 对模块程序进行测试,验证模块功能及接口与详细设计文档的一致性。867.综合测试集成测试将单元测试的模块装配进行集成测试。验收测试由用户对目标系统按照规格说明书进行验收。软件生命周期各个阶段应该完成的基本任务87软件生命周期各个阶段应该完成的基本任务8.软件维护通过各种必要的维护活动使系统持久地满足用户的需要。通常有四类维护活动:改正性维护:诊断和改正在使用过程中发现的软件错误;适应性维护:修改软件以适应环境的变化。完善性维护:根据用户的要求改进或扩充软件使它更完善;预防性维护:修改软件为将来的维护活动预先做准备。

88软件生存周期(LifeCycle)问题定义问题是什么?关于规模和目标的报告书可行性研究有可行解吗?高层逻辑模型:系统流程图+DFD+数据字典+成本/效益分析需求分析必须做什么?逻辑模型:DFD+数据字典+简要的算法描述概要设计如何解层次图详细设计具体如何解数据结构和算法盒图编码与单元测试正确的程序模块Code+测试计划、方案和结果综合测试符合要求的软件测试计划、方案和结果软件维护持久地满足用户需要完整准确的维护记录适用于大型复杂项目软件开发过程软件开发过程:软件工程人员为了获得软件产品,在软件工具支持下实施的一系列软件工程活动。软件开发过程应该明确定义以下元素:

(1)过程中所执行的活动及其顺序关系。

(2)每一个活动的内容和步骤。

(3)团队人员的工作和职责。软件开发过程一共包括七个过程,即获取过程、供应过程、开发过程、操作过程、维护过程、管理过程、支持过程。90也称为软件生命周期模型。用软件生命周期模型来描述软件过程。软件生命周期模型:瀑布模型快速原型模型演化软件过程模型:增量模型、螺旋模型、基于构件的开发模型喷泉模型形式化方法模型Rational统一过程敏捷过程与极限编程软件过程模型91瀑布模型(WaterfallModel)瀑布模型(WaterfallModel) 线性顺序模型(TheLinearSequentialModel)92瀑布模型瀑布模型93瀑布模型的特点(1)阶段间具有顺序性和依赖性。(2)文档驱动性 要求每个阶段必须完成规定的文档并通过评审。(3)推迟实现的观点 清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现。(4)质量保证的观点 每个阶段都必须完成规定的文档并进行评审。94瀑布模型的缺点瀑布模型的缺点是:(1)该模型缺乏灵活性。凡后一阶段出现的问题需要通过前一阶段的重新确认来解决,由此要付出高昂的代价。(2)瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出来的软件产品不能真正满足用户的需要。(3)软件开发初期就要给出软件系统的全部需求,开发周期长,承担的风险比较大。95快速原型模型快速原型模型,也称原型模型。快速原型模型96快速原型模型的处理过程97快速原型的特点:(1)原型驱动性(2)过程的交互性和迭代性98快速原型模型的优点(1)原型模型法可以得到良好的需求定义,开发者和用户得到充分的协作。(2)原型模型系统有利于用户培训和开发同步。(3)原型模型给用户更改最初设想的机会,使最终产品更为合理。(4)原型模型可以低风险开发变化较大的计算机系统。(5)原型模型使系统更易维护、对用户更友好。(6)原型模型使总的开发费用降低,开发时间缩短。99快速原型模型的缺点原型是“用口香糖和打包绳”拼凑起来的;并没有考虑软件的总体质量和长期的可维护性。建立原型仅是为了定义需求,之后就该抛弃。100快速原型模型适合采用原型模型的条件:(1)首先得有快速建立系统原型模型的软件工具与环境。(2)原型模型适合于那些不能预先确切定义需求的软件开发。(3)原型模型适合于那些项目组成员(包括分析员、设计员、程序员和用户等)不能很好协同配合、交流或通信上存在困难的情况。

101演化软件过程模型增量模型螺旋模型基于构件的开发模型102增量模型(IncrementalModel)基本思想:开发时分批逐步向用户提交产品,每次提交一个满足用户需求子集的增量构件,直到最后一次得到满足用户全部需求的完整产品为止。103增量模型104增量模型第一个增量往往是核心的产品,即实现了基本的需求。例如,系统的一个重要部分需要使用正在开发的且发布时间尚未确定的新硬件,有可能计划在早期的增量中避免使用该硬件,这样,就可以先发布部分功能给用户,以免过分地延迟系统的问世时间。105增量模型的优点(1)能在较短时间内向用户提交可完成一些有用的工作的产品。(2)逐步增加产品功能使用户有时间学习和适应新产品。106增量模型的困难(1)必须把软件的体系结构设计得便于按这种方式进行扩充。(2)增量模型本身自相矛盾一方面要求开发人员把软件看作一个整体;另一方面又要求开发人员把软件看作构件序列。107螺旋模型(SpiralModel)螺旋模型的六个步骤:(1)用户通信:建立开发人员和用户之间的有效通信。(2)计划:定义资源、进度及其他相关项目信息。(3)风险分析:评估技术及管理的风险。(4)工程:建立应用的一个或多个表示。(5)建立及发布:建立、测试、安装和提供用户支持(如文档及培训)。(6)用户评估:基于在工程阶段产生或在安装阶段实现的软件表示的评估,获得用户反馈。一个典型的螺旋模型

108

螺旋模型(SpiralModel)109螺旋模型(SpiralModel)螺旋模型的每个周期都包含4个主要活动:制定计划:确定软件目标,选定实施方案,弄清项目开发限制条件。风险分析:分析可选方案,分析识别风险,研究解决化解风险的办法。实现工程:实施软件产品的开发。用户评价:对当前工作结果进行评价,提出改进产品的建议。螺旋模型适用于开发的大规模软件项目。110螺旋模型的缺点螺旋模型的缺点是:很难正确评估软件开发风险。需要有一个非常有经验的小组来准确地分析和检测风险。不适合新手该模型本身相对比较新,不像瀑布模型那样被广泛应用。基于构件的开发模型基于构件的软件工程(component-basedsoftwareengineering,CBSE)是强调使用可复用的软件“构件”来设计和构造基于计算机的系统的过程。基于构件的开发模型Clements对CBSE给出了如下描述。

CBSE正在改变大型软件系统的开发方式。CBSE体现了FrodBrooks和其他人支持的“购买,而非构造”的思想。就如同早期的子程序将程序员从考虑编程细节中解脱出来一样,CBSE将考虑的重点从编码转移到组装软件系统。考虑的焦点是“集成”,而不再是“实现”。这样做的基础是假定在很多大型软件系统中存在足够多的共性,使得开发可复用的构件来满足这些共性是可行的。基于构件的开发模型当软件团队使用传统的需求获取技术确定了待开发软件的系统需求时,该过程开始。体系结构设计完成后,并不立即进行详细设计任务,而是针对每一系统需求考虑以下问题:(1)现有的商品化构件(commercialoff-the-shelf,COTS)是否能够实现该需求?(2)内部开发的可复用构件是否能够实现该需求?(3)可用构件的接口与待构造系统的体系结构是否相容?基于构件的开发模型基于构件的开发模型如下图。

基于构件的开发模型开发步骤

不考虑构件的开发技术,基于构件的开发模型由以下步骤组成:(1)对于该问题领域的基于构件的可用产品进行研究和评估。(2)考虑构件集成的问题。(3)设计软件架构以容纳这些构件。(4)将构件集成到架构中。(5)进行充分的测试以保证功能正常。基于构件的开发模型典型的构件模型(1)OMG/CORBA。对象管理组织发布了公共对象请求代理体系结构(OMG/CORBA),一个对象请求代理提供了多种服务,使得可复用构件(对象)可以与其他构件通信。(2)MicrosoftCOM/DCOM/.NET。微软公司开发了构件对象模型(COM),此模型提供了构件的规格说明,在Windows操作系统,一个应用系统中可以使用不同厂商生产的构件。(3)SunJavaBean构件。JavaBean构件系统是一个可移植的、平台独立的、使用Java程序设计语言开发的CBSE基础设施。117喷泉模型(WaterFountainModel)基本思想:喷泉模型是典型的面向对象生命周期模型。“喷泉”描述了面向对象软件开发过程的迭代和无缝特性。118喷泉模型喷泉模型的特点:(1)模型规定软件开发过程有5个阶段,即分析、设计、实现、测试与集成。(2)模型从高层返回低层无资源消耗,反映了软件过程迭代的自然特性。(3)以分析为基础,资源消耗呈塔型,在分析阶段消耗的资源最多。(4)各阶段相互重叠反映了软件过程并行性。119喷泉模型(5)模型强调增量开发,整个过程是一个迭代的逐步提炼的过程。(6)模型是对象驱动的过程,对象是所有活动作用的主体和项目管理的基本内容。(7)由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。120形式化方法模型形式化方法使得软件开发人员能够通过采用一个严格的、数学的表示体系来说明、开发和验证基于计算机的系统。顾虑:形式化模型的开发目前还很费时和昂贵;因为很少有软件开发人员具有使用形式化方法所需的背景知识;难以使用该模型作为与对其一无所知的用户进行通信的机制。适用范围:对安全性请求很高的关键软件如果发生软件错误会遭受严重的经济损失的软件121课堂习题1.假设你要开发一个软件,它的功能是把73624.9385这个数开平方,所得到的结果应该精确到小数点后4位。一旦实现并测试完之后,该产品将被抛弃。你打算选用哪种软件生命周期模型?122课堂习题讲解1.答:对这个软件的需求很明确,实现开平方功能的算法也很成熟,因此,既无须通过原型来分析需求也无须用原型来验证设计方案。此外,一旦实现并测试完成之后,该产品被抛弃,因此也无须使用有助于提高软件可维护性的增量模型或螺旋模型来开发该软件。综上所述,为了开发这个简单的软件,使用大多数人所熟悉的瀑布模型就可以了。123课堂习题2.假设你被任命为一家软件公司的项目负责人,你的工作是管理该公司已被广泛应用的字处理软件的新版本开发。由于市场竞争激烈,公司规定了严格的完成期限并且已对外公布。你打算采用哪种软件生命周期模型?为什么?124课堂习题讲解2.对这个项目的一个重要要求是,严格按照已对外公布了的日期完成产品开发工作,因此,选择生命周期模型时应着重考虑哪种模型有助于加快产品开发的进度。使用增量模型开发软件时可以并行完成开发工作,因此能够加快开发进度。这个项目是开发该公司已被广泛应用的字处理软件的新版本,从上述事实至少可以得出3点结论:第一,旧版本相当于一个原型,通过收集用户对旧版本的反映,较容易确定对新版本的需求,没必要再专门建立一个原型系统来分析用户的需求;第二,该公司的软件工程师对字处理软件很熟悉,有开发字处理软件的丰富经验,具有采用增量模型开发新版字处理软件所需要的水平;第三,该软件受到广大用户的喜爱,今后很可能还要开发更新的版本,因此,应该把该软件的体系结构设计成开放式的,以利于今后的改进和扩充。综上所述,采用增量模型来完成这个项目比较恰当。125Rational统一过程

RationalUnifiedProcess(RUP)RUP(RationalUnifiedProcess,Rational统一过程)是由面向对象领域三位专家Booch、Rumbaugh和Jacobson提出的一种完整的软件过程。RUP是一个通用的软件过程框架,通过裁剪和扩充,它可适用于各种不同类型的软件系统、各种不同的应用领域、各种不同的组织和各种不同的项目规模。126RUP&UML由面向对象方法学做出过突出贡献的三位专家Booch、Rumbaugh和Jacobson合作研究设计出统一建模语言UML(UnifiedModelingLanguage),已成为业界统一的建模语言标准。它是一种定义良好、易于表达、功能强大且普遍适应的建模语言。UML是一种建模语言,独立于任何的开发过程,这时需要一个开发过程和方法作为指导。UML和RUP的结合已成为被业界公认的高效的规范化软件开发组合。

127RUPRUP重复一系列周期,每个周期由一个交付给用户的产品结束。每个周期划分为4个阶段。每个阶段围绕着9个核心工作流。RUP软件开发生命周期RUP在统一过程中,有6个核心工作流。

①业务建模工作流。用商业用例为商业过程建立文档。②需求工作流。目标是描述系统应该做什么,确保开发人员构建正确的系统。为此,需明确系统的功能需求和非功能需求(约束)。③分析和设计工作流。其目标是说明如何做。结果是分析模型和设计模型。RUP④实现工作流。用分层的方式组织代码的结构,用构件的形式来实现类,对构件进行单元测试,将构件集成到可执行的系统中。⑤测试工作流。验证对象之间的交互、是否所有的构件都集成了、是否正确实现了所有需求、查错并改正。⑥部署工作流。制作软件的外部版本、软件打包、分发、为用户提供帮助和支持。RUP统一过程有4个阶段,分别是初始阶段、细化阶段、构造阶段和移交阶段。①初始阶段。初始阶段主要关注项目计划和风险评估,其目的是确定是否值得开发目标信息系统。②细化阶段。细化阶段关心定义系统的总体框架,其目标是:细化初始需求(用况)、细化体系结构、监控风险并细化它们的优先级、细化业务案例以及制订项目管理计划。RUP③构造阶段。构造阶段是建立系统,构造信息系统的第1个具有操作质量的版本,以能够交付给客户进行测试的版本结束,有时称为测试版本。④移交阶段。移交阶段包含测试时期,以发布完整的系统而终止,其目标是确保信息系统真正满足客户的需求。RUP&UML相关资料[1]陆永忠,饶璟祥.小型软件项目RUP裁剪模型的研究[J].计算机工程与设计.2007,28(13):3027-3030,3055.[2]王建,冯伟森,李旭伟.基于UML和RUP的中小项目的设计和实现[J].四川大学学报

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论