01第一章软件工程绪论软件工程教案海南大学(共15章).ppt
软件工程(第二版)齐治昌、谭庆平、宁洪 编著 高等教育出版社,主讲:陈明锐 教授,省级精品课程,课程进度安排,分析与设计课堂演讲竞赛,请同学们在第4周前分好组并把分组名单发给老师。分组要求57人一组,能力强弱结合,分工合作,发扬团队合作精神。最终形成课程设计提交!,课程进度安排,课程简介及教学目标,“软件工程”是计算机科学与技术、计算机软件与理论、信息与计算科学及其相关专业的一门专业基础课,它是软件设计与开发以及各种计算机应用系统开发的重要基础。是本科培养目标软件系统设计师和软件开发工程师的必备知识。主要内容包括软件工程概述、可行性分析、需求分析、概要设计、详细设计、面向对象分析与设计、编码、软件质量与质量保证、项目计划与管理等。课程的学习对提升同学们的能力、素质、道德修养、团队精神等都具有非常重要的意义。,课程简介及教学目标,在课程的学习和实践中,同学们应理解和掌握软件工程中的软件生命周期各阶段的任务、过程、结构化方法和工具;面向对象方法学、面向对象分析、设计和实现;软件工程应用的管理技术等。本课程的目的与任务是使同学们通过本课程的学习,了解软件项目开发和维护的一般过程,掌握软件开发的传统方法和最新方法,为今后更深入地学习和从事有关软件工程实践工作打下良好的理论基础。,软件开发与人才需求,未来软件开发的生产模式及对人才的要求现有模式:小作坊的、一人身兼多职、英雄式的软件开发生产模式:大规模的软件生产,专业化、分工越来越细,团队合作开发对人才的要求:除精通开发技术外,更需 要软件工程意识和团队 合作精神,中国软件产业,中国软件产业的途径之一(软件外包)印度软件产业发展与软件外包 中国向印度学习发展软件外包业务中国目前外包业务与市场分析 中国目前80%的外包业务来自日、韩等亚洲国家 印度的外包业务主要来自于美国 中国和印度的不同(文化、语言、软件工程意识),软件工程教育的定位,我国软件工程的专业教育与软件人才的链之间的关系可描述为如下图:,软件开发工程师,架构设计师,产品经理,项目管理者,系统分析师,系统设计师,程序员,研究生教育,本科教育,大专教育,中专教育,软件工程教育的定位,观点:不同的人才培养或者不同软件开发的岗位对软件工程的知识要求是不一样的。我们在学习软件工程知识与选用教材时,充分地考虑到这一因素,采取因材取舍的原则。不同的软件工程教材,适用于不同层次的人员学习,所以不同层次的人才选用不同的教材。例:海南纽康信息系统有限公司 岗位能力规定,1.程序员岗位能力规定,2.软件工程师岗位能力规定,3.高级软件工程师岗位能力规定,4.项目主管岗位能力规定,5.项目经理岗位能力规定,课程学习的内容与形式,理论内容:基本原理、方法和技术形式:讲授、自学、讨论实践内容:构造一个应用系统(包括分析、设计、编码、测试)形式:分组合作、分阶段形成文档、编码、集成,软件工程的主要内容,软件工程的基本概念软件开发模型软件开发各阶段的任务、技术、方法传统方法、面向对象方法软件工程管理软件质量保证软件工程环境,第一章 绪论,1.1 软件与软件危机1.2 软件工程学的范畴1.3 传统软件工程和面向对象软件工程1.4 软件工程的应用,1.1 软件与软件危机,软件是信息化的核心,国民经济、国防建设、社会发展及人民生活都离不开软件。软件产业是增长最快的朝阳产业,是高投入高产出、无污染、低能耗的绿色产业。软件产业关系到国家经济和文化安全,体现了国家综合实力,是决定21世纪国际竞争地位的战略性产业。软件工程(Software Engineering)是在克服60年代末所出现“软件危机”的过程中逐渐形成与发展的。软件工程是一门指导计算机软件系统开发和维护的工程学科,是一门新兴的边缘学科,主要研究如何应用软件开发的科学理论和工程技术来指导大型软件系统的开发。,1.1 软件与软件危机,软件工程的发展已经历了三个重要阶段:,3、第三代软件工程 构件工程(软件复用),2、第二代软件工程 对象工程,1、第一代软件工程 传统的软件工程,注:软件工程发展阶段论没有统一定论,60年代末到70年代为了克服“软件危机”(Software crisis)提出“软件工程”的名词,将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程。,1.1 软件与软件危机,软件工程的发展已经历了三个重要阶段:,3、第三代软件工程 构件工程(软件复用),2、第二代软件工程 对象工程,1、第一代软件工程 传统的软件工程,注:软件工程发展阶段论没有统一定论,80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。,1.1 软件与软件危机,软件工程的发展已经历了三个重要阶段:,3、第三代软件工程 构件工程(软件复用),2、第二代软件工程 对象工程,1、第一代软件工程 传统的软件工程,注:软件工程发展阶段论没有统一定论,90起年代,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。,软件,软件就是程序?,一定要纠正软件就是程序,开发软件就是编写程序的错误观念!,软件定义:软件是能够完成预定功能和性能的可执行的计算机程序和使程序正常执行所需要的数据,加上描述软件开发过程及其管理、程序的操作和使用的有关文档。,程序的构成:面向过程的程序=算法+数据结构 面向对象的程序=对象+消息 面向构件的程序=构件+框架,软件,软件的简要定义:软件=程序+数据+文档程序:按事先设计的功能和性能需求执行的指令序列数据:是程序能正常操纵信息的数据结构文档:与程序开发及过程管理、维护和使用有关的图 文材料,程序、软件与软件产品:独唱小合唱合唱万人大合唱|简单程序 较复杂程序 软件,软件规模越来越大,Windows95有1000万行代码 Windows2000有5000万行代码,Exchange2000和 Windows2000开发人员结构,软件开发的发展过程,计算机应用发展,软件数量多规模大,软件成本高质量低,个体化软件开发方法,软件维护困难,软件危机,软件工程,软件的特征,软件是一种逻辑实体,不是物理实体,他具有抽象性软件不会磨损和老化软件主要是研制,生产是简单的拷贝软件成本昂贵,其开发方式至今尚未摆脱手工方式软件维护不同于硬件维修,易产生新的问题软件具有“复杂性”,其开发和运行常受到计算机系统的限制,即受环境影响大,软件的特征,软、硬件失效情况的对比,硬件失效率曲线,是一U型曲线(即浴盆曲线)。软件失效率曲线,它没有U型曲线的右半翼。因为软件不存在磨损和老化问题,然而存在退化问题。,软件危机,定义计算机软件的开发和维护过程所遇到的一系列严重问题 表现对软件开发成本和进度的估算很不准确用户很不满意质量很不可靠没有适当的文档软件成本比重上升供不应求:软件开发生产率跟不上计算机应用迅速深入的 趋势,软件危机例证,IBM公司的 OS/360,共约100万条指令,花费了5000个人年;经费达数亿美圆,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。”,1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序:DO 5 I=1,3 误写为:DO 5 I=1.3,1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁。,硬件/软件成本变化趋势,100%,0%,1955,1970,1985,软件技术进步落后于需求增长,软件危机,原因客观:软件本身特点逻辑部件规模庞大主观:不正确的开发方法忽视需求分析错误认为:软件开发=程序编写轻视软件维护,软件危机,解决途径组织管理系统工程项目管理方法技术措施软件开发技术与方法软件工具,1.2 软件工程学的范畴,软件工程学指导计算机软件开发和维护的工程学科 工程管理+开发技术1983年B.W.Boehm提出了软件工程的七条基本原理:用分阶段的是的生存周期计划严格管理;坚持进行阶段评审;严格实施的产品控制;采用现代程序技术;结果应能清楚地审查;开发小组的成员应该少而精;承认不断改进软件工程的必要性。,1.2 软件工程学的范畴,于1968年在联邦德国召开的北大西洋公约软件可靠性会议(NATO)上,首次提出“软件工程”的概念,提出了在软件生产中采用工程化的方法,采用一系列科学的、现代化的方法技术来开发软件。这种工程化的思想贯穿到软件开发和维护的全过程。了解有关软件、软件生存期及软件工程过程等重要的概念,对掌握、学习和应用软件工程的方法、技术等对于计算机科学与技术专业的学生都是非常必要的。,1.2 软件工程学的范畴,软件工程学,软件开发技术,软件工程管理,软件开发方法学,软件工具,软件工程环境,软件管理学,软件经济学,软件度量学,软件工程层次图,该图展现了软件工程研究的内容及关注的焦点。,1.3 传统软件工程和面向对象软件工程,由于软件开发方法可分为三大类:面向过程的开发方法(传统的)面向对象的开发方法 基于构件的开发方法,相应地软件工程方法也分为三大类:面向过程的软件工程(传统的)面向对象的软件工程 基于构件的软件工程,传统软件工程,传统的软件工也称为面向过程的软件开发方法,这类开发方法都典型地包含了分析、设计、实现、确认(测试)、演化(维护)等活动。典型的传统软件开发方法有:Jackson方法、结构化开发方法、原型化方法、HIPO法、IDEF法等。,传统软件工程,一、结构化开发方法(Structured Developing Method)是一种面向数据流的开发方法,是现有的软件开发方法中最成熟,应用最广泛的方法,主要特点是快速,自然和方便。结构化方法总的指导思想是自顶向下、逐步求精,以数据流,数据的封闭性准则来逐层分解的,它的基本原则是功能的分解与抽象。结构化方法强调结构的合理性。提出了一组提高软件结构质量的准则,如功能的分解与抽象、模块独立性、信息屏蔽等。,传统软件工程,JACKSON方法是一种面向数据结构的设计方法。强调程序结构与问题结构相对应。JACKSON方法由两部分构成:1、JSP(Jackson structuredProgramming)(杰克逊结构程序设计)2、JSD(Jackson System Development),二、Jackson方法,1.3 传统软件工程和面向对象软件工程,三、原型化方法(Prototyping Method),原型是软件开发过程中,软件的一个早期可运行的版本,它反映了最终系统的部分重要特性。原型化方法的基本思想是花费少量代价建立一个可运行的系统,使用户及早获得学习的机会,原型化方法又称速成原型法(Rapid Prototyping)。强调的是软件开发人员与用户的不断交互,通过原型的演进不断适应用户任务改变的需求。将维护和修改阶段的工作尽早进行,使用户验收提前,从而使软件产品更加适用。,传统软件工程,四、HIPO法(Hierarchy Plus InputProcessOutput),HIPO法(Hierarchy Plus InputProcessOutput),按功能层次结构分析法,74年由IBM公司推出的软件分析及设计方法,又称HIPO图。HIPO图是以功能、功能完备性准则逐层分解的。由直观目录表(H图),概要HIPO图,详细IPO图三部分组成。,面向对象软件工程,OOSD(Object-Oriented Software Development)法这是80年代推出的一种全新的软件开发方法。非常实用而强有力,被誉为90年代软件的核心技术之一。,其基本思想是:对问题领域进行自然的分割,以更接近人类通常思维的方式建立问题领域的模型,以便对客观的信息实体进行结构和行为的模拟,从而使设计的软件更直接地表现问题的求解过程。面向对象的开发方法以对象作为最基本的元素,是分析和解决问题的核心。,软件复用技术(基于构件的软件工程),“软件重用”或“软件复用”(Software Reuse)是指将已有的软件成分用于构造新的软件系统。该技术是提高软件生产率和质量,降低成本的有效方法。,一、复用方式复用程序:包括目标代码和源代码的复用,可通过连接(Link)、绑定(Binding)、包含(include)等功能支持及对象链接及嵌入(OLE)技术实现。,复用分析 比设计复用级别更高,实现方式与设计复用类似。,复用设计:设计结果比源程序的抽象级别高,因此复用受环境影响小。可以通过从现有系统中提取全部或者不同粒度的设计构件,或者独立于具体应用开发设计构件。,复用结构 复用模块结构或者数据结构。,软件复用技术(基于构件的软件工程),二、可复用的构件 构件是指可以被明确标识的软件制品,可以是软件开发不同阶段的产品。可复用构件是指可被其它系统复用,用于构成新系统的构件。,可复用构件的特性:1.独立性 解决相对独立的问题,与外界联系尽量少。2.完整性 既要包括完整的解决方案,还定义相应操作。3.通用性 在同类应用中具有一般性。4.可标识性 通过合适的命名,构件所解决的问题是可标识的。5.可适应性 适应环境变化。6.可靠性 对各个使用它的系统都具有高的可靠性。,两种程序设计方法,程序设计的两次飞跃 程序设计从主要依赖于程序员个人的自由活动变成有章可循的一门学科结构化程序设计面向过程的程序=算法+数据结构结构化程序设计到面向对象程序设计,是程序设计方法的又一次飞跃面向对象的程序=对象+消息,面向过程和面向对象的编码,例:VB的对象Form1下,两类软件工程方法,传统软件工程软件分析 总体设计 详细设计 面向过程的编码 测试,系统设计,面向对象软件工程软件分析与对象抽取 对象详细设计 面向对象的编码 测试,建立模型,运行与维护,面向对象的系统分析与设计方法,1.4 软件工程的应用,一、软件的分类,1、按照软件功能划分系统软件 如操作系统、设备驱动程序等。支撑软件(实用软件)协助用户开发的工具软件,如编辑程序、程序库、图形软件包等。应用软件 如工程与科学计算软件、CAD/CAM软件、CAI软件、信息管理系统等。,1.4 软件工程的应用,2、按照软件规模划分,3、按照软件工作方式划分实时处理软件交互式软件批处理软件4、按照软件服务对象的范围划分项目软件 由客户委托开发的软件。产品软件 由软件开发机构开发,提供给市场的。,此外,还可以按照软件使用的频度或软件失效的影响进行划分。,1.4 软件工程的应用,软件工程指导中小型软件软件工程指导大型软件软件工程的成就软件工程的局限,软件工程的最新发展动向,软件工程研究的最新动向软件形式语言的研究构件技术质量管理,1.5 应正确认识和处理好的几个关系,1.传统软件工程与现代软件工程的关系 虽然两类工程规范存在很大的差异,但他们还有不少共同点,许多在传统软件工程中总结的指导思想在面向对象软件工程中仍具有指导意义。有些在传统软件工程中行之有效的分析和设计方法(如模块化设计、抽象与细化等)在面向对象中继续适用,有些方法(如分析与设计建模)在面向对象中还有发展。并且,面向对象软件工程还有所发展,在面向对象软件工程趋于成熟的同时,新一代软件工程“构件工程”正在逐步扩大其应用范围。,1.5 应正确认识和处理好的几个关系,2.软件工程原理与软件工程方法的关系 软件工程总结了大量的精辟原理(清晰第一,效率第二;设计优先编码;使程序结构适合问题结构;开发伴随复用,开发伴随复用等)和科学方法(结构化分析;结构化设计;OO分析;OO设计;UML语言;白盒测试和黑盒测试等)。要注意原理(指导)和方法(应用)的结合。,1.5 应正确认识和处理好的几个关系,3.软件工程技术与软件工程管理的关系 软件工程技术与管理是软件开发的两个方面,没有管理,再好的技术都不能充分发挥作用。管理离不开度量,“靠度量来管理”已经成为现代管理的一条重要原则。软件度量学和软件经济学是该原则在软件工程中的具体体现。,1.5 应正确认识和处理好的几个关系,4.形式化方法与非形式化方法的关系 形式化方法是软件工程的高级研究课题之一,是一种基于数学的开发方法,它采用数学方法来描述系统的性质。非形式化方法主要用图、表、文本、符号等来描述系统模型。,1.5 应正确认识和处理好的几个关系,5.小程序设计与大程序设计的关系 不论大小软件,都应使用软件工程的原理方法来指导开发,只有学会有效地编写小程序,才可能有效地编写大程序。,作业,习 题 P1314 1.2.3.4.5.,1.软件危机的表现:软件复杂性的增长比软件规模的增长要快得多,成非线性增长。使得开发费用超出预算,完成时间严重超期,可靠性下降,质量保证越来越困难;计算机系统软件成本占整个系统的绝大部分。质量的下降对计算机应用的继续扩大构成巨大的威胁。软件危机的原因:软件维护费用的急剧上升,直接威胁计算机应用的扩大;软件生产技术进步缓慢,加剧了软件危机。2.采用工程化的原理和方法对软件进行计划、开发和维护。这样做的目的是按预期的进度和经费完成软件生产计划,同时提高软件的生产率和可靠性。早期的程序设计基于个人活动形式,各行其是,无统一的方法可言。4.5.方法与工具相结合,再加上配套的软硬件支持就形成环境。.,