软件工程第1章软件工程学概述本章学习目标掌握几个基本概念:软件与软件工程软件生存周期软件开发模型了解软件开发的几个模型(瀑布型、增量型、螺线型、xp)观念之一:拥有一套讲述如何开发软件的书籍,书中充满了标准与示例,可以解决软件开发中遇到的任何问题。观念之二:拥有最好的开发工具、最好的计算机,一定能做出优秀的软件。观念之三:如果落后于计划,可以增加更多的程序员来解决。观念之四:不管三七二十一先把软件做了再说,反正软件是灵活的,随时可以修改。课堂讨论本章内容1.1、软件的定义1.2、软件危机1.3、软件工程1.4、软件生存期1.5、软件过程软件已成为新的驱动力软件:新的驱动力Intheearly1980s,afrontpagestoryinBusinessWeekmagazineBanking&FinanceGovernmentInsuranceManufacturingMedia&PublishingRetailTravelUtilities1.1、软件的定义软件的角色软件在社会上扮演了双重角色它本身是一种产品将计算机硬件的计算能力发挥出来同时,它也是一种传递产品的工具软件传递了我们这个时代最重要的产品:信息1.1、软件的定义什么是软件-1软件是计算机系统中与硬件相互依存的另一部分,是指挥控制计算机系统工作的神经思维中枢。它是包括程序,数据及其相关文档的完整集合(从计算机角度看)。如果将硬件比作人的身体,那么软件就相当于人的。神经中枢和知识才能1.1、软件的定义什么是软件-2软件的简要定义:软件=程序+数据+文档+规则1.1、软件的定义程序:是计算机需要遵照执行的一系列指令,它作为一种具有逻辑结构的信息,精确而完整地描述计算任务中的处理对象和处理规则。文档:开发、使用和维护程序所需要的图文资料。数据:向一个程序提供的输入。规则:通常是在文档中说明并在程序中实现的。程序怎样定义(1).面向过程的程序==算法+数据结构。(2).面向对象的程序==(3).面向构件的程序==什么是程序对象+消息。构件+构架。1.1、软件的定义要纠正软件就是程序,开发软件就是编写程序的错误观念。RogerS.Pressman说:“越早开始写代码的人,就是越迟完成代码的人”。对软件的认识开发软件就是编写程序?程序、软件与软件产品:独唱—小合唱—合唱—万人大合唱|||简单程序较复杂程序软件1.1、软件的定义逻辑实体软件的特点-1物理实体1.1、软件的定义-------------------------------软件的特点-2制造是开发的,而不是制造的需求………………….……………………….-----------------------------------------软件质量取决于开发人员的个人技能和创造能力1.1、软件的定义软件的特点-3具有柔性设计如果需要修改,首先修改设计对于大多数工程产品而言…1.1、软件的定义软件的特点-4具有柔性如果需要修改,可以修改产品本身,而不需要修改设计对于软件而言…设计---------------------------------------------------------------需要修改..................1.1、软件的定义软件的特点-5不磨损对于机械产品而言…•机械部件用了会磨损•可以用备件替代1.1、软件的定义软件的特点-6不磨损对于软件而言…---------------------------------------------------------------..................•软件用后不磨损•随着时间的推移,应用程序的某些部分可能会变得不再相关(例如,需求改变时),而需要修改•但是,没有备件的概念需要修改1.1、软件的定义故障率时间生命初期磨损后硬件的故障率曲线修改由于副作用造成故障率的提高实际曲线原来的软件已经面目全非了!软件故障率的理想曲线硬件和软件故障率曲线1.1、软件的定义硬件和软件故障率曲线的比较软件不会用坏(wearout).软件会退化(deteriorate)!1.1、软件的定义要求软件产品不允许误差软件产品的高质量取决于好的设计(Highqualityisachievedthrough)依赖于人(Dependonpeople)需要对产品进行构造(Requiretheconstructionofa“product”)软件的特点-71.1、软件的定义软件的分类-1按软件的功能进行划分:系统软件支撑软件应用软件1.1、软件的定义按照软件服务对象的范围划分定制软件—由客户委托开发的软件。通用软件—由软件开发机构开发,提供给市场的。软件的分类-21.1、软件的定义软件生产经历了三个大阶段:程序设计时代(46年-56年)程序系统时代(56年-68年)软件工程时代(68年-90年代)第四代(90年代以后)p3软件开发经历的阶段1.1、软件的定义软件工程“软件作坊”个体化的软件环境上世纪60年代中期上世纪70年代上世纪80年代面向对象软件开发面向对象技术的应用改变了软件界的开发方式。计算机应用领域越来越广,系统规模越来越大,逻辑越来越复杂,而且功能上需要不断更改和扩充。软件开发需要多个开发者一起开发,开发人员按各自的爱好和习惯进行工作,没有统一的标准可以遵循,以手工艺的方式形成“软件作坊”来进行。1968年,北大西洋公约组织的计算机科学家,在联邦德国召开国际会议,讨论软件危机问题。正式提出“软件工程”这个名词──新兴工程学诞生了。用“工程化”的思想作指导,可以大大减少软件开发成本并提高软件开发质量,“工程化”为人们开辟了新的道路,“软件工程学”蓬勃发展起来。程序设计时代(46年-56年)程序系统时代(56年-68年)软件工程时代(68年以后)软件规模小,编写者和使用者往往是同一个人,除程序清单外,无其它文档资料。软件开发经历的阶段1.1、软件的定义时间特点程序设计50—60年代程序系统60—70年代软件工程70年代-80年代第四阶段90年代至今软件所指程序程序及说明书程序、文档、数据软件工程定义主要程序设计语言汇编及机器语言高级语言软件语言软件语言及辅助工具软件工作范围程序编写包括设计和测试软件生命周期软件生命周期需求者程序设计者本人少数用户市场用户市场用户开发软件的组织个人开发小组开发小组及大中型软件开发机构开发小组及大中型软件开发机构软件规模小型中小型大中小型大中小型决定质量的因素个人程序技术小组技术水平管理水平管理水平、CMM开发技术和手段子程序程序库结构化程序设计数据库、开发工具、开发环境、工程化开发方法、标准和规范、网络及分布式开发、面向对象技术、嵌入式技术Web应用、异构环境下分布式开发、软件复用和构件技术、智能技术应用、信息共享和服务维护责任者程序设计者开发小组专职维护者维护小组硬件特征价格高存储容量小工作可靠性差降价、速度、容量及工作可靠性有明显提高向超高速、大容量、微型化及网络化方向发展微型化、网络计算机软件特征完全不受重视软件技术的发展不能满足需要,出现软件危机开发技术有进步,但未获突破性进展,价高,未完全摆脱软件危机先进的软件开发和管理工具不断出现,软件过程控制及管理软件危机软件工程“软件作坊”个体化的软件环境上世纪60年代中期上世纪70年代上世纪80年代面向对象软件开发软件生产的第二个阶段,硬件生产成本下降、效率提高、性能提高,激发了软件需求;软件复杂性要求提高、生产效率低,与硬件生产进一步拉开距离;软件质量差,难维护,成本急剧增加;软件项目成功率低;上述矛盾的进一步激化,瀑发了软件危机软件开发经历的阶段1.1、软件的定义本章内容1.1、软件的定义1.2、软件危机1.3、软件工程1.4、软件生存期1.5、软件过程软件危机“软件危机”(Softwarecrisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力财力,而在开发过程中就夭折。Crisis!1.2、软件危机软件危机的主要表现1.软件预算经常突破,完成时间一拖再拖2.用户对“已完成的”软件不满意的现象经常发生3.软件不可维护4.软件产品的质量靠不住5.软件没有适当的文档资料6.软件的生产率低7.软件的可重用性差1.2、软件危机软件危机的表现概括起来:“软件危机”主要表现在两个方面:(1)软件产品质量低劣,甚至开发过程就夭折。(2)软件生产率低,不能满足需要。1.2、软件危机1.软件预算经常突破,完成时间一拖再拖[案例1]:以丹佛新国际机场为例该机场规模是曼哈顿机场的两倍,宽为希思机场的10倍,可以全天侯同时起降三架喷气式客机;投资1.93亿美元建立了一个地下行李传送系统,总长21英里,有4,000台遥控车,可按不同线路在20家不同航空公司柜台、登机门和行李领取处之间发送和传递行李;支持该系统的是5,000个电子眼、400台无线电接受机、56台条形码扫描仪和100台计算机。按原定计划要在1993年万圣节前启用,但一直到1994年6月,该系统还无法正常运行。据研究结果统计:只有15%的项目是按计划完成的。。软件危机案例1.2、软件危机1.软件预算经常突破,完成时间一拖再拖[案例2]:,20世纪80年代初,美国国内税收服务处(IRS)让Sperry公司开发一套联邦税收表格自动处理系统。结果是:系统被证明不适合当前的工作量,花费几乎是预算的两倍,必须立即更换(华盛顿邮报的报道)。到1985年,还需要再追加9千万美元来改进Sperry公司最初价值1.03亿美元的设备。另外,因为出现的问题阻碍了IRS按时返还纳税者的税款,IRS还被迫偿还4.02亿美元的利息以及2.23千万美元的工资给加班职员。[原因]:软件复杂度高,开发周期长。又缺乏开发的经验和数据的积累,导致盲目制定计划,执行起来和实际情况有很大差距,另外,软件开发过程出现了一些难以预料的问题,导致项目一拖再拖,经费增加。软件危机案例1.2、软件危机2.用户对“已完成的”软件不满意的现象经常发生[案例]:1984年,经历18个月的开发,一个耗资2亿美元的系统交付给威斯康星州的一家健康保险公司,但该系统不能满足用户的正常工作,只好追加6千万美金,又花了3年才解决问题。[原因]:软件开发人员不用户业务的专家,用户不懂计算机软件技术,因此软件人员按照自己理解开发出的软件往往与用户要求有差距。另外,用户在初期提出的需求不充分,之后又没有和开发人员好好交流,也是导致用户不满意的原因。软件危机案例1.2、软件危机3.软件产品的质量靠不住[案例]:例如,一次美国在肯尼迪角发射一枚阿脱拉斯火箭,预定将用这种火箭运载飞往金星的宇宙飞船。火箭飞离地面几十英里高空开始翻转,地面控制中心被迫下令自爆炸毁。后经检查发现是飞行计划程序中漏掉一个连字符。就是这样一个连字符的疏漏造成这枚价值1850万美元的火箭实验失败。软件危机案例1.2、软件危机3.软件产品的质量靠不住[案例]:ARIANE5火箭1996年6月,耗资70亿美元,发射37秒后爆炸。发射失败的原因在于软件的错误;程序中试图将64位浮点数转换成16位整数时产生溢出。[原因]:软件测试不充分是其中的原因。但对这些投资巨大测试充分的软件也难保不出质量问题。因为软件的质量和可靠性的评估非常困难。软件危机案例1.2、软件危机4、软件不可维护[原因]:1、设计结构不适合软件功能的增加和修改2、软件开发过程中起着重要作用的是开发者的逻辑思维过程。若干年后由其他人来修改,必须要理解开发者的思想,若没有相对应的文档来描述这些思想,读别人的程序相当的困难。软件危机案例1.2、软件危机5.软件没有适当的文档资料[原因]:软件不可能一个版本就成功,而是经历反复修改,其中的文档很难不每次的修改保持一致,错误的文档就像错误的地图一样更危险。软件危