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

下载本文档

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

文档简介

软件工程,主讲:饶国政,天津大学,联系方式,天津大学25教学楼B-607邮箱:rgz课件及相关资源:2/faculty/rgz/new/se/,绪论,计算机科学是什么?1、是科学?是工程学科?还是一门技术?.2、学科的智力本质是什么?3、它将持续兴旺下去还是衰落下去?4、计算机科学和工程的核心课程是否反映了这个领域?5、怎样把理论和实验集成在计算课程中?6、各核心课程培养计算方面的能力吗?7、.,计算机科学的三个学科形态,争论的结论,计算处于应用数学、科学和工程三者的主要过程的交叉路口。这三个过程在本学科是同等重要和基本的。它是理论、抽象和设计三者唯一的交汇点。,程序设计的作用,(1)计算科学=程序设计是错误的。(2)计算领域的许多活动并不是程序设计,硬件设计、体系结构、操作系统结构、数据库应用等。(3)程序设计是本学科标准的实践活动的一部分,每一个计算工作者必须有程序设计的能力。但这并不意味着本学科就建筑在程序设计的基础上,也不意味着导引性课程必须是程序设计方面的课程。(4)程序设计语言是涉足本领域特色的工具。建议:程序设计作为核心课程的一部分,并把程序设计语言作为涉足计算学科重要特色的有用媒介。,计算机科学简短定义,(1)计算学科是对描述和变换信息的算法过程的系统研究,包括它的理论、分析、设计、有效性、实现和应用。(2)全部计算科学的基本问题是什么能(有效地)自动进行?。,计算机科学划分的分支领域,计算科学的学科能力的培养,(1)面向学科的思维能力发现本领域新的特性的能力,这些特性导致新的活动方式和新的工具,以便这些特性能被其他人所利用。(2)使用工具的能力使用本领域的工具有效地进行其他领域时间活动的能力。建议:把面向学科的思维能力作为计算专业课程设置的主要目的。同时,计算专业工作者必须充分熟悉工具,以便与其他学科的人们有效地合作,进行那些学科的设计活动。,学科渊源,(1)本学科和算法理论、数理逻辑和存储程序式电子计算机的发明一起,形成于40年代初。(2)计算的渊源可以深入扩展到数学和工程。数学把分析分到这一领域,而工程把设计分到这一领域。(3)本学科包括它自己的理论、实验方法和工程。这与许多其他的自然科学不同。许多其他的自然科学和运用其成果的工程学科是分开的(例如化学和化学工程原理)、计算机科学与工程却是不可分的,因为本学科的科学与工程形态从根本上是相互渗透的。,与数学的关系,计算作为数学的主要对象已有几千年了。自然现象的许多模型被用来导出方程,它的解就导致那些自然现象的预言。例如轨道的弹道计算、天气预报和流体的流动等。解这些方程的许多方法已经给出。例如线性方程组的解法、微分方程的解法和求函数的积分。几乎在这同时,机械系统设计中所需要的计算成为工程主要关注的对象。例如计算静态物体压力的算法、计算运动物体惯量的算法和测量比我们直觉要大得多或小得多的距离的方法。,发展方向,(1)新一代计算机体系结构。该方向包括神经元计算、计算机设计与制造、网络与通信技术、大容量存储设备的研究、容错模型内容等;(2)并行与分布式软件开发方法学研究。该方向包括数理逻辑、计算理论、形式语义学、高级语言与程序设计理论、系统软件设计、软件工程、容错理论等内容;(3)人工智能理论及其应用。该方向包括数理逻辑、高等逻辑、算法理论、知识工程、神经元计算、人工智能高能语言与人工智能程序设计等内容;(4)计算机应用的关键技术。主要将围绕计算可视化与虚拟现实,计算几何,科学计算这几个重点方向开展有工作,并带动数据库技术、计算机图形学、自然语言处理与机器翻译、模式识别与图解处理等方向发展。在这一综合方向上研究内容将几乎覆盖所有的计算科学应用技术方向内容。,软件方法学和工程-基本问题,本领域研究满足技术要求、安全、可靠、可信的程序和大型软件系统的设计。基本问题包括:1.在程序和程序设计系统的开发背后的原理是什么?2.怎样去证明程序或系统满足它的技术要求?3.怎样去给定技术要求,使不遗漏重要的情况,而且可以分析它的安全性?4.怎样使软件系统通过不同阶段不断改进?5.怎样使软件设计得易理解和易修改?,软件方法学和工程理论,软件方法学和工具练域理论的主要部分是:(l)程序验证和证明。(2)时态逻辑。(3)可靠性理论。(4)谓词演算、公理语义学、和认知心理学等支撑领域。,软件方法学和工程抽象,软件方法学和工具抽象的主要部分是:(1)定义技术要求的方法。如调词变换器、程序设计演算、抽象数据类型和弗洛依德一霍尔(Floyd-Hoare)公理化符号。(2)方法学,如逐步提炼、模块化设计、模块、分离编译、信息隐藏(informationbiding)、数据流和抽象层次。(3)程序开发自动化的方法。例如,文本编辑程序,面向语法的编辑程序和屏幕编辑程序。(4)可信计算的方法学;例如,容错,安全性,可靠性,恢复,N版本程序设计,多方式冗余,和检查点插入。(5)软件工具和程序设计环境。(6)程序和系统的测度和评估。(7)软件系统到特定机器结构的匹配问题域。(8)软件研制的生命周期模型。,软件方法学和工程设计,软件方法学和工具领域设计和实验的主要内容是:(1)技术要求描述语言(如PSL2,IMAJO)、构造管理系统(如在AdaAPSE)和修改控制系统(如RCS,SCCS)。(2)指向语法的编辑器、行编辑器、屏幕编辑器和字处理系统。(3)在软件开发实践中倡导和使用的特定方法,如HDM,及Dijkstra,Jackson,Mills或Yourdon等人倡导的方法。(4)测试的过程和实践(例如,遍历、手模拟、模块间接口的检查、测试集的程序通路列举和事件跟踪),质量保证和计划管理。(5)程序开发和查错,剖面分析,文本格式化和数据库操作的软件工具。(6)像国防部那样的安全计算系统的标准级和验证过程的技术要求。(7)用户接口的设计。(8)设计非常大的、可靠的、容错的和可信的系统的方法。,学习“软件工程”的目的和意义,学会如何在现代IT企业的环境中做一个成功者;学会如何做世界级的、高质量的研究;学会如何创建大规模的软件产品。微软全球资深副总裁原微软亚洲研究院院长首席科学家张亚勤,一、全球软件产业的现状、趋势与挑战,TheChallengesandOpportunitiesoftheGlobalSoftwareIndustry.,软件产业的网络化趋势软件产业的服务化趋势软件产业的全球化趋势,智能网络(IntelligentWeb)从静态网到动态网从被动方式到主动方式从呈现信息和浏览的窗口到智能生成的平台从HTML到XML,一、全球软件产业的现状、趋势与挑战,TheChallengesandOpportunitiesoftheGlobalSoftwareIndustry.,软件产业的网络化趋势软件产业的服务化趋势软件产业的全球化趋势,相对目前“打包式”软件,为用户提供智能化的“服务式”软件。,一、全球软件产业的现状、趋势与挑战,TheChallengesandOpportunitiesoftheGlobalSoftwareIndustry.,软件产业的网络化趋势软件产业的服务化趋势软件产业的全球化趋势,强调开放性、交互性支持主流的开放式标准人才的全球化,对中国软件企业有什么启示和挑战?,TalentBeyondTechnology_WhatKindofTalentWeNeedforModernSoftwareDevelopment,扎实的基础创新、独立的工作能力主人翁精神和团队精神勾通与协调能力成就感强、有激情自觉地干好工作契而不舍,从错误中学习,二、现代软件开发对人才的要求,我国复合型软件人才匮乏,培养适应迅速变化的市场需求的复合型软件人才已是迫在眉睫。,三、信息化建设中对复合型软件人才的需求,复合型软件人才具备不同专业背景、有市场观念的开发管理、工程管理和软件经营等复合型软件人才;,四、软件开发中的错误观点,2.软件需求分析很困难,不管三七二十一先把软件做了再说,反正软件是灵活的,随时可以修改。,1.只要掌握了1-2门程序设计语言,进行软件开发就没有问题。,总之,错误认为:软件就是程序,开发软件就是编写程序。,3.只要有最好的开发工具、最好的计算机,一定能做出优秀的软件。,本课程学习的主要内容,1.传统的软件工程方法2.面向对象的建模技术UML统一建模语言3.软件项目管理及CMMI4.软件复用及构件工程,本课程以传统的软件工程技术为基础,主要讨论如何应用软件工程的最新技术UML统一建模语言进行软件开发,提高软件开发的水平和技术。,作者:齐治昌、宁洪出版社:高等教育出版社ISBN:9787040146288面向21世纪课程教材、国家精品课程配套教材,1.软件工程(第2版),教材及主要参考书,教材及主要参考书,作者:许家珆主编白忠建,彭德中,吴磊编写出版社:电子工业出版社,2.软件工程方法与实践,教材及主要参考书,3.软件工程SoftwareEngineering,6thEdition作者:(英)IanSommerville出版社:机械工业出版社(影印版),本书是英国著名软件工程学家IanSommerville系统介绍软件工程理论的力作,以要求极高的一类系统为实例,精辟透彻地阐述了软件工程的内涵。,参考网站,软件工程网卡内基梅大学软件工程研究所/对象技术和构件技术链接Rational公司OMG(ObjectManagementGroup),软件工程网卡内基梅大学软件工程研究所/对象技术和构件技术链接Rational公司,第一章,1,软件与软件工程,1.1软件,软件的概念;软件的特点;软件的分类;软件的发展;软件危机。,软件的概念,软件是计算机系统的重要组成部分;软件是逻辑产品,需要计算机硬件和系统软件的支撑;软件是计算机控制系统的指挥中枢;软件是信息转换器,它能对信息进行加工、处理或变换;软件是工具,在人们的生活、工作、休闲,在社会的经济、军事、政治、文化、科学技术、教育中发挥具大作用;,计算机世界的软件软件是能够完成预定功能和性能,并对相应数据进行加工的程序和描述程序及其操作的文档。软件=程序+数据+文档程序=算法+数据结构,软件的特点,软件是被开发或设计的,而不是传统意义上被制造的软件不会”磨损”软件产业逐步走向基于构件的组装,但还是定制的,软件的描述,软件由程序、数据、文档组成。数据用程序设计语言要求的数据结构表示文档规范准确清晰简洁无歧义自然语言结构化英语图表,程序设计语言面向机器汇编语言、机器语言等面向过程Fortran,Pascal,C等面向对象C+,Java等面向问题结构化查询语言SQL等,软件分类,系统软件实时软件商务软件工程和科学计算软件嵌入式软件人工智能软件个人计算机软件,软件的发展,软件发展的四个阶段1950-1965没有系统的软件开发方法和管理机制、自定义软件、批处理、有限分布。1965-1975产生人机交互的新概念、新技术软件产品、多用户、实时、数据库。1973-1988微处理器的出现并广泛应用分布式系统、嵌入智能、低成本硬件、消费者的影响。1986-2000广域和局域网络迅速普及强大的桌面系统、面向对象技术、专家系统、人工智能、神经网络、并行计算、网络计算机。,2软件发展存在的问题,软件开发能力不能满足人们的需要。社会对软件的依赖程度加大,人们普遍关注软件的安全和可靠性建造高可靠性、高质量软件的任务任重道远。若干年前开发的应用软件经过几十次修改已无人认识它的内部结构,己经不可维护。由于经济原因,嵌入式系统存在许多怪现象,企业不愿意投入资源再生产,而采取打补丁+时髦界面的方法。,软件危机的表现软件产业的发展长期滞后,与硬件发展不协调。软件开发成本过高软件质量得不到保证软件开发效率低难以控制开发进度,工作量估计困难软件不能满足社会发展的需求,成为社会、经济发展的制约因素,软件危机,2.软件危机原因,软件的规模加大、复杂性提高、性能增强软件是逻辑产品,尚未完全认识其本质和特点缺乏有效的、系统的开发、维护大型软件项目的技术手段和管理方法用户对软件需求的描述和软件开发人员对需求的理解往往存在差异,用户经常要求修改需求,开发人员很难适应软件开发的技术人员和管理人员缺乏软件工程化的素质和要求,对工程化的开销认识不足,1.2软件工程的产生和发展,软件工程(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)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。,软件工程是一门新兴的边缘学科,涉及的学科多,研究的范围广,研究的主要内容有以下几方面:,软件开发技术,软件开发方法、技术软件开发工具及环境软件管理技术软件规范(国际规范),软件管理技术,.3软件工程过程与软件生存期,为了克服软件危机,人们从其他产业的工业化生产得到启示,于是在68年北大西洋公约的软件可靠性会议(NATO)上,首次提出了“软件工程”的概念。提出了在软件生产中采用工程化的方法,采用一系列科学的、现代化的方法技术来开发软件。这种工程化的思想贯穿到软件开发和维护的全过程。,是指在软件工具的支持下,所进行的一系列软件开发和进化的活动。,通常包括以下四类基本过程:1、软件规格说明:规定软件的功能及其运行环境。2、软件开发:产生满足规格说明的软件。3、软件确认:确认软件能够完成客户提出的要求。4、软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。,软件工程过程(Softwareengineeringprocess),软件工程过程(Softwareengineeringprocess),规程与方法,工具和设备,有技能经过培训的开发人员,软件工程三要素,软件工程釆用层次化的方法,每个层次都包括过程、方法、工具三要素。,问题定义,编码,需求分析,软件设计,可行性研究,运行与维护,测试,开发时期,运行时期,计划时期,(目标与范围说明书),(可行性论证论告),(维护报告),(测试报告),(程序),(设计文档),(需求说明书),软件生命周期(SDLD)瀑布模型,瀑布模型,1.4软件开发模型,软件开发模型是描述软件开发过程中各种活动如何执行的模型。因此又称为软件过程模型。软件过程模型是对软件开发实际过程的抽象和简化。,目前典型的软件开发模型有:瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型等。不同的开发方法有不同的软件过程模型。,软件过程模型,软件过程模型是软件开发全过程、软件开发活动以及它们之间关系的结构框架软件项目的管理提供里程碑和进度表为软件开发提供原则和方法,以软件需求完全确定为前提的瀑布模型在软件开发初期只能提供基本需求所采用的渐进式开发模型如原型模型、螺旋模型、增量模型、并发开发模型以形式化开发方法为基础的变换模型基于构件的开发过程敏捷开发过程-统一软件开发过程RUP,五类软件开发过程模型,瀑布模型,瀑布模型主要思想,软件开发过程与软件生命周期是一致的相邻二阶段之间存在因果关系需对阶段性产品进行评审,瀑布模型的优点,软件生命周期模型,使软件开发过程可以在分析、设计、编码、测试和维护的框架下进行;软件开发过程具有系统性、可控性,克服了软件开发的随意性。,瀑布模型的缺点,项目开始阶段用户很难精确的提出产品需求,由于技术进步,用户对系统深入的理解,修改需求十分普遍。项目开发晚期才能得到程序的运行版本,这时修改软件需求和开发中的错误代价很大。采用线性模型组织项目开发经常发生开发小组人员“堵塞状态”,特别是项目的开始和结束。,增量模型(incrementalmodel),增量模型是一种非整体开发的模型。是一种进化式的开发过程。根据增量的方式和形式的不同,分为:基于瀑布模型的渐增模型基于原型的快速原型模型该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。,增量模型和瀑布模型之间的本质区别是什么?,增量模型特点,增量小而可用的软件特点在前面增量的基础上开发后面的增量每个增量的开发可用瀑布或快速原型模型迭代的思路,为了描述软件开发过程中可能的回溯,尤其是维护阶段往往要经历上述各个阶段。采用循环模型描述。,需求分析,设计,编码,测试,运行,评价,计划,循环模型,循环模型,速成原型的工作模型是一个循环的模型。1.快速分析快速确定软件系统的基本要求,确定原型所要体现的特征(界面,总体结构,功能,性能)2.构造原型考虑主要特征,快速构造一个可运行的系统。有三类原型:用户界面原型,功能原型,性能原型。3.运行和评价原型4.修改与改进,原型的工作模型,智能模型(intelligentmodel),也称为基于知识的软件开发模型,是知识工程与软件工程相结合的软件开发模型。,智能模型,1.5软件开发方法,软件开发的目标是要在规定的投资和时间内,开发出符合用户的需求,高质量的软件,为此需要有成功的开发方法。,软件开发方法可分为两大类:面向过程的开发方法面向对象的开发方法,结构化开发方法(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细化的快速原型模型

温馨提示

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

评论

0/150

提交评论