软件工程-贺志军.ppt_第1页
软件工程-贺志军.ppt_第2页
软件工程-贺志军.ppt_第3页
软件工程-贺志军.ppt_第4页
软件工程-贺志军.ppt_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

第1讲软件和软件工程 贺志军北师大珠海分校信息技术学院励耘楼small308 软件工程之 用工程化的方法来开发软件 CopyrightZhijunHe 软件和软件工程 2 本讲内容 计算机软件 概念 特点 分类 语言 软件危机 表现和根源 软件工程 概念 研究内容 发展历程 实践框架 CopyrightZhijunHe 软件和软件工程 3 计算机软件 什么是计算机软件计算机软件的特点 CopyrightZhijunHe 软件和软件工程 4 可执行部分 不可执行部分 什么是计算机软件 计算机系统中的程序及其文档的集合 文档是为了便于了解程序所需的阐明性资料 文档一般是给人看的 不一定装入计算机 程序 CopyrightZhijunHe 软件和软件工程 5 什么是程序 1 2 程序 由程序设计语言所描述的 能为计算机所识别 理解和处理的语句序列程序例子Main inti j 变量定义charStr 10 i i j 语句说明 CopyrightZhijunHe 软件和软件工程 6 什么是程序 2 2 程序设计语言具有良好 严格语法和语义目前程序设计语言主要有以下几种类型面向机器 如汇编语言 机器语言等面向过程 如Fortran Pascal C等等面向对象 如Java等等面向问题 如结构化查询语言SQL等等 Evolutionofsoftware 早期第二阶段第三阶段第四阶段 面向批处理 多用户 分布式系统 强大的桌面系统 有限的分布 实时 嵌入 智能 面向对象技术 自定义软件 数据库 低成本硬件 专家系统 软件产品 消费者的影响 人工神经网络 并行计算 网络计算机 1950 1960 1970 1980 1990 2000 CopyrightZhijunHe 软件和软件工程 8 软件的发展 1946 1956年从计算机问世到实用的高级程序语言出现前存储容量比较小 运算速度比较慢采用个体工作方式 用低级语言编写程序应用领域主要是以数值数据处理为主的科学计算 其特点是输入 输出量较小衡量程序质量的标准主要是功效 即运行时间省 占用内存小主要研究内容是科学计算程序 服务性程序和程序库 研究对象是顺序程序 CopyrightZhijunHe 软件和软件工程 9 1956 1968年从实用的高级程序语言出现到软件工程出现前存储器容量大 外围设备得到迅速发展 出现了高级程序设计语言应用领域包括数据处理 非数值数据 其特点是计算量不大 但输入 输出量却较大高速主机与低速外围设备的矛盾突出 出现了操作系统 并发程序 数据库及其管理系统20世纪60年代初提出了软件一词 开始认识到文档的重要性研究高级程序设计语言 编译程序 操作系统 支持编程的工具及各种应用软件工作方式逐步从个体方式转向合作方式出现软件危机 CopyrightZhijunHe 软件和软件工程 10 1968年 至今从软件工程出现到现在硬件向巨型机和微型机二个方向发展 出现了计算机网络 软件方面提出了软件工程 出现了 计算机辅助软件工程 CASE 计算机的应用领域渗透到各个业务领域 出现了嵌入式应用 其特点是受制于它所嵌入的宿主系统开发方式逐步由个体合作方式转向工程方式软件工程方面的研究主要包括软件开发模型 软件开发方法及技术 软件工具与环境 软件过程 软件自动化系统等软件方面研究以智能化 自动化 集成化 并行化 以及自然化为标志的软件开发新技术 CopyrightZhijunHe 软件和软件工程 11 程序模型演化 追求更具表达能力 更符合人类思维模式 易构造 易演化的计算模型软件基本模型 实体元素 连接和交互 CopyrightZhijunHe 软件和软件工程 12 程序开发技术演化 尽可能提高软件开发的效率和质量 凝练共性并复用 CopyrightZhijunHe 软件和软件工程 13 软件特点 开发而成非制造产生的 逻辑产品 智力 无形 非物理产品维护困难和复杂 完善 纠错 不会老化磨损 只会失效 维护引起的副作用 CopyrightZhijunHe 软件和软件工程 14 软件失效曲线 CopyrightZhijunHe 软件和软件工程 15 软件特点 生产只需复制软件开发性质如成本 进度等难以估计软件的开发更加依赖于开发人员的业务素质 智力 人员的合作 组织和管理软件的开发和运行常受到计算机硬件的限制 对计算机硬件有着不同程度的依赖性软件的开发至今尚未完全实现自动化软件成本相当昂贵相当多的软件工作涉及到社会因素 CopyrightZhijunHe 软件和软件工程 16 软件的分类 按工作范围和使用特点分 系统软件 系统软件是一组为其他程序服务的程序 一些系统软件 如编译器 编辑器和文件管理程序 处理复杂的但也是确定的信息结构 其他的系统应用 如操作系统 驱动程序和通讯进程等 则处理大量的非确定的数据 不管哪种情况 系统软件均具有以下特点 与计算机硬件频繁交互 多用户支持 需要精细调度 资源共享及灵活的进程管理的并发操作 复杂的数据结构 及多外部接口 CopyrightZhijunHe 软件和软件工程 17 软件的分类 商业软件 商业信息处理是最大的软件应用领域 具体的 系统 如工资表 帐目支付和接收 存货清单等 均可归为管理信息系统 MIS 软件 它们可以访问一个或多个包含商业信息的大型数据库 该领域的应用将已有的数据重新构造 变换成一种能够辅助商业操作和管理决策的形式 除了传统的数据处理应用之外 商业软件应用还包括交互式的和客户机 服务器式的计算 如POS事务处理 CopyrightZhijunHe 软件和软件工程 18 软件的分类 实时软件 管理 分析 控制现实世界中发生的事件的程序称为实时软件 实时软件的组成包括 一个数据收集部件 负责从外部环境获取和格式化信息 一个分析部件 负责将信息转换成应用时所需要的形式 一个控制 输出部件 负责响应外部环境 及一个管理部件 负责协调其他各部件 使得系统能够保持一个可接受的实时响应时间 一般从1毫秒到1分钟 应该注意到术语 实时 不同于 交互 或 分时 一个实时系统必须在严格的时间范围内响应 而一个交互系统 或分时系统 的响应时间可以延迟 且不会带来灾难性的后果 CopyrightZhijunHe 软件和软件工程 19 软件的分类 工程和科学计算软件 工程和科学计算软件的特征是 数值分析 算法 此类应用含盖面很广 从天文学到火山学 从汽车压力分析到航天飞机的轨道动力学 从分子生物学到自动化制造 不过 目前工程和科学计算软件已不仅限于传统的数值算法 计算机辅助设计 系统仿真和其他交互应用已经开始具有实时软件和系统软件的特征 CopyrightZhijunHe 软件和软件工程 20 软件的分类 嵌入式软件 智能产品在几乎每一个消费或工业市场上都是必不可少的 嵌入式软件驻留在只读内存中 用于控制这些智能产品 嵌入式软件能够执行很有限但专职的功能 如微波炉的按钮控制 或是提供比较强大的功能及控制能力 如汽车中的数字控制 包括燃料控制 仪表板显示 刹车系统等 CopyrightZhijunHe 软件和软件工程 21 软件的分类 个人计算机软件 个人计算机软件市场是在过去十年中萌芽和发展起来的 字处理 电子表格 计算机图形 多媒体 娱乐 数据库管理 个人及商业金融应用 外部网络或数据库访问 这些仅仅是成百上千这类应用中的几种 CopyrightZhijunHe 软件和软件工程 22 软件的分类 人工智能软件 人工智能 AI 软件利用非数值算法去解决复杂的问题 这些问题不能通过计算或直接分析得到答案 一个活跃的AI领域是专家系统 也称为基于知识的系统 AI软件的其他应用领域还包括模式识别 图象或声音 定理证明和游戏 最近 AI软件的一个新分支 称为人工神经网络 得到了很大进展 神经网络仿真人脑的处理结构 生物神经系统的功能 这有可能导致一个全新类型的软件登场 它不仅能够识别复杂的模式 而且还能从过去的经验中自行学习进步 CopyrightZhijunHe 软件和软件工程 23 按软件工作方式划分 实时处理软件分时软件交互式软件批处理软件按软件服务对象的范围划分 项目软件产品软件 CopyrightZhijunHe 软件和软件工程 24 按使用的频度进行划分 一次使用频繁使用按软件失效的影响进行划分 高可靠性软件一般可靠性软件 CopyrightZhijunHe 软件和软件工程 25 软件语言softwarelanguage 软件语言是用于书写计算机软件的语言 它主要包括 需求定义语言功能性语言设计性语言实现性语言 即程序设计语言 文档语言 CopyrightZhijunHe 软件和软件工程 26 需求定义语言requirementsdefinitionlanguage 需求定义语言用来书写软件需求定义 软件需求定义是软件功能需求和非功能需求的定义性描述 软件功能需求刻画软件 做什么 软件非功能需求刻画诸如功能性限制 设计限制 环境描述 数据与通信规程及项目管理等典型的需求定义语言有PSL语言 ProblemStatementLanguage问题陈述语言 CopyrightZhijunHe 软件和软件工程 27 功能性语言functionallanguage 功能性语言用来书写软件功能规约 functionalspecification 软件功能规约是软件功能的严格而完整的陈述 通常它只刻画软件系统 做什么 的外部功能 而不涉及系统 如何做 的内部算法 典型的功能性语言有广谱语言 Z语言 CopyrightZhijunHe 软件和软件工程 28 设计性语言designlanguage 设计性语言用来书写软件设计规约 designspecification 软件设计规约是软件设计的严格而完整的陈述 一方面 它是软件功能规约的算法性细化 刻画软件 如何做 的内部算法 另一方面 它是软件实现的依据 典型的设计性语言有PDL语言 ProgramDesignLanguage CopyrightZhijunHe 软件和软件工程 29 实现性语言 实现性语言用来书写计算机程序实现性语言也称编程语言或程序设计语言 programminglanguage 程序设计语言可按语言的级别 对使用者的要求 应用范围 使用方式 成分性质等多种角度进行分类 CopyrightZhijunHe 软件和软件工程 30 按语言级别分 低级语言和高级语言低级语言是与特定计算机体系结构密切相关的程序设计语言 如机器语言 汇编语言 其特点是与机器有关 功效高 但使用复杂 开发费时 难维护 高级语言是不反映特定计算机体系结构的程序设计语言 它的表示方法比低级语言更接近于待解问题的表示方法 其特点是在一定程度上与具体机器无关 易学 易用 易维护 但高级语言程序经编译后产生的目标程序的功效往往较低 CopyrightZhijunHe 软件和软件工程 31 按用户要求分 过程式语言和非过程式语言过程式语言 procedurallanguage 是通过指明一列可执行的运算及运算次序来描述计算过程的程序设计语言 如FORTRAN COBOL C等 非过程式语言 nonprocedurallanguage 是不显式指明处理过程细节的程序设计语言 在这种语言中尽量引进各种抽象度较高的非过程性描述手段 以期做到在程序中增加 做什么 的描述成分 减少 如何做 的细节描述 如第四代语言 4GL 函数式语言 逻辑式语言 CopyrightZhijunHe 软件和软件工程 32 也可称 命令式语言和申述式语言命令式语言 imperativelanguage 即过程式语言 申述式语言 declarativelanguage 是着重描述要处理什么 而非描述如何处理的语言 申述式语言程序是关于问题解的约束陈述 这些约束迫使含于实现中的算法处理机制生成一个解或一组解 如函数式语言 逻辑式语言 CopyrightZhijunHe 软件和软件工程 33 复旦大学计算机科学与工程系软件工程课程 33 154 函数式语言 functionalprogramminglanguage 中函数是构造程序的基本成分 它提供一些设施用于构造更为复杂的函数 程序人员根据提出的问题去定义求解函数 即主程序 其中可能包含一些辅助函数 如Lisp语言 逻辑式语言 logicprogramminglanguage 的基本运算单位是谓词 谓词定义了变元间的逻辑关系 例如 Prolog语言的基本形式是Horn子句 其程序围绕着某一主题的事实 规则和询问三类语句组成 这三类语句分别用来陈述事实 定义规则和提出问题 CopyrightZhijunHe 软件和软件工程 34 按应用范围分 通用语言和专用语言通用语言指目标非单一的语言 如FORTRAN COBOL C等 专用语言指目标单一的语言 如自动数控程序APT CopyrightZhijunHe 软件和软件工程 35 按使用方式分 交互式语言和非交互式语言交互式语言指具有反映人机交互作用的语言 如BASIC 非交互式语言指不反映人机交互作用的语言 如FORTRAN COBOL CopyrightZhijunHe 软件和软件工程 36 按成分性质分 顺序语言 并发语言 分布语言顺序语言指只含顺序成分的语言 如FORTRAN C 并发语言指含有并发成分的语言 如Modula Ada 并发Pascal 分布语言指考虑到分布计算要求的语言 如Modula CopyrightZhijunHe 软件和软件工程 37 文档语言documentationlanguage 文档语言用来书写软件文档 计算机软件文档是计算机开发 维护和使用过程的档案资料和对软件本身的阐述性资料 通常用自然语言或半形式化语言书写 CopyrightZhijunHe 软件和软件工程 38 什么是文档 文档 记录软件开发活动和阶段性成果 理解软件所必需的阐述性资料需求分析文档软件设计文挡等编写文档目的促进对软件的开发 管理和维护 便于各种人员 用户 开发人员 的交流 CopyrightZhijunHe 软件和软件工程 39 文档例子 RUP文档模板 CopyrightZhijunHe 软件和软件工程 40 本讲内容 计算机软件 概念 特点 分类 语言 软件危机 表现和根源 软件工程 概念 研究内容 发展历程 实践框架 CopyrightZhijunHe 软件和软件工程 41 软件危机 什么是软件危机软件危机的表现产生软件危机的根源解决危机的技术途径解决危机的管理途径 Crisis CopyrightZhijunHe 软件和软件工程 42 什么是软件危机 软件在开发和维护过程中遇到的一系列问题艺术vs 标准化错误的发现软件需求获取软件支持和维护开发速度vs 市场需求开发周期过长 开发成本过高研发风险软件Trouble软件开发中的复杂的协作 人员 问题 过程 不同角色的软件神话 管理者 用户 开发者 大众 CopyrightZhijunHe 软件和软件工程 43 软件危机的表现 1of3 成本高IBM360OS 5000多人年 耗时4年 1963 1966 花费2亿多美元美国空军 1955年软件占总费用 计算机系统 的18 70年60 85年达到85 美国全球军事指挥控制系统 硬件1亿美元 软件高达7 2亿美元计算机软件和硬件费用比 CopyrightZhijunHe 软件和软件工程 44 软件危机的表现 2of3 软件质量得不到保证软件应用面的扩大 科学计算 军事 航空航天 工业控制 企业管理 办公 家庭软件越来越多的应用于安全犹关 safetycritical 的系统 对软件质量提出更高的要求80年代欧洲亚丽安娜火箭的发射失败 原因是软件错误美国阿托拉斯火箭的发射失败 原因是软件故障英国1986年开发的办公室信息系统Folios经4年 因性能达不到要求 1989年取消日本第5代机因为软件问题在投入50亿美元后于1993年下马由于软件质量问题导致失败的软件项目非常多 CopyrightZhijunHe 软件和软件工程 45 软件危机的表现 3of3 进度难以控制项目延期比比皆是由于进度问题而取消的软件项目较常见只有一小部分的项目能够按期完成维护非常困难软件维护的多样性软件维护的复杂性软件维护的副作用 CopyrightZhijunHe 软件和软件工程 46 产生软件危机的根源 逻辑产品 不同于物理产品复杂性高逻辑产品 逻辑复杂性 远高于硬件复杂性软件的复杂性随规模呈指数级上升规模大应用扩大 代码量 1000万行 仍在不断膨胀影响软件生产率和质量的因素比较复杂人员的能力和水平团队合作缺乏有效 系统原理 原则 方法和工具的指导和辅助 CopyrightZhijunHe 软件和软件工程 47 对软件开发的深层次认识 开发一个具有一定规模和复杂性的软件系统与编写一个简单的程序不一样正如建设狗窝和高楼大厦大型 复杂软件系统的开发是一项工程 必须按照工程化的方法组织软件的生产和管理 必须经过分析 设计 实现 测试 维护等一系列软件过程和活动 CopyrightZhijunHe 软件和软件工程 48 解决危机的技术途径 20世纪60年代爆发 然而实际上软件危机随着计算机软件的产生而产生 只是在此之前其问题的严重性没有引起人们的关注和重视提出有效的方法和工具支持软件开发1968年提出软件工程概念和思想20世纪70年代的结构化软件开发方法20世纪80年代的面向对象的软件开发方法新的技术 软件重用 快速原型 需求工程典型技术 COM Java C J2EE Net 支撑工具和环境 Eclipse VisualStudio WebLogic Rose CVS CopyrightZhijunHe 软件和软件工程 49 技术手段不能完全解决软件危机 到了20世纪90年代 软件危机依然存在 甚至更为严重应用牵引技术的发展瀑布模型结构化软件开发方法OO软件开发方法技术推动应用的深化应用的扩大和深入应用变得越来越大和复杂 技术变得更加力不从心错误的观念 只要有好的软件开发方法和工具就能高效率地开发出高质量的软件 CopyrightZhijunHe 软件和软件工程 50 解决危机的管理途径 问题出在哪里 20世纪80年代末 美国DoD和工业界开始认识到管理的重要性美国DoD的一项研究表明 70 的项目由于管理不善导致难以控制进步 成本和质量 进一步的研究发现 管理是影响软件项目成功开发的全局性因素 而技术只影响局部如果软件开发组织不能对软件项目进行有效管理 就不能充分发挥软件开发方法和工具的潜力 也就不能高效率地开发出高质量的软件产品 CopyrightZhijunHe 软件和软件工程 51 本讲内容 计算机软件 概念 特点 分类 语言 软件危机 表现和根源 软件工程 概念 研究内容 发展历程 实践框架 CopyrightZhijunHe 软件和软件工程 52 软件工程 软件危机 根源 解决途径 软件工程产生 1968年NATO计算机科学会议 FritzBauer在会议上给出的定义 软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而确立和使用的健全的工程原理 方法 CopyrightZhijunHe 软件和软件工程 53 软件工程 IEEE IEE93 给出了一个更加综合的定义 1 将系统化的 规范的 可度量的方法应用于软件的开发 运行和维护的过程 即将工程化应用于软件中 2 1 中所述方法的研究 软件工程是运用工程的 数学的 计算机等科学概念 方法和原理来指导软件开发和管理和维护的一门学科 CopyrightZhijunHe 软件和软件工程 54 软件工程是一种层次化的技术 任何工程方法 包括软件工程 必须以有组织的质量保证为基础 全面的质量管理和类似的理念刺激了不断的过程改进 正是这种改进导致了更加成熟的软件工程方法的不断出现 以及支持方法的工具的出现 支持软件工程的根基就在于对质量的关注 工具 方法 过程 质量焦点 RogerS Pressman CopyrightZhijunHe 软件和软件工程 55 软件工程的过程层 软件工程过程是将技术层结合在一起的凝聚力 使得计算机软件能够被合理地和及时地开发出来 过程定义了一组关键过程区域的框架 这对于软件工程技术的有效应用是必须的 关键过程区域构成了软件项目的管理控制的基础 并且确立了上下各区域之间的关系 其中规定了技术方法的采用 工程产品 模型 文档 数据 报告 表格等 的产生 里程碑的建立 质量的保证及变化的适当管理 质量焦点 CopyrightZhijunHe 软件和软件工程 56 软件工程的方法层 软件工程的方法层提供了建造软件在技术上需要 如何做 方法涵盖了一系列的任务 需求分析 设计 编程 测试和维护 软件工程方法依赖于一组基本原则 这些原则控制了每一个技术区域 且包含建模活动和其他描述技术 CopyrightZhijunHe 软件和软件工程 57 软件工程的工具层 软件工程的工具层对过程和方法提供了自动的或半自动的支持 当这些工具被集成起来使得一个工具产生的信息可被另外一个工具使用时 一个支持软件开发的系统就建立了 称为计算机辅助软件工程 CASE CASE集成了软件 硬件和一个软件工程数据库 一个仓库 其中包含了关于分析 设计 编程和测试的重要信息 从而形成了一个软件工程环境 它类似于硬件的CAD CAE 计算机辅助设计 工程 软件工程是一门交叉学科 软件工程主要研究内容 从学科角度 1 软件开发技术 软件开发方法学软件开发过程软件工具和软件工程环境2 软件工程管理 软件管理学软件经济学软件心理学软件工程所包含的内容不是一成不变的 随着人们对软件系统的研制开发和生产的理解 应用发展的眼光看待它 CopyrightZhijunHe 软件和软件工程 59 软件工程研究的内容 实践的角度 1 软件开发过程模型 如 瀑布模型 增量模型 原型模型 螺旋模型 迭代模型等 2 软件开发模型和方法 如 面向过程的方法 面向数据的方法 面向对象的方法 包括面向业务基础平台的方法 面向工作流方法 面向主体的方法 面向方面的方法 面向代理的方法等等 以及形式化方法 CopyrightZhijunHe 软件和软件工程 60 3 软件支持过程 工具 如 CASE工具Rose 北大青鸟系统 PowerDesigner ERWin 以及配置管理工具等 4 软件管理过程 如 ISO9000 CMM CMMI 软件企业文化 微软企业文件 敏捷文化现象 IBM企业文化 CopyrightZhiju

温馨提示

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

评论

0/150

提交评论