您好,欢迎访问三七文档
1软件工程主讲教师:付燕yolandaxa@163.com2为什么要学习这门课程为什么要学习这门课程正确理解和认识“软件”的概念及其特点掌握软件工程的原则、方法和思想来系统地开发软件,尤其是复杂、庞大软件的开发了解和接触各种软件开发技术和工具软件工程是软件技术和管理人员必备的课程3如何学习这门课程如何学习这门课程正确地理解,领悟和掌握软件工程方法学发挥主观能动性,多问“为什么”,问题--解培养和他人相互合作进行软件开发,独立解决问题的能力培养通过多种手段获取新知识的能力培养逻辑思维能力,尤其是抽象能力4课程要求1.自觉预习、遵守纪律、认真听课、及时复习;2.按时、独立、认真地完成每次作业;布置的作业题,按时交。期中考试。3.积极回答课堂提问;4.严格履行请假制度(假条须由辅导员签字);5.评分标准:平时成绩10%(包括考勤、课堂回答问题,作业等)、期中成绩20%,期末成绩70%.5教材及参考教材参考教材1软件工程(第二版)杨文龙古天龙电子工业出版社2软件工程(第二版)李代平清华大学出版社教材软件工程导论张海藩清华大学出版社6第一章软件工程概述•软件危机•软件工程•软件生命周期•软件过程71.1软件危机在运行中能提供所希望的功能和性能的指令集(即程序)使程序能够正确运行的数据结构(逻辑结构,存储结构,运算)描述程序研制过程和方法使用的文档程序软件可执行部分不可执行部分文档1文档2文档31.什么是软件8什么是程序?程序由程序设计语言所描述的、能为计算机所识别、理解和处理的语句序列目前程序设计语言主要有以下几种类型面向机器:如汇编语言、机器语言等–面向过程:如Fortran,Pascal,C等等–面向问题:如数据查询语言SQL等等程序设计语言具有良好、严格语法和语义Main(){inti,j;//VariablesdefinitioncharStr[10];i=i+j;//Statementdescription…….}–面向对象:如Java,C++等等9什么是文档?文档是记录软件开发活动和阶段性成果、理解软件所必需的阐述性资料编写文档目的–促进对软件的开发,管理和维护;–便于各种人员(用户,开发人员)的交流文档标准(国际ISO,国家GB,行业标准IEEE,企业)–需求分析文档–软件设计文挡…...10计算机硬件程序内存CPU数据抽象过程抽象应用问题软件文档1软件文档n抽象过程为什么需要文档?11软件的发展历史图195019601970198019902000面向批处理有限的分布自定义软件多用户实时数据库软件产品分布式系统嵌入“智能”低成本硬件消费者的影响强大的桌面系统面向对象技术专家系统人工神经网络并行计算网络计算机早期第三阶段第四阶段第二阶段12软件发展趋势•并行计算提高计算速度•面向对象的软件开发方法•软件框架(frameworks)用于处理大型软件系统•图形接口越来越强•人工智能和神经网络技术•高级程序设计语言•专用工具软件•开放资源软件(OpenSourceSoftware)13软件危机1.软件危机的概念软件危机指的是软件开发和维护过程中遇到的一系列严重问题,包含两方面的问题:如何开发软件,怎样满足对软件的日益增长的需求如何维护数量不断膨胀的已有软件142软件危机的形成原始要求正确的规格说明错误的规格说明需求分析设计正确的设计错误的设计对错误说明的设计编码正确编码对错误说明的编码错误编码对错误设计的编码测试正确功能潜伏的错误不可改正的错误可改正的错误不完善的软件图1.1引入同一变动付出的代价随时间变化的趋势153软件危机的表现对软件开发成本和进度的估计很不准确用户对“已完成的”软件不满意甚至拒绝接受软件质量靠不住软件的可维护性差软件通常没有适当的文档资料软件成本在计算机系统总成本中所占比例逐年上升软件开发生产速率提高的速度,跟不上硬件的发展速度16软件危机的表现以丹佛新国际机场为例:该机场规模是曼哈顿机场的两倍,宽为希思机场的10倍,曾长达将近10年时间是世界上最大的机场;当时投资1.93亿美元建立了一个地下行李传送系统,总长21英里,有4,000台遥控车,可按不同线路在20家不同的航空公司柜台、登机门和行李领取处之间发送和传递行李;支持该系统的是5,000个电子眼、400台无线电接受机、56台条形码扫描仪和100台计算机。按原定计划要在1993年万圣节前(10月31日)启用,但一直到1995年2月28日,机场才正式开航。17丹佛国际机场图片18丹佛国际机场图片19软件危机的表现另外一个突出的例子是美国IBM公司于1963年~1966年开发的IBM360系列机的操作系统。该软件系统是第一个超大型的软件项目,耗资数亿美元,花了大约5000人/年的工作量,最多时,有1000人投入开发工作,共有4000多个模块,近100万行的源程序。尽管投入了这么多的人力和物力,得到的结果却极其糟糕。据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。可想而知,这样的软件质量糟到了什么地步。20软件危机的表现这个极度复杂的软件项目甚至产生了一套不包括在原始设计方案之中的工作系统。该项目的负责人FredBrooks在总结该项目时无比沉痛地说:“……正像一只逃亡的野兽落到泥潭中作垂死挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难,……程序设计工作正像这样一个泥潭……一批批程序员被迫在泥潭中拼命挣扎,……,谁也没有料到问题竟会陷入这样的困境……。”21软件危机的表现IBM360操作系统的历史教训已成为软件开发项目中的典型事例被记入历史史册。FredBrooks在随后他的大作《人月神话》(TheMythicalMan-Month)中承认,在他管理这个项目的时候,他犯了一个价值数百万美元的错误。22软件危机的表现ARIANE5火箭1996年6月耗资70亿美元,发射37秒后爆炸发射失败的原因在于软件的错误软件错误程序中试图将64位浮点数转换成16位整数时产生溢出缺少错误处理程序对数据溢出进行管理严格地遵守软件确认过程可以避免这种错误23软件危机的表现爱国者导弹曾在海湾战争期间对抗伊拉克飞毛腿导弹1991年2月,一次对抗失利中,28名美国士兵丧生问题的症结在于导弹软件包含一个累加计时误差软件错误Target=f(velocity,time)计时采用系统时钟(即1/10秒)并使用整数表达(1/10)2=0.000110011001100110011…,24位寄存器存储导致误差(0.000000095)100.000000095x100hoursx60x60x10=0.34seconds24•2008年,由于软件计算存在错误,日本17座核反应堆的部分管道在建造时低估了地震可能对其产生的影响,埋下了安全隐患。•这些核反应堆使用的都是日立制作所的软件程序,这个程序在计算地震时管道受压迫而产生的反作用力时,没有考虑管道自身的重量。在使用正确软件对上述17座核反应堆的245个检测位置进行重新计算后,发现其中71个存在这种反作用力计算错误。软件危机的表现25•2002年,美国一家研究所28日公布的调查结果表明,软件错误使美国每年损失高达595亿美元。•这次调查是由美国商业部下属的国家标准和技术研究所(NIST)进行的。NIST指出,如能做好检测工作,即可在软件开发的早期阶段发现漏洞,并进行弥补,此举每年能给美国企业节省成本222亿美元。然而,目前软件中一半以上的错误是在开发的后期或者售后使用中才被发现的。软件危机的表现264危机根源软件是逻辑产品,未完全认识其本质和特点缺乏高质量的人才(技术和管理)缺乏一种有效、系统原理、原则、方法和工具来指导软件的开发、管理和维护;导致软件生产率、软件质量远远不能满足社会发展的需求,从而成为社会、经济发展的制约因素规模大,复杂性高•Windows95有1000万行代码•Windows2000有5000万行代码,3000多个工程师,几百个小团队。Exchange2000和Windows2000开发人员结构Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人例28对软件的常见误解•用户的误解•开发人员的误解•管理者的误解29误解•先对软件需求做一般的说明,以后再逐步明确就可以了.•需求本身就是不断变化的,软件容易改变可以很快调整适应这种变化.现实软件需求不明确是造成软件开发费用增加和延时交货的主要原因.软件开发费用随着开发阶段的后移而大大增加.1x1.5-6x60-100x软件开发费用设计阶段开发阶段维护阶段用户的误解30开发人员的误解误解一旦程序开发完毕工作正常,我的任务就完成了在程序工作之前,无法顾及软件的质量问题.对于一个成功的项目来说,唯一能够提供的就是可以工作的程序.现实•一个软件的50%-70%的工作量耗在软件交付使用以后.•对于某些错误,软件审查比软件测试更加有效.•一个完整的软件要包括程序、各种文件和各种数据.31管理者的误解误解•书上已经有各种软件开发的标准,拿来用就是了.•已经有足够的软件开发工具可供使用.•一旦项目的程序员不够可以随时增加.现实书上是有各种软件开发的标准,但不是过时就是不适用.软件工具不是一拿来就能用的.“项目后期增加程序员会使项目的完成更加推后.--Brooks321.2软件工程软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用的完善的工程原理。软件危机--根源--解决途径:软件工程产生:1968年NATO计算机科学会议33软件工程的定义FritzBauer:软件工程是为了经济地获得可靠的而且能在实际机器上有效地运行的软件,而建立和使用的完善的工程化原则。1993IEEE:软件工程:1:把系统的、规范的、可度量的途径应用于软件的开发、运行和维护的过程。也就是把工程应用于软件中;2:研究1中提到的途径。34软件工程的发展软件工程的发展已经历了四个重要阶段:4、第四代软件工程—构件工程3、第三代软件工程—过程工程2、第二代软件工程—对象工程1、第一代软件工程—传统的软件工程60年代末到70年代为了克服“软件危机”(Softwarecrisis)提出“软件工程”的名词,将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程。80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程。90年代起,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。35软件工程的本质特性软件工程关注于大型程序的构造软件工程的中心课题是控制复杂性软件经常变化软件必须有效地支持它的用户开发软件的效率非常重要和谐地合作是开发软件的关键在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品36软件工程的基本原理(B.W.Boehm)研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则或“信条”,软件工程专家B.W.Boehm综合这些学者们的意见,提出了软件工程的7条基本原理。他认为这7条原理是确保软件产品质量和开发效率的原理的最小集合。这7条原理是互相独立的,其中任意6条原理的组合都不能代替另一条原理,而之前的100多条软件工程原理都可以由这7条原理的任意组合蕴含或派生。37软件工程的基本原理(B.W.Boehm)用分阶段的生命周期计划严格管理这条基本原理意味着,应该把软件生命周期划分成若干个阶段,并
本文标题:软件工程第一章.
链接地址:https://www.777doc.com/doc-1991073 .html