软件工程概述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2018/7/11
计算机科学与工程学院
8
故 障 率
生命 初期 "磨损"后
故 障 率
实际曲线 修改
理想曲线
时 间
时 间
硬件故障率的变化曲线
软件的故障率曲线
2018/7/11
计算机科学与工程学院
9
(4)大多数软件是自定的,而不是通过已有构件组装而成的。 迄今为止,软件的开发尚未完全摆脱手工的方式。 (5)软件成本相当昂贵。 (6)软件本身是复杂的。 软件比任何其他人类制造的结构更复杂,甚至硬件的复杂 性和软件相比也是微不足道的。软件本质上的复杂性是软件产 品难以理解,影响软件过程的管理,并使维护过程十分复杂。
2018/7/11
计算机科学与工程学院
7
2.软件具有以下不同的特点:
(1)软件是逻辑的,而不是物理的产品。
(2)软件是由开发或工程化而形成的,没有明显 的制造过程。软件成本集中于“开发”上,意味 着软件项目不能像硬件制造项目那样来管理。 (3)软件在运行和使用期间,不存在硬件那样的 磨损和老化问题,但它存在退化问题,开发人员 必须维护软件。
2018/7/11
计算机科学与工程学院
2
2. 第二阶段--程序系统阶段
从60年代中期到70年代末期 多用户系统引入了人机交互的新概念, 实时系统能够从多个源收集、分析和转换数据,从而使得 进程的控制和输出的产生是以毫秒而不是分钟来进行, 产生了第一代数据库管理系统 出现了软件产品和“软件作坊”的概念,设计人员开发程 序不再像早期阶段那样只为自己的研究工作需要,而是为 了用户更好地使用计算机。被开发的软件可以在较宽的范 围内使用。主机、微机上的程序可以有数百上千的用户。 出现了“软件危机”问题。 采用“软件工程”的方法来解决“软件危机”问题。
软件危机的具体表现如下:
(1)软件开发的进度难以控制,经常出现经费 超预算、完成期限一再拖延的现象。
2018/7/11
计算机科学与工程学院
18
(2)软件需求在开发初期不明确,导致矛盾在后期 集中暴露,从而对整个开发过程带来灾难性的后果。
图定性地描述了在不同时期引入同一个变动需要付出的代价的变化趋势。
2018/7/11 计算机科学与工程学院 29
三、软件工程学的原则
为了开发出高质量低成本的软件,在软件开发 过程中必须遵循下列软件工程原则:
1.抽象(abstraction) 抽取事物最基本的特性和行为,忽略非基本 的细节。采用分层次抽象的办法可以控制软件 开发过程的复杂性,有利于软件的可理解性和 开发过程的管理。
2018/7/11
计算机科学与工程学院
3
3. 第三阶段—软件工程阶段
1970年代中期--1980年代末期 分布式系统极大地提高了计算机系统的复杂性,网络 的发展对软件开发提出了更高的要求, 特别是微处理器的出现和广泛应用,孕育了一系列的 智能产品。 软件开发技术的度量问题受到重视,最著名的有软件 工作量估计COCOMO模型、软件过程改进模型CMM等。
计算机科学与工程学院
2018/7/11
27
软件工程方法:为软件开发提供“如何做”的技术。 它包括了项目计划、需求分析、系统设计、程序实现、 测试与维护等一系列的任务。 软件工程工具:为过程和方法提供自动的或半自动的 支持。这些软件工具被集成起来,建立起一个支持软 件开发的系统,称之为计算机辅助软件工程(CASE, Computer Aided Software Engineering)。CASE集成 了软件、硬件和一个存放开发过程信息的软件工程数 据库,形成了一个软件工程环境。
2018/7/11
计算机科学与工程学院
25
软件工程是一种层次化的技术。包含了一个观 点和三个要素,如下图:
工具 方法 过程 质量焦点
2018/7/11
计算机科学与工程学院
26
质量观点:
软件工程必须以有组织的质量保证为基础开发软件。
三要素:
软件工程过程:是进行一系列有组织的活动,从而 能够合理和及时地开发出计算机软件。过程定义了 技术方法的采用、工程产品(包括模型、文档、数 据、报告、表格等)的产生、里程碑的建立、质量 的保证和变更的管理。
商业数据处理软件 工程与科学计算软件 计算机辅助设计/制造软件 系统仿真软件 智能产品嵌入软件 医疗、制药软件 事务管理、办公自动化软件 计算机辅助教学软件
2018/7/11
计算机科学与工程学院
13
2.按软件规模进行划分:
类别 参加人员数 研制期限 源程序行数 微型 1 1~4周 0.5k 小型 1 1~6月 1k~2k 中型 2~5 1~2年 5k~50k 大型 5~20 2~3年 50k~100k 甚大型 100~1000 4~5年 1M(=1000k) 极大型 2000~5000 5~10年 1M~10M
系统软件:与硬件紧密结合的软件 操作系统 数据库管理系统 设备驱动程序 通信处理程序等 支撑软件:协助用户开发软件的工具性软件 • • • • 文本编辑程序 文件格式化程序 程序库系统 支持需求分析、设计、实现、测试和支持管 理的软件
计算机科学与工程学院 12
2018/7/11
应用软件:为特定领域内、特定目的开发的软件
•模块(module)是程序中逻辑上相对独立的单元; •模块的大小要适中; •高内聚、低耦合。
2018/7/11 计算机科学与工程学院 31
2018/7/11
计算机科学与工程学院
5
软件的发展历史图
早期 面向批处理 有限的分布 自定义软件 第二阶段 多用户 实时 数据库 软件产品 第三阶段 分布式系统 嵌入“智能” 低成本硬件 消费者的影响 第四阶段 强大的桌面系统 面向对象技术 专家系统 人工神经网络 并行计算 网络计算机
1950
1960
2018/7/11
计算机科学与工程学院
28
二、软件工程学研究的目标
软件开发成本较低; 软件功能能够满足用户的需求; 软件性能较好; 软件可靠性高; 软件易于使用、维护和移植; 能按时完成开发任务,并及时交付使用。 采用先进的软件工程方法,使质量、成本和生产率三 者之间的关系达到最优的平衡状态。
CMM——Software Capability Maturity Model
软件能力成熟度模型
2018/7/11 计算机科学与工程学院 4
4. 第四阶段
强大的桌面系统和计算机网络迅速发展的时期 计算机体系结构由中央主机控制方式变为客户机/服务器 方式 专家系统和人工智能软件进入了实际应用, 出现了并行计算和网络计算的研究, 面向对象技术在许多领域迅速取代了传统软件开发方法 软件从个性化的程序变为工程化的产品, 从“软件=程序”发展为“软件=程序+数据+文档”。 软件的需求成为软件发展的动力, 软件工作的考虑范围不再只顾及程序的编写,而是涉及到 软件的整个生命周期。
2018/7/11
计算机科学与工程学院
24
软件工程的根本在于提高软件的质量与生产率, 最终实现软件的工业化生产。在“软件工程” 的概念提出后的几十年里,各种有关软件的 技术、思想、方法和概念层出不穷,典型的 包括结构化的方法、面向对象方法、软件开 发模型和软件开发过程等,软件工程逐步发 展为一门独立的科学。
1970
1980
1990
2000
2018/7/11
计算机科学与工程学院
6
二、软件的概念和特点
1.软件的概念,有3层含义:
(1)能够完成预定功能和性能的可执行指令 (program); (2)使得程序能够适当地操作信息的数据结构 (data); (3)描述程序的操作和使用的文档(document)。
2018/7/11 计算机科学与工程学院 21
④软件项目开发人员不能有效地、独立自主地处理大 型软件的全部关系和各个分支,因此容易产生疏漏和 错误。 ⑤缺乏有力的方法和工具方面的支持,过分地依靠程 序人员在软件开发过程中的技巧和创造性,加剧软件 产品的个性化。 ⑥软件产品的特殊性和人智力的局限性,导致人们无 力处理“复杂问题”。所谓“复杂问题”的概念是相 对的,一旦人们采用先进的组织形式、开发方法和工 具提高了软件的开发效率和能力,新的、更大的、更 复杂的问题又摆在人们面前。
2018/7/11
计算机科学与工程学院
14
3.按软件工作方式划分:
实时处理软件 分时软件 交互式软件 批处理软件
2018/7/11
计算机科学与工程学院
15
4.按软件服务对象的范围划分:
项目软件:受某个特定用户或机构 的委托,在合同的约束下靠罚机构 开发的软件。
产品软件:软件开发Hale Waihona Puke Baidu构开发出来 直接提供给市场的。
2018/7/11
计算机科学与工程学院
20
2.危机的原因
①用户对软件需求的描述不精确,可能有遗漏、有二 义性、有错误,甚至在软件开发过程中,用户还提出 修改软件功能、界面、支撑环境等方面的要求。 ②软件开发人员对用户需求的理解与用户的本来愿望 有差异,这种差异必然导致开发出来的软件产品与用 户要求不一致。 ③大型软件项目需要组织一定的人力共同完成,多数 管理人员缺乏开发大型软件系统的经验,而多数软件 开发人员又缺乏管理方面的经验。各类人员的信息交 流不及时、不准确、有时还会产生误解。
2018/7/11
计算机科学与工程学院
16
四、软件危机
软件危机定义:软件在开发和维护过程中遇到的一 系列严重问题。 软件危机包含两层含义: • 如何开发软件 • 如何维护数量不断膨胀的已有软件
2018/7/11
计算机科学与工程学院
17
1. 软件危机的表现 软件危机爆发于20世纪60年代末期,虽然 人们一直致力于发现解决危机的方法,但是 软件危机至今依然困扰着我们,并没有一种 方法可以解决。
2018/7/11 计算机科学与工程学院 22
3.克服危机的途径
1968年秋季,NATO(北约)的科技委员会召集了 近50名一流的编程人员、计算机科学家和工业界巨头, 讨论和制定摆脱“软件危机”的对策。由于认识到软 件的设计、实现、维护和传统的工程规则有相同的基 础,在那次会议上首次提出了“软件工程” (software engineering)这个概念。
2018/7/11 计算机科学与工程学院 30
2.信息隐藏(information hiding)
•将模块中的软件设计决策封装起来的技术。 •按照信息隐藏的原则,系统中的模块应设计成“黑箱”,模块 外部只能使用模块接口说明中给出的信息,如操作、数据类型等 等。
3.模块化(modularity)
使程序有许多个逻辑上相对独立的模块组成。
2018/7/11
计算机科学与工程学院
23
1.2 软件工程
一、软件工程的概念
1983年,IEEE(Institute of Electrical & Electronic Engineers,电气与电子工程师协会)给 出了一个全面的定义: 软件工程: 是研究和应用如何以系统化的、规范的、 可度量的方法去开发、运行和维护软件,即把工程化 应用到软件上。
(3)由于缺乏完整规范的资料,加之软件测试不 充分,从而造成软件质量低下,运行中出现大量问 题。 (4)软件文档资料不完整、不合格
2018/7/11 计算机科学与工程学院 19
(5)软件的可维护性差 程序中的错误难以改正,程序不能适应硬件环境 的改变,不能应用户要求增加新的功能。
(6)软件价格昂贵,软件成本在计算机系统总成本 中所占的比例逐年上升
第一章 软件工程概述
1.1 1.2 1.3 1.4
软件的发展历史 软件工程与软件过程 软件开发的基本策略 软件的错误观点
2018/7/11
计算机科学与工程学院
1
1.1 软件和软件危机
一、发展历史
1. 早期阶段——程序设计阶段 在计算机发展的早期阶段,人们认为计算机的主 要用途是快速计算,软件编程简单,不存在什么系统 化的方法,开发没有任何管理,程序的质量完全依赖 于程序员个人的技巧。
2018/7/11
计算机科学与工程学院
10
三、软件的分类
给出一个科学的、统一的、严格的计算机软件 分类标准是不现实的。但对软件的类型进行必要的 划分,对于开发和维护软件是很有价值的。因此, 有必要从不同角度对计算机软件做适当的分类。
2018/7/11
计算机科学与工程学院
11
1.按软件的功能进行划分: