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

下载本文档

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

文档简介

IBM公司的OS/360,共约100万条指令,花费了5000个人年;经费达数亿美圆,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。”,1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序:DO5I=1,3误写为:DO5I=1.3,1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,导至在进入大气层时因打不开降落伞而烧毁。,软件危机,软件工程概论,学习“软件工程”的目的和意义,学会如何在现代IT企业的环境中做一个成功者;学会如何做世界级的、高质量的研究;学会如何创建大规模的软件产品。微软全球资深副总裁原微软亚洲研究院院长首席科学家张亚勤,一、全球软件产业的现状、趋势与挑战,TheChallengesandOpportunitiesoftheGlobalSoftwareIndustry.,软件产业的网络化趋势软件产业的服务化趋势软件产业的全球化趋势,智能网络(IntelligentWeb)从静态网到动态网从被动方式到主动方式从呈现信息和浏览的窗口到智能生成的平台从HTML到XML,一、全球软件产业的现状、趋势与挑战,TheChallengesandOpportunitiesoftheGlobalSoftwareIndustry.,软件产业的网络化趋势软件产业的服务化趋势软件产业的全球化趋势,相对目前“打包式”软件,为用户提供智能化的“服务式”软件。,一、全球软件产业的现状、趋势与挑战,TheChallengesandOpportunitiesoftheGlobalSoftwareIndustry.,软件产业的网络化趋势软件产业的服务化趋势软件产业的全球化趋势,强调开放性、交互性支持主流的开放式标准人才的全球化,对中国软件企业有什么启示和挑战?,TalentBeyondTechnology_WhatKindofTalentWeNeedforModernSoftwareDevelopment,扎实的基础创新、独立的工作能力主人翁精神和团队精神勾通与协调能力成就感强、有激情自觉地干好工作契而不舍,从错误中学习,二、现代软件开发对人才的要求,在微软流传着这样一个故事,有一次比尔.盖茨和上帝谈话,上帝对他说:“地球明天就要毁灭了!由于你是如此的成功,因此我特许你从地球上带一样东西到天堂!你想带什么?”比尔.盖茨回答:“请允许我从微软选300个最优秀的人,我要把他们带到天堂!”,尽管微软的windows,Exchang,SQL,Office等都非常重要,但如果没有象你们这些人才,微软也将一无所有。你们对我们公司和微软来说是处于第一位的。,我国复合型软件人才匮乏,培养适应迅速变化的市场需求的复合型软件人才已是迫在眉睫。,三、信息化建设中对复合型软件人才的需求,复合型软件人才具备不同专业背景、有市场观念的开发管理、工程管理和软件经营等复合型软件人才;,四、软件开发中的错误观点,2.软件需求分析很困难,不管三七二十一先把软件做了再说,反正软件是灵活的,随时可以修改。,1.只要掌握了1-2门程序设计语言,进行软件开发就没有问题。,总之,错误认为:软件就是程序,开发软件就是编写程序。,3.只要有最好的开发工具、最好的计算机,一定能做出优秀的软件。,本课程学习的主要内容,1.传统的软件工程方法2.面向对象的建模技术UML统一建模语言3.软件项目管理,本课程是软件工程专业、计算机科学与技术专业的专业基础核心课程。既涉及计算机学科的理论、抽象、设计3个形态,又关注工程学科的系统性、规范性和可度量性等基本属性,突出教学实践环节和软件系统开发能力的培养,是一门理论与实践并重的专业基础课程。,课程特点与安排,1.课程特点:实践性强、发展迅速2.课程安排(建议):课堂教学(41学时)授课、案例分析、讨论课程设计(课外为主,需求阶段及总体设计阶段的答辩式评审共10学时)课程设计以开发小组为单位进行。3.关于考试(建议):笔试:60分,课程设计:30分,平时:10分,教材及主要参考书,作者:张海藩主编出版社:清华大学出版社,1.软件工程导论,本书是在吸取了国内外有关教材的精华,并结合编者多年来进行软件工程的教学及软件开发实践的经验、体会的基础上编写的。,作者:许家珆曾翎彭德中出版社:高等教育出版社出版日期:2004-06-30配套光盘1张,2.软件工程理论与实践,本书是教育部新世纪网络课程建设工程的子课题“软件工程网络课程”配套教材。其主要特色是理论与实践密切结合,给出了“软件工程课程设计”的相关指导。其第二版已评为国家十一五规划教材,拟今年内出版。,教材及主要参考书,教材及主要参考书,3.软件工程SoftwareEngineering,6thEdition作者:(英)IanSommerville出版社:机械工业出版社(影印版),本书是英国著名软件工程学家IanSommerville系统介绍软件工程理论的力作,以要求极高的一类系统为实例,精辟透彻地阐述了软件工程的内涵。,第一章软件工程学概述第二章可行性分析第三章软件需求分析第四章总体设计第五章详细设计第六章编码实现第七章软件维护第八章面向对象技术第九章UML建模语言基础第十章软件项目管理,课程概述,第一章,1,软件工程学概述,“软件危机”(Softwarecrisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力财力,而在开发过程中就夭折。,“软件危机”主要表现在两个方面:(1)如何开发软件以满足社会对软件日益增长的需求。(2)如何更有效地维护数量不断膨胀的已有软件。,1.1软件危机,1.1.2产生软件危机的原因,软件规模越来越大,结构越来越复杂。软件开发管理困难而复杂。软件包开发费用不断增加。软件开发技术落后。生产方式落后,仍采用手工方式。开发工具落后,生产率提高缓慢。,1.1.3解决软件危机的途径,1.技术措施使用更好的软件开发方法和开发工具2.组织管理措施软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。,1.2软件工程1.2.1软件工程的产生和发展,软件工程(SoftwareEngineering)是在克服60年代末所出现的“软件危机”的过程中逐渐形成与发展的。随着互联网平台和环境的迅速发展,对软件工程的发展产生了变革性的巨大影响,网格计算、普适计算、中间件、网构软件等一批新技术和理念,从网络资源共享与管理,人机交互及软件服务等各方面提出了软件技术的新课题。,软件工程的发展已经历了四个重要阶段:,4.第四代软件工程构件工程,3.第三代软件工程过程工程,2.第二代软件工程对象工程,1.第一代软件工程传统的软件工程,软件工程的发展已经历了四个重要阶段:1.第一代软件工程传统的软件工程2.第二代软件工程对象工程3.第三代软件工程过程工程4.第四代软件工程构件工程,60年代末到70年代为了克服“软件危机”(Softwarecrisis)提出“软件工程”的名词,将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程。,软件工程的发展已经历了四个重要阶段:1、第一代软件工程传统的软件工程2、第二代软件工程对象工程3、第三代软件工程过程工程4、第四代软件工程构件工程,80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。,软件工程的发展已经历了四个重要阶段:1、第一代软件工程传统的软件工程2、第二代软件工程对象工程3、第三代软件工程过程工程4、第四代软件工程构件工程,80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程。,软件工程的发展已经历了四个重要阶段:1、第一代软件工程传统的软件工程2、第二代软件工程对象工程3、第三代软件工程过程工程4、第四代软件工程构件工程,90起年代,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。,软件工程是一门新兴的边缘学科,涉及的学科多,研究的范围广,研究的主要内容有以下几方面:,软件开发技术,软件开发方法、技术软件开发工具及环境软件管理技术软件规范(国际规范),软件管理技术,1.2.2软件工程的概念,软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法与维护软件,把经过时间考验而证明的管理技术和当前能够得到的最好技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。,软件工程的本质特征:,软件工程关注于大型程序的构造。软件工程的中心课题是控制复杂性。软件产品交付使用后仍然需要经常修改。开发软件的效率非常重要。开发人员和谐地合作是成功地开发软件的关键。软件必须有效地支持它的用户。在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。,1.2.3软件工程的基本原理,用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程实践的必要性,1.2.4软件工程方法学,软件工程方法学包括三个要素,这就是方法、工具和过程。其中,方法是完成软件开发的各项任务的技术方法,回答“如何做”的问题;工具是为方法的运用提供自动的或半自动的软件支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。,1.传统方法学(生命周期方法学或结构化范型),采用结构化技术(结构化分析、结构化设计和结构化实现)完成软件开发的各项任务。把软件生命周期划分成若干个阶段,然后顺序完成各个阶段的任务。每个阶段的开始和结束都有严格的标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是最后一阶段的开始标准。在每个阶段结束之前都必须正式地进行严格的技术审查和管理复审。,2.面向对象方法学(面向对象范型),(1)把对象作为融合了数据及在数据上的操作的软件构件,即用对象分解取代了传统方法的分解。(2)把所有对象都划分成类。(3)按照父类与子类的关系,把若干个相关类组织成一个层次结构的系统。(4)对象彼此间仅能通过发送消息互相联系。,1.3软件生命周期,软件生命周期由软件定义、软件开发和软件维护三个时期组成,每个时期又进一步划分成三个阶段:软件定义、开发时期、维护时期。软件定义时期通常划分成三个阶段,即问题定义、可行性研究和需求分析。开发时期具体设计和实现在前一个时期定义的软件,它通常由下述四个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。维护时期的主要任务是使软件持久地满足用户的需要。,2.可行性研究对于上一个阶段所确定的问题有行得通的解决办法吗?,1.问题定义问题定义阶段必须回答的关键问题是:“要解决的问题是什么?”,3.需求分析这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。这个阶段的一项重要任务是用正式文档准确地记录对目标系统的需求,产生规格说明书。,5.详细设计这个阶段的关键问题是“应该怎样具体实现这个目标系统。”设计每个模块,确定实现模块功能所需要的算法和数据结构。,4.总体设计这个阶段必须回答的关键问题是:“概括地说,应该怎样实现目标系统”。应设计出低成本、中等成本、高成本3种方案,推荐最佳方案。,6.编码和单元测试这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块,7.综合测试这个阶段的关键任务是通过各种类型的测试使软件达到预定的要求。集成测试:根据设计的软件结构,把经过单元检验的模块按某中选定的策略结合起来,在装配过程中对程序进行必要的测试。,8.软件维护改正性维护:诊断和改正在使用过程中发现的软件错误适应性维护:修改软件以适应环境的变化完善性维护:根据用户的要求改进或扩充软件使它更完善预防性维护:修改软件为将来的维护活动预先做准备,.4软件工程过程,为了克服软件危机,人们从其他产业的工业化生产得到启示,于是在68年北大西洋公约的软件可靠性会议(NATO)上,首次提出了“软件工程”的概念。提出了在软件生产中采用工程化的方法,采用一系列科学的、现代化的方法技术来开发软件。这种工程化的思想贯穿到软件开发和维护的全过程。,是指在软件工具的支持下,所进行的一系列软件开发和进化的活动。,通常包括以下四类基本过程:1、软件规格说明:规定软件的功能及其运行环境。2、软件开发:产生满足规格说明的软件。3、软件确认:确认软件能够完成客户提出的要求。4、软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。,1.4.1软件工程过程(Softwareengineeringprocess),软件工程过程(Softwareengineeringprocess),规程与方法,工具和设备,有技能经过培训的开发人员,问题定义,编码,需求分析,软件设计,可行性研究,运行与维护,测试,开发时期,运行时期,计划时期,(目标与范围说明书),(可行性论证论告),(维护报告),(测试报告),(程序),(设计文档),(需求说明书),软件生命周期(SDLD)瀑布模型,瀑布模型,1.4.2软件开发模型,软件开发模型是描述软件开发过程中各种活动如何执行的模型。因此又称为软件过程模型。软件过程模型是对软件开发实际过程的抽象和简化。,目前典型的软件开发模型有:瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型等。不同的开发方法有不同的软件过程模型。,瀑布模型,增量模型(incrementalmodel),增量模型是一种非整体开发的模型。是一种进化式的开发过程。根据增量的方式和形式的不同,分为:基于瀑布模型的渐增模型基于原型的快速原型模型该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。,增量模型和瀑布模型之间的本质区别是什么?,为了描述软件开发过程中可能的回溯,尤其是维护阶段往往要经历上述各个阶段。采用循环模型描述。,需求分析,设计,编码,测试,运行,评价,计划,循环模型,循环模型,速成原型的工作模型是一个循环的模型。1.快速分析快速确定软件系统的基本要求,确定原型所要体现的特征(界面,总体结构,功能,性能)2.构造原型考虑主要特征,快速构造一个可运行的系统。有三类原型:用户界面原型,功能原型,性能原型。3.运行和评价原型4.修改与改进,原型的工作模型,智能模型(intelligentmodel),也称为基于知识的软件开发模型,是知识工程与软件工程相结合的软件开发模型。,智能模型,1.4.3软件开发方法,软件开发的目标是要在规定的投资和时间内,开发出符合用户的需求,高质量的软件,为此需要有成功的开发方法。,软件开发方法可分为两大类:面向过程的开发方法面向对象的开发方法,结构化开发方法(StructuredDevelopingMethod)是现有的软件开发方法中最成熟,应用最广泛的方法,主要特点是快速,自然和方便。结构化方法总的指导思想自顶向下、逐步求精。它的基本原则是功能的分解与抽象。一、结构化开发方法的组成结构化程序设计方法SP法(StructuredProgram)结构化设计方法SD法(StructuredDesign)结构化分析方法SA法(StructuredAnalysis)SA,SD,SP法相互衔接,形成了一整套开发方法。,结构化方法及瀑布模型,什么是原型化方法(PrototypingMethod),原型化方法及其工作模型,原型是软件的一个早期可运行的版本,它反映了最终系统的部分重要特性。原型化方法的基本思想是花费少量代价建立一个可运行的系统,使用户及早获得学习的机会。原型化方法又称速成原型法(RapidPrototyping)。,原型化方法及其工作模型,1、废弃(throwaway)型RSP法(RapidSpecificPrototyping)快速建立需求规格原型。2、追加(addon)型RCP法(RapidCyclicPrototyping)快速建立渐进原型法。采用循环渐进的开发方式,对系统模型作连续精化。,构造原型,运行/评价原型,原型完成否,要细部说明否,严格说明细部,效果满意否,整理原型提供文档,修正改进原型,Y,Y,N,N,快速分析,确定初步规格说明,Y,N,细化的快速原型模型,图2细化的快速原型模型,对大型软件,需要多个原型描述系统的生存期,螺旋模型将瀑布模型与原型化模型结合起来,并加入了风险分析。,螺旋模型,螺旋模型,螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:第一,确定目标、方案和限制条件;第二,评估方案、标识风险和解决风险;第三,开发确认产品;第四,计划下一周期工作。,面向对象方法(OOSD(Object-OrientedSoftwareDevelopment)是80年代推出的一种全新的软件开发方法。非常实用而强有力,被誉为90年代软件的核心技术之一。,面向对象方法及其工作模型,其基本思想是:对问题领域进行自然的分割,以更接近人类通常思维的方式建立问题领域的模型,以便对客观的信息实体进行结构和行为的模拟,从而使设计的软件更直接地表现问题的求解过程。面向对象的开发方法以对象作为最基本的元素,是分析和解决问题的核心。,面向对象开发方法的组成,OOSD由三部分组成:OOA(Object-OrientedAnalysis)面向对象的分析OOD(Object-OrientedDe

温馨提示

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

评论

0/150

提交评论