




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件工程,任课教师: 施美玲 联系方式:第一章 绪论,软件工程Software Engineering,水利工程,建筑工程,机械工程, ,软件工程,本章将对软件的地位和作用、软件的特点、软件 的发展、软件的危机以及软件工程学科的形成、软件 生存期等方面的问题和基本概念做详细介绍。,传统工程,新兴工程,气象工程,生物工程,本章内容,思考?,什么是软件? 在软件开发过程中遇到哪些问题? 如何解决这些问题?,第1章绪论,什么是软件?有何特点? 何谓软件危机?如何解决? 软件工程是一门什么学科? 什么是软件的生存期? 有哪些软件开发模型?,因为软件危机,所以要通过软件工程的方
2、法加以解决。,一、软件及其发展,软件角色演化 软件的组成 软件的特点 软件的发展,软件角色演化,早期软件往往作为计算机硬件的附加件奉送。 软件的角色在跨越60余年的时间内已经经历了很大的变化: 硬件性能的极大提高; 计算机体系结构的深远变化; 内存和硬盘容量的快速增加; 奇特的输入输出的多种选择; 这些,促进了更为高级和更为复杂的基于计算机的系统。,软件角色演化,硬件芯片的集成度按摩尔定律翻番,并朝着通用化和标准化的方向发展,以便大规模批量生产。 软件朝着专业化和多样化的方向发展,以满足不同的需要。 20世纪80年代以来,以微软为首的一批新兴软件企业,开辟了全新的独立软件产业,并逐渐取代了硬件
3、产业。,软件角色演化,今天的信息产业,软件占有绝对主导地位。 今天,软件担任着双重角色。 它是一个产品,同时又是产品交付使用的载体。 它表达了由计算机硬件或更广地说可通过局部硬件访问的计算机网络所体现的计算潜能。,1. 软件的组成,software = program software developing = programming/coding,1983年IEEE为软件下的定义是:计算机程序、方法、规则和相关的文档资料以及在计算机上运行所必需的数据。,20世纪50年代:software = program 20世纪60年代:software = program + documents 20
4、世纪70年代:software = program + documents + data,1. 软件的组成,software = program + documents + data software developing programming/coding,目前对软件比较公认的解释是:软件是程序,支持程序运行的数据以及与程序有关的文档的完整集合。,程序按事先设计的功能和性能要求执行的指令序列 文档与程序开发,维护和使用有关的图文材料 数据使程序能正常操纵信息的数据结构,KeyPoint: 关于软件是什么的错误认识.。,程序 用程序设计语言描述的,适合于计算机处理的语句序列,文档,分类 开发
5、文档 用户文档 管理文档,作用 记录 通信和交流 管理和维护,2. 软件的特点,(1)软件是逻辑的,而不是物理的产品。逻辑往往实际只存在于人的头脑当中,软件的开发过程极难加以控制。定义“需要做什么”成为软件开发的根本问题,这些可视化建模技术仍然无法给出准确的、完整的描述和度量。(模型vs现实),(2)软件是由开发或工程化而形成的,没有明显的制造过程。软件成本集中于“开发”上,意味着软件项目不能像硬件制造项目那样来管理。(硬成本),(3)软件在运行和使用期间,不存在硬件那样的磨损和老化问题,但它存在退化问题,开发人员必须维护软件。(改动困难),软件可长期使用,人们总是认为软件是容易修改的,但忽视
6、了修改所带来的副作用,不断的修改最终导致软件的退化,软件退化问题,图a 是硬件故障率的变化曲线,即硬件在生命初期具有较高的故障率,这些故障主要是由于设计或制造的缺陷造成的。当这些缺陷修正后,故障率在一段时期内会降低到一个稳定的曲线上。随着时间的推移,硬件构件由于种种原因受到不同程度的损害,故障率又升高了。也就是说,硬件已经开始磨损了。 图b 是软件的故障率曲线,在软件的生命初期隐藏的错误会使程序具有较高的故障率,理想的情况下当这些错误改正后曲线便趋于平稳,但实际情况是随着这些修改有可能引入新的错误,从而使故障率曲线呈现图中所示的锯齿状。于是,软件的退化由于修改而发生了,(4)大多数软件是自定的
7、,而不是通过已有构件组装而成的。迄今为止,软件的开发尚未完全摆脱手工的方式。,(5)软件成本相当昂贵。 IBM360操作系统的研制人员最多时可达1000多人,从1963年到1966年共花了4年时间才完成,总计耗费了5000多人/年,以后又进行了不断的修改和补充。该系统的整个研制费用为5亿美元,其中近一半花在软件上。,(6)软件本身是复杂的。软件比任何其他人类制造的结构更复杂,甚至硬件的复杂性和软件相比也是微不足道的。软件本质上的复杂性是软件产品难以理解,影响软件过程的管理,并使维护过程十分复杂。,2. 软件的特点,软件的本质特征,软件的本质特征,软件的本质特征,软件的本质特征,软件的本质特征,
8、软件的本质特征,早期阶段程序设计阶段 在计算机发展的早期阶段,人们认为计算机的主要用途是快速计算,软件编程简单,不存在什么系统化的方法,开发没有任何管理,程序的质量完全依赖于程序员个人的技巧。 编程是在一种无序的、崇尚个人技巧的状态中完成的。当时的软件特点: 1)规模小、无规范与标准; 2)编程作为一门技艺,程序员的素质决定软件质量; 3)缺少有效方法与软件工具的支持; 4)不重视软件开发的管理; 5)软件的维护工作很难进行。,3. 软件的发展,2. 第二阶段-程序系统阶段,从60年代中期到70年代末期 多用户系统引入了人机交互的新概念, 实时系统能够从多个源收集、分析和转换数据,从而使得进程
9、的控制和输出的产生是以毫秒而不是分钟来进行, 产生了第一代数据库管理系统 出现了软件产品和“软件作坊”的概念,设计人员开发程序不再像早期阶段那样只为自己的研究工作需要,而是为了用户更好地使用计算机。被开发的软件可以在较宽的范围内使用。主机、微机上的程序可以有数百上千的用户。 出现了“软件危机”问题。在开发大型软件时,遇到了许多困难: 1)有些系统彻底失败; 2)有些系统比原计划推迟了好几年; 3)有些系统的费用大大超过了预算; 4)有些系统未能圆满符合用户的当初期望; 5)有些系统无法进行维护。 采用“软件工程”的方法来解决“软件危机”问题。,3. 软件的发展,3. 第三阶段软件工程阶段,19
10、70年代中期-1980年代末期 分布式系统极大地提高了计算机系统的复杂性,网络的发展对软件开发提出了更高的要求, 特别是微处理器的出现和广泛应用,孕育了一系列的智能产品。 软件开发技术的度量问题受到重视,最著名的有软件工作量估计COCOMO模型、软件过程改进模型CMM等。,3. 软件的发展,4. 第四阶段,强大的桌面系统和计算机网络迅速发展的时期 计算机体系结构由中央主机控制方式变为客户机/服务器方式 专家系统和人工智能软件进入了实际应用, 出现了并行计算和网络计算的研究, 面向对象技术在许多领域迅速取代了传统软件开发方法 软件从个性化的程序变为工程化的产品, 从“软件程序”发展为“软件程序数
11、据文档”。软件的需求成为软件发展的动力, 软件工作的考虑范围不再只顾及程序的编写,而是涉及到软件的整个生命周期。,3. 软件的发展,二、软件危机,含义 表现 原因 克服危机的途径,(1)软件危机含义,Software Crisis 所谓软件危机,就是指在软件开发和软件维护过程中所存在的一系列严重问题。 现代计算机应用系统中,软件的地位日益重要和突出。 开发:如何满足日益增长的软件需求。 维护:如何维护应用中的大量已有软件。 已经成为了计算机应用系统进一步发展的瓶颈。,(2)软件危机的表现,软件开发没有真正的计划性,对软件开发进度和软件开发成本的估计常常很不准确,计划的制定带有很大的盲目因素。
12、对于软件需求信息的获取常常不充分,软件产品往往不能真正地满足用户的实际需求。 缺乏良好的软件质量评测手段,从而导致软件产品的质量常常得不到保证。,(2)软件危机的表现,对于软件的可理解性、可维护性认识不够;软件的可复用性、可维护性不如人意。 软件开发过程没有实现“规范化”,缺乏必要的文档资料或者文档资料不合格、不准确,难以进行专业维护。 软件开发的人力成本持续上升。 缺乏自动化的软件开发技术,软件开发的生产率依然低下,远远满足不了急剧增长的软件需求。,软件危机的例子,IBM 360操作系统 开发时间:1963-1966年 投入人力:5000人/年 代码量: 近100万行 新版本: 从上一版本中
13、找出1000个错误修订而成 结果: 软件质量非常糟糕,软件几乎无法维护 负责人总结:“正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷的越深,最后无法逃脱灭顶的灾难,程序设计工作就像这样一个泥潭,一批批程序员被泊在泥潭中拼命挣扎,谁也没有料到问题竟会陷入这样的困境”。,软件危机的例子,为什么? 为什么需要那么长时间才能结束开发? 为什么成本如此之高? 为什么我们不能在把软件交给客户之前就发现所有的错误? 为什么在软件开发过程中我们难以度量其进展? 大型系统的软件生产已经成了管理人员担惊受怕的项目。 于是,20世纪60年代后期,人们惊呼发生了软件危机(Software crisis)。 软
14、件危机主要包含两方面问题: 1)如何开发软件以满足对软件日益增长的需求; 2)如何维护数量不断增长的已有软件。,(3)原因,产生软件危机的原因可以归纳为主、客观两个方面。 从客观上来看,软件不同于硬件,它的生产过程和产品都具有明显的“不可视”特征,这就导致在完成编码并且上机运行之前,对于软件开发过程的进展情况较难衡量,软件产品的质量也较难进行先期评价,因此,对于开发软件的过程进行管理和控制比较困难。,(3)原因,产生软件危机的原因可以归纳为主、客观两个方面。 从主观上分析,导致软件危机发生的另一大原因,可以归于在计算机系统发展的早期,软件开发的“个体化”特点,主要表现为忽视软件需求分析的重要性
15、、忽视软件的可理解性、文档不完备、轻视软件的可维护性、过分强调编码技巧等等方面。,(4)克服危机的途径,基于软件危机产生的主、客观原因,应从软件工程技术和软件工程管理两方面来采取措施,防范软件危机的发生。 从管理层面上考虑,应当注意推广和使用在实践中总结出来的开发软件的成功的技术和方法,并且探索更好的、更有效的技术和方法,注意积累软件开发过程中的经验数据财富,逐步消除在计算机系统早期发展阶段形成的一些错误概念和做法。,(4)克服危机的途径,从技术角度考虑,应当开发和使用更好的软件开发工具,提高软件开发效率和开发工作过程的规范化程度 目前广为使用的统一建模语言(UML)、各种配置管理工具、缺陷管
16、理工具和自动测试工具都在软件工程活动中发挥了很好的作用。 计算机辅助软件工程(CASE)更是目前备受重视的一个旨在实现软件开发自动化的新的领域。,三. 软件工程,研究“大型”软件开发和维护的技术、方法、工具、环境和管理的工程学科。,(1)工程,工程是对技术(或社会)实体的分析、设计、建造、验证和管理。,工程的含义,工程的特征,工程的特征,(2)软件工程,提出 1968年,Fritz Bauer正式提出SE概念 定义 软件工程是指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明是正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济
17、地开发出高质量的软件并有效地维护它。,软件工程三要素,方法 为软件开发提供“如何做”的技术。包括多方面的任务,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法的设计、编码、测试以及维护等。 常采用某种特殊的语言或图形的表达方法及一套质量保证标准 工具 (如,Rational Rose) 为软件工程方法提供了自动的或半自动的软件支撑环境。 过程 将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。回答:“何时做”。 过程定义了方法使用的顺序、要求交付的文档资料、为保证质量和协调变化所需要的管理、及软件开发各阶段完成的里程碑(基线),软件工程的目标,成功
18、地建造一个大型软件系统,具体地讲: 付出较低的开发成本 达到要求的软件功能 取得较好的软件性能 开发的软件易于移植 需要较低的维护费用 能按时交付用户使用 开发的软件可靠性高,软件工程目标之间的关系,互斥关系,互补关系,软件工程关注的焦点问题,理解软件质量,理解软件质量,软件工程的基本原理,用分阶段的生命周期计划严格管理 六类重要计划:项目概要、里程碑、项目控制、产品控制、验证、运行维护 坚持进行阶段评审(必须遵循的重要原则) 实行严格的产品控制(基线配置管理) 采用现代程序设计技术 结果应能清楚地审查 开发小组的人员应少而精 承认不断改进软件工程实践的必要性 是确保软件产品质量和开发效率的重
19、要因素,软件工程的内容,软件开发的技术 主要研究:开发方法、开发过程、开发工具和开发环境 其中,方法、工具、过程是软件工程的三要素 软件开发的管理 主要研究:软件管理学、软件经济学、软件心理学 软件过程管理技术 主要研究:软件过程的优化技术,变更管理。,软件工程面临的问题,降低软件的费用 人力资源远远不能适应迅速增长的软件社会需求 提高软件的可靠性 指软件系统能否在既定的环境条件下运行并实现所期望的结果 提高软件的可维护性 维护费用占整个软件系统费用的2/3 提高软件的生产率 提高软件的重用性,软件工程方法学,通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。 传统
20、方法 面向对象的方法,传统方法 (生命周期方法),结构化方法学(结构化范型) 采用结构化技术(结构化分析、结构化设计、结构化程序设计)完成软件的开发。它是一种面向数据流的开发方法。该方法采用自顶向下、逐步求精的指导思想,应用较广,技术成熟。 结构化分析是根据分解与抽象的原则,按照系统中数据处理的流程,用数据流图来建立系统的功能模型,从而完成需求分析工作。 结构化设计是根据模块独立性准则、软件结构准则将数据流图转换为软件的体系结构,用软件结构图来建立系统的物理模型,实现系统的概要设计。 结构程序设计是根据结构程序设计原理,将每个模块的功能用相应的标准控制结构表示出来,从面实现详细设计。 结构化方
21、法不适应规模大的项目,对于特别复杂的项目,该方法难于解决软件重用问题,难于适应需求变化的问题,难于彻底解决维护问题。,面向对象的方法,面向对象的开发方法完全不同于传统开发方法,它是90年代的主流开发方法。 面向对象开发方法包括面向对象分析、面向对象设计、面向对象实现。 面向对象开发方法有Booch方法、Coad方法和OMT方法等。 为了统一各种面向对象方法的术语、概念和模型,97年推出了统一建模语言,即UML(Unified Modeling Language)语言。它是面向对象的标准建模语言,通过统一的语义和符号表示,使各种方法的建模过程和表示统一起来,将成为面向对象建模的工业标准。,开发方
22、法比较,结构化范型 生命周期的各个阶段中使用的概念及应完成的任务性质显著不同。 分析阶段: 任务:回答做什么?概念:功能 设计阶段: 任务:回答怎么做?把软件分成模块。概念:模块 详细设计: 任务:设计实现每个模块的数据结构和算法。概念:算法和数据结构。,开发方法比较,面向对象范型 利用现实世界的概念思考问题,从而自然地解决问题。 面向对象分析。提取应用领域有意义的对象。 面向对象软件的模块就是对象。 实际上在面向对象分析阶段就开始做设计了。 面向对象设计。 基本任务是扩充和完善面向对象分析所建立的对象模型,把它转化为解空间的对象模型。 面向对象范型软件开发各个阶段使用的概念和表示方法一致。,
23、四、软件的生命周期(Software Life Cycle),软件产品从形成概念开始,经过开发、使用和维护,直到最后退役的全过程。,软件生存期的3个时期、6个阶段,维护,软件生存期,软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存期。 软件生存期的六个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护,软件生存期,软件的生存期,软件生存期,(1) 制订计划 确定要开发软件系统的总目标 给出功能、性能、可靠性以及接口等方面的要求 完成该软件任务的可行性研究 估计可利用的资源 (硬件,软件,人力等)、成本、效益、开发进度 制定出完成开发任务的实施计划,连同可行
24、性研究报告,提交管理部门审查,软件生存期,(2) 需求分析和定义 对用户提出的要求进行分析并给出详细的定义 编写软件需求说明书或系统功能说明书及初步的系统用户手册 提交管理机构评审,软件生存期,(3) 软件设计 概要设计 把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应 详细设计 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础 编写设计说明书,提交评审。,软件生存期,(4) 程序编写 把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单” 写出的程序应当是结构良好、清晰易读的,且与设计相一致的,软
25、件生存期,(5) 测试阶段 单元测试,查找各模块在功能和结构上存在的问题并加以纠正 组装测试,将已测试过的模块按一定顺序组装起来 按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用,软件生存期,(6) 运行/维护 改正性维护 运行中发现了软件中的错误需要修正 适应性维护 为了适应变化了的软件工作环境,需做适当变更 完善性维护 为了增强软件的功能需做变更,软件生存期,分析与设计的比较,分析 能很好地将系统需求映射到软件设计师所关注的领域形式 关注的是确保系统的功能性需求 可以忽略许多非功能性需求,以及实现环境的约束 最终展示的是一幅近乎理想的系统画面,设计 使分析的
26、结果能适应非功能性需求、实现环境、性能需求等产生的约束 是分析的精化 关注的是确保完全覆盖需求,以及系统设计的优化 如果设计非常精确,代码就可以完全依赖于设计,五、软件开发的目标,六、软件开发模型,常用的开发模型 编码修正模型 瀑布模型 快速原型模型 增量模型 螺旋模型 喷泉模型,六、软件开发模型,1. 编码修正模型(code and fix model),软件开发只有两个阶段 编写程序代码 修改程序代码 作坊式生产方式 缺点 低估分析和设计,代码结构差,难修改 不重视需求,开发风险大,用户不满意 难修改、难维护,1. 编码修正模型(code and fix model),在这个模型中,开发人
27、员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户满意为止。 这是一种类似作坊的开发方式,对编写几百行的小程序来说还不错,但这种方法对任何规模的开发来说都是不能令人满意的,其主要问题在于:(1) 缺少规划和设计环节,软件的结构随着不断的修改越来越糟,导致无法继续修改;(2) 忽略需求环节,给软件开发带来很大的风险;(3) 没有考虑测试和程序的可维护性,也没有任何文档,软件的维护十分困难,2. 瀑布模型(Waterfall Model),1970,W. Royce提出 软件生存周期模型,流水式
28、过程模型 生命周期方法学 阶段划分方法 控制复杂性,Definition,Feasibility Study,Requirements Analysis,System Design,Program Design,Coding & Module Testing,Integration & System Testing,Delivery & Maintenance,System Lifecycle,Waterfall Model,传统的瀑布模型,瀑布模型的特点,基本思想:“分而治之” 特点 相邻阶段依赖性 推迟实现的观点 质量保证的观点(文档与评审) 优点 迫使开发人员采用规范的方法 严格规定了每
29、阶段必须提交的文档 要求各阶段的产品必须经过质量验证 缺点 需求难开始就完全确定 文档驱动,风险大 开发期长,一旦修改,则损失惨重 不支持软件复用和集成技术,传统的瀑布模型,带“反馈环”的瀑布模型,瀑布模型的特点,适用范围 结构化方法,面向过程的软件开发方法 需求变化少 开发人员熟悉领域 低风险项目 使用环境稳定,3. 原型模型(Prototyping Model),针对:软件开发初期需求难以确定 工程上经常使用的“原型” 快速原型法(Rapid Prototyping) 基本思想:快速建立原型,完善用户需求 快速建立起来的可以在计算机上运行的程序,他所能完成的功能往往是最终产品能完成的功能的
30、一个子集。,原型模型,Prototyping Model,需求的采集和细化,快速设计,建造原型,客户评价原型,针对原型 完善需求,生产样品,开始,停止,快速开发原型的途径,模拟软件系统的人机界面和人机交互方式 开发工作原型,实现软件系统的部分功能 找来正在运行的类似软件,原型模型的特点,特点 线性开发模型(不带“反馈环”) 减少开发活动的盲目性和需求不确定 开发的系统能满足需求,修改较小 优点 处理模糊需求 用户参与 快速 缺点 快速(弱功能) 资源规划和管理较为困难 对开发环境要求高,适用范围 已有产品(原型) 简单而熟悉的领域 有快速原型开发工具 进行产品移植或升级,软件开发的风险,产品交
31、付给用户之后用户可能不满意 到了预定的交付日期软件可能还未开发出来 实际的开发成本可能超过预算 产品完成前一些关键的开发人员可能“跳槽”了 产品投入市场之前竞争对手发布了一个功能相近、价格更低的软件,4. 螺旋模型(Spiral Model),1988,TRW公司BARRY W. Boehm提出 风险分析,Waterfall Model,Prototyping Model,Risk Analysis,Spiral Model,螺旋模型的特点,针对:前面的模型没有提供“驾驭软件风险”功能 基本思想:降低风险 制定计划 planning 定目标,选方案,明确开发限制条件 风险分析 risk analysis 分析所选方案, 识别风险, 通过原型消除风险 实施工程 engineering, construction and release 开发实施软件开发(利用快速原型构造方法) 客户评估 customer evaluation 评价开发工作,提
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业股东合同样本
- 上海市旅游合同样本
- 做桥架合同样本
- 人文环境整治合同样本
- 代理服务提成合同样本
- 企业商业策划合同样本
- 代驾服务合同范例二零二五年
- 简易招聘合同范例二零二五年
- 专业苗木购销合同
- 国内货车租赁合同
- DB32-T 4416-2022《高延性纤维增强水泥基复合材料加固砌体结构应用技术规程》
- 游泳池防水施工方案
- 基于PLC控制的物料分拣系统设计最终
- 医院医疗缺陷管理办法
- 山西省煤矿建设标准
- 电烙铁点检表
- 物流企业入职申请表范文
- 高等数学全书教案完整版电子教案整本书教案最全单元教学设计1-10章全
- Q∕GDW 12152-2021 输变电工程建设施工安全风险管理规程
- 云南省地质灾害群测群防手册
- 初中生如何与父母相处(课堂PPT)
评论
0/150
提交评论