资源预览内容
第1页 / 共92页
第2页 / 共92页
第3页 / 共92页
第4页 / 共92页
第5页 / 共92页
第6页 / 共92页
第7页 / 共92页
第8页 / 共92页
第9页 / 共92页
第10页 / 共92页
亲,该文档总共92页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1,软件工程基础,2,9.1 软件及软件工程,3,1、软件的概念,软件包括程序、数据及其相关文档的完整集合。 程序 是完成特定功能和满足性能要求的指令序列。 数据 是程序执行允许的基础和操作的对象。 文档 是与程序开发、维护和使用有关的图文材料。 特点:复杂性、不可见性与不断变化性,4,2、软件危机,软件危机是指在计算机软件的开发、使用与维护过程中所遇到的一系列严重问题和难题;这些问题和难题不仅仅存在于不能正常运行的软件中,几乎所有的软件都不同程度的存在这些问题。,5,软件危机的表现,1)软件开发成本和维护成本常常高出预算。 2)软件开发进度远远长于计划进度。 3)软件开发设计完成并交付使用运行后,却发现并不能满足或实现用户的实际需求。 4)软件产品的质量不能保证,用户在使用过程中经常出现问题和故障。 5)没有完整的软件技术文档资料,使软件的运行维护面临重重困难。 6)软件开发生产速度和效率的提高远远不及用户对软件发展的需求。,6,软件危机的典型事例,20世纪80年代初 美国Sperry公司为国税局开发联邦税收表格自动处理系统,系统第一次交付运行后,华盛顿邮报称:该系统并不称职,却花费了双倍于预期的费用,而且必须尽快有新系统来代替他。,1985年 在已经花费了10300万美元的基础上,Sperry又追加了9000万美元的设备费用投入。 系统错误导致国税局无法如期退税,国税局因此增加了4020万美元的利息支出。 工作人员为此大量加班,国税局为此额外支出2230万美元的加班工资。,1996年 洛杉矶时报(3月29日)称:国税局至今仍无有力的信息化建设计划,只有一个六千页的技术文档而已 国会议员 Jim Lightfoot 将此项目称为“一个因规划不利而痛苦挣扎的40000亿美元的败笔”,7,典型问题,90年代,IBM公司负责开发的“OS/360系统” 包括4000个模块 约100万条指令 花费了5000人年的工程量 经费达数千万美元 结果却失败了,8,典型问题,1996年6月,美国Ariane 5火箭在升空37秒后爆炸;直接损失70亿美元 原因是浮点数转换为整数时,发生溢出而程序系统没有做相应的异常处理 1991年海湾战争时,因程序的累加计时器设计错误,导致一枚导弹误伤了在沙特地区的28名美国士兵性命的事故,9,典型问题,2003年8月12日爆发的“冲击波”病毒,瞬间导致全球范围内数以亿计的计算机中毒 全球有40万台主机被感染;全国有几十万台计算机被感染;直接损失为几十亿美元 追究其根本原因,病毒中有一段文字最能说明问题:“比尔盖茨,你为什么要暴露这样的漏洞?别光顾着挣钱了,好好收拾你的软件吧。” 之后,微软逐步加快了系统漏洞检测和补丁发布的速度,10,问题的原因归结为软件危机,出现问题的根本原因统一归结为“软件危机” 以上是软件危机的典型事例 这样的问题举不胜举 “软件危机”表现在软件应用的许多方面,11,解决软件危机的途径,从观念上端正认识 从技术上建立规范 从组织上完善管理,12,从技术和管理上解决的途径,借鉴成熟的工程思想;把工程领域中行之有效的工程学知识运用到软件开发工作中来 即将“工程化”思想导入软件的开发生产 “工程化”的基本思想就是用工程、科学和数学的原则和方法,来开发、维护计算机软件的有关技术和管理软件开发的组织活动 于是,开创了计算机科学技术的一个新的研究领域,13,3、软件工程的意义,1)软件工程的定义 国标GB/T114571995中关于软件工程术语的定义是:软件工程是软件开发、运行、维护和引退的系统方法 软件工程的经典定义(1993年,IEEE提出):1- 把系统的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中 2- 研究1-中提到的途径,14,2)软件工程的研究内容,软件工程的主要研究内容包括软件开发技术和软件工程管理 软件开发技术包含了软件开发方法、软件工具和软件过程 软件工程管理包含了软件工程经济和软件生产的组织管理,15,软件开发技术的研究,软件开发技术的研究包括 软件工程的方法 软件开发的工具 软件开发的过程 软件工程的三要素,16,软件工程三要素,软件工程中的过程是由为最终实现软件开发的总任务而进行的阶段划分,以及各阶段工作目标,共同组成的工作框架 软件工程中的方法是完成软件开发各阶段中各项工作任务的技术手段 软件工程使用的工具是为方法的运用而提供的支持软件的开发、管理和文档生成的支撑环境,17,9.2 软件生命周期,18,9.2 软件生命周期,软件开发生产的全过程又被称为“软件生命周期”。 “软件生命周期”是软件工程理论中最重要的概念 “软件生命周期”由三个时期组成 软件定义时期 软件开发时期 软件维护时期 并进一步划分为八个阶段,问题定义 可行性研究 需求分析 总体设计 详细设计 程序编码 软件测试 运行与维护,19,1-问题定义,该阶段是软件生存其中最短的阶段 确定系统的目标、规模和基本任务 对系统用户和使用单位进行调查,建立“问题定义报告”,20,2-可行性分析,对问题定义阶段确定的系统目标进行全面的分析,具体地确定工程的规模,并估计系统的成本和效益,确定问题是否具有可行性,决定系统是否需要开发的结论 经济可行性:确定系统的硬件资源和软件资源的需求规格,估算软件开发成本,分析系统的经济效益是否能超过它的总成本以及市场的需求情况 技术可行性:分析现有的技术能否实现系统目标 形成可行性分析报告;解决做不做的问题,21,3-需求分析,分析、整理、提炼用户的需求,定义软件的功能 建立完整的用户需求分析模型 模型是用专门技术手段记录描述的数据组织形式、功能结构和控制方式,分别对应数据模型、功能模型和控制模型 编写软件需求规格说明书 解决“做什么”的问题,22,4-软件总体设计,软件设计的任务是解决“如何做”的问题 软件设计包括总体(概要)设计和详细设计; 前者解决功能划分、结构确定和模块定义; 中者解决各模块的具体算法,23,4-软件总体设计,总体设计也称为概要设计 将系统功能划分到模块 确定每个模块的功能 确定模块间的调用关系 确定模块间的接口及信息通信 评价模块结构的质量 编写总体设计文档:设计说明书、集成测试计划书,24,5-详细设计,为总体设计确定的每一个模块确定具体的算法和局部的数据结构 用专门工具记录描述算法和数据结构的细节 将细节的描述汇总成为详细设计说明书,25,6-编码,作为软件设计的最后一个阶段 根据详细设计的结果 选择适当的计算机语言 把软件的设计转换成计算机可以接受的程序代码 本阶段的文档是“源程序清单”,26,7-软件测试,测试不是为了证明程序是正确的,而是设法暴露程序中的错误和缺陷 测试只能说明程序有错,而不能证明程序无错 测试是程序执行的过程,目的在于发现错误 一个好的测试在于能发现至今未发现的错误 一个成功的测试是发现了至今未发现的错误 一般应当避免由开发者测试自己的程序 通过有限次的测试就能发现程序中的所有错误是不可能的,即完全测试是不可能的。所以程序也不可能具有百分之百的可靠性。 软件测试的结果是软件测试报告,27,静态测试与动态测试,前者是基于人工的测试 代码程序检查 后者是基于计算机的测试 使用设计的测试数据运行程序 有专门的测试方法,28,8-软件的运行维护,软件交付使用,进入运行与维护 维护是必须的; 运行维护工作包括 确定运行维护方案 纠正错误 改进系统 完善性能 扩充功能 评审验收,29,软件过程的意义和目标(补充),30,阶段划分与执行顺序(补充),“软件生命周期”不仅仅确定了软件开发全过程的各个阶段划分,还同时确定各个阶段应该完成的工作任务 但并没有统一地确定各个阶段的执行顺序 在一个实际的软件开发活动中,各个阶段的执行能够顺序往往是不同的 往往会出现“阶段重复”或“阶段迭代”,31,软件工程将“阶段划分”和“执行顺序”综合考虑,采用一种非文字的图形方式,抽象概括地描述实际的软件开发活动,称为“软件生命周期模型”;又称为“软件开发模型” 由于各个阶段执行顺序不同,软件生命周期模型也有多种类型 瀑布模型 演化模型 螺旋模型 喷泉模型,软件开发模型,32,典型的模型_瀑布模型,瀑布模型是最传统、最古老、应用最普遍、最广泛的软件生命周期模型;也称为“生命周期模型” 瀑布模型包含了软件生命周期的8个阶段,33,瀑布模型,问题定义,软件测试,运行维护,需求分析,可行性研究,总体设计,详细设计,编码,34,瀑布模型的特点,1.阶段间具有顺序性和依赖性。必须等前一阶段的工作完成后,才开始后一阶段的工作;前一阶段的输出文档是后一阶段的输入文档;只有保证前阶段工作的正确,后阶段的工作才有可能获得正确的结果 2.推迟编码的观点。在编码阶段之前设置了分析和设计的多个阶段,并要求在各分析和设计阶段未完成之前不进行编码 3.质量保证的观点。每个阶段必须完成规定的文档;每个阶段结束前都必须完成文档审查,35,软件工程对“过程”的研究是充分的;明确确定了软件开发生产的过程以及各阶段的工作规范 同时软件工程提供了进行各个阶段工作可采用的方法和可使用的工具 方法包括“分析方法”、“设计方法”和“程序代码的编辑方法” 方法分为“结构化方法”和“面向对象方法”两个大类 对于每一种方法都提供了一系列的工具,36,9.3 软件开发方法简介,37,软件开发方法,软件开发方法是软件开发过程所遵循的方法和步骤;集中体现为: 软件分析方法 软件设计方法 程序设计方法 分为结构化方法和面向对象方法 结构化方法的核心和基础是结构化程序设计的理论,38,结构化方法,着眼于数据流向,自顶向下,逐层分解,建立系统的数据处理流程和实现方式 结构化方法也称为面向过程的方法 按照 “自顶向下”和“逐步求精”的原则,将整个问题地分解为一系列的具有一定逻辑关系的“子问题” 一个较大的问题又可分解为或包含着更小的问题 针对每个问题,进行软件设计和编写程序代码,39,面向对象方法,将问题分解为一系列功能独立又互相联系的“对象” 针对每个对象进行规划设计、编写程序代码,40,结构化方法下的 软件开发工具,41,1-结构化需求分析与工具,结构化分析就是使用软件工程提供的工具,在充分分析用户需求的基础上,建立软件系统功能的逻辑模型 常用的工具 数据流图 数据字典 判断树 判断表,42,数据流图,是根据数据处理的过程,描述用户需求的的工具 是需求分析中,理解和记录用户需求的图形表示 他最终表述的软件系统的全部功能,43,数据流图4个基本图符,44,数据流与数据加工的关系,45,利用数据流图分析软件功能,数据流图是为表示和记录用户需求,由软件工程提供的工具 他支持的是结构化的分析方法 即自顶向下,逐层分解,逐步求精 最终以分层的数据流图,反映系统的整体功能,46,分层的结构化需求分析例,47,分层的数据流图,在多层数据流图中,顶层数据流图仅包含一个加工,它代表的是整个软件系统。它的输入流是该系统的输入数据,输出流是系统所输出数据 底层数据流图是指其加工不需再做分解的数据流图,它处在最底层 中间层数据流图则表示对其上层父图的细化。它的每一加工都可能继续再细化,形成子数据流图,48,数据字典,数据字典是对于数据流中诸数据(即对于在数据流图中每一个被命名的图形元素)的定义和描述 定义和描述使用规范的确定的“符号” 数据词典与数据流图配合,以更清楚地表达用户对数据处理的要求,49,数据字典所用符号,符 号 含 义 举 例 被定义为 与 x = ab.,. 或 .|. 或 x = a , b,x = a | bm.n 重复 x = 1数字字符8(.) 可选( 可不选) x = (a)“.” 基本数据元素 x = “a”(a 是基本数据)连结符 x = 19(1 到 9 ),
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号