软件危机与软件工程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2010-12-23 上海理工大学计算机与电气工程学院
6
2010-12-23 上海理工大学计算机与电气工程学院
7
根据美国一些软件公司资料统计,在后期引入一个变动比在早期引入 相同的变动所需要付出的代价高2-3个数量级
2010-12-23 上海理工大学计算机与电气工程学院
8
软件的分类
按软件的功能进行划分: 系统软件
中型
2~5 ~
1~2年 ~ 年
5k~50k ~
软件人员之间、与用户之间的联系、协调的配合关系。因而计划、 软件人员之间、与用户之间的联系、协调的配合关系。因而计划、 资料书写以及技术审查需要比较严格地进行。应用程序和系统程序。 资料书写以及技术审查需要比较严格地进行。应用程序和系统程序。 系统的软件工程方法是完全必要的。 系统的软件工程方法是完全必要的。
2010-12-23 上海理工大学计算机与电气工程学院
25
软件危机
一个星期后,老板把年青人叫到了办公室,问“我们 的进展如何?” “很顺利”,年青人说“但是我遇到了一些小难题, 我将解决它们并且很快就能保持进度” “那么,最终日期能保证吗?”老板问。 “没问题,” 工程师说,“我已经快完成90%了。” 如果你在软件界工作了几年,你可以完成这个故事 。毫不惊奇,年青人在项目的90%处停滞不前,直到 在别人的帮助下在一个月后完成了项目。
软件危机
案例3:项目没有被很好地理解;计划不周,最终导致 进度拖延。 一天,一位年青人被选来“写”一个用在自动化制造设 备上的程序。选择他的理由很简单:他是技术小组中 唯一参加过编程培训的人。他懂得汇编语言和Fortran 语言,但是他不知道软件工程,更不知道软件计划和 跟踪方面的知识。 他的老板给了他一些手册和对系统功能的口头描述。他 被告知系统必须在两个月内开发完成。
第一讲 软件危机与软件工程
2010-12-23 上海理工大学计算机与电气工程学院
1
你会写程序吗? 你会写程序吗? 你会开发软件吗? 你会开发软件吗?
2010-12-23 上海理工大学计算机与电气工程学院
2
什么是软件
软件是计算机系统中与硬件相互依存的另一部分, 软件是计算机系统中与硬件相互依存的另一部分, 它是包括程序,数据及其相关文档的完整集合 程序是按事先设计的功能和性能要求执行的指令 程序是按事先设计的功能和性能要求执行的指令 序列 数据是使程序能正常操纵信息的数据结构 数据是使程序能正常操纵信息的数据结构 文档是与程序开发,维护和使用有关的图文材料 文档是与程序开发,维护和使用有关的图文材料
22
软件危机
案例2: 美国IBM公司在1963年至1966年开发的 IBM360机的操作系统。这一项目花了5000人一年的 工作量,最多时有1000人投入开发工作,写出了近 100万行源程序。......据统计,这个操作系统每次发 行的新版本都是从前一版本中找出1000个程序错误而 修正的结果。...... 这个项目的负责人F. D. Brooks(人月神话,一代软件 工程大师)事后总结了他在组织开发过程中的沉痛教训 时说:“......正像一只逃亡的野兽落到泥潭中做垂死 的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的 灾难。......程序设计工作正像这样一个泥潭,......一 批批程序员被迫在泥潭中拼命挣扎,......谁也没有料 到问题竟会陷入这样的困境......”。IBM360操作系统 的历史教训成为软件开发项目的典型事例为人们所记 2010-12-23 上海理工大学计算机与电气工程学院 取。 23
2010-12-23 上海理工大学计算机与电气工程学院
5
软件的特点
软件的开发和运行常受到计算机系统的限制,对 计算机系统有着不同程度的依赖性 软件的开发至今尚未完全摆脱手工艺的开发方式 软件的开发至今尚未完全摆脱手工艺的开发方式 软件本身是复杂的
实际问题的复杂性 程序逻辑结构的复杂性
软件成本相当昂贵 相当多的软件工作涉及到社会因素
信息
2010-12-23 上海理工大学计算机与电气工程学院
20
计算机和软件的历史观
70年代和80年代 70年代和80年代 年代和80
“新的工业革命” 新的工业革命” 工业社会将转变为信息社会” “工业社会将转变为信息社会” ……
90年代 90年代
“知识的民主化将改变旧的权力结构” 知识的民主化将改变旧的权力结构”
21世纪初 21世纪初
“Y2K定时炸弹” Y2K定时炸弹” 定时炸弹 无所不在的计算” “无所不在的计算” 2010-12-23 上海理工大学计算机与电气工程学院
21
软件危机
软件危机” 年在NATO会议上作为一 “软件危机” 是1958年在 年在 会议上作为一 个正式的议题被提出来 Software Crisis ! 软件项目不成功的例子比比即是: 软件项目不成功的例子比比即是:
2010-12-23 上海理工大学计算机与电气工程学院
12
软件的分类
• 大型

5~20
2~3年
50k~100k
编译程序、小型分时系统、实时控制系统等。二级管理,若干小 组,每组5人以下。人员调整往往不可避免,新手的培训。采用统一 的标准,实行严格的审查是绝对必要的。
• 甚大型 100~1000

4~5年
人与人的交流比写程序困难得多。 软件开发成本在计算机系统总成本中所占的比例逐年上升 软件开发生产率的提高速度远远不能满足社会对软件产品日 上海理工大学计算机与电气工程学院 29 益增长的需求 2010-12-23
27ቤተ መጻሕፍቲ ባይዱ
软件危机
问题出在哪里? 问题出在哪里?
对软件开发成本和进度的估计常常很不准确。实际成本 地估计成本有可能高出一个数量级,实际进度比预期进 度拖延几个月甚至几年的现象并不罕见 “闭门造车”必然导致最终产品不符合用户的要求.软件 开发人员通常在对用户要求只有模糊的了解,甚至对于 所要解决的问题 还没有确切认识的情况下,就仓促上阵 忙着着手编写程序;并且开发人员和用户之间的信息交 流往往很不充分, 2010-12-23 上海理工大学计算机与电气工程学院
1M~10M
• 只是对软件工程技术依赖的程度不同而已。
2010-12-23 上海理工大学计算机与电气工程学院
13
软件的分类
按软件工作方式划分:
实时处理软件 交互式软件 批处理软件
2010-12-23 上海理工大学计算机与电气工程学院
14
软件的分类
按软件服务对象的范围划分:
项目软件 产品软件
2010-12-23 上海理工大学计算机与电气工程学院
1M(=1000k)
若干个子项目,每一个子项目都是一个大型软件。子项目之间具 有复杂的接口。如远程通信系统、多任务系统、大型操作系统、大 型数据库管理系统、军事指挥系统通常现有这样的规模。很显然, 这类问题没有软件工程方法的支持,它的开发工作是不可想象的。
• 极大型 2000~5000 5~10年
• 军事指挥、弹道导弹防御系统。
2010-12-23 上海理工大学计算机与电气工程学院
10
软件的分类
应用软件
商业数据处理软件 工程与科学计算软件 计算机辅助设计/制造软件 系统仿真软件 智能产品嵌入软件 医疗、制药软件 事务管理、办公自动化软件 计算机辅助教学软件
2010-12-23 上海理工大学计算机与电气工程学院
11
软件的分类
案例1:1999 年 10 月,耗资 1.25 亿美元的 NASA 的 火星气象卫星失踪,据信这是由于简单的数据转换错 误所导致的。人们发现卫星软件中,有些数据使用英 制,它们应被转换成公制。这个卫星应当充当另一项 任务中的火星极地着陆项目的通信转发器,那个任务 也失败了,原因不明。
2010-12-23 上海理工大学计算机与电气工程学院
使计算机系统各个部件、相关软件和数据协调、高效 地工作的软件
操作系统 数据库管理系统 设备驱动程序 通信处理程序等
2010-12-23 上海理工大学计算机与电气工程学院
9
软件的分类
支撑软件
协助用户开发软件的工具软件
文本编辑程序 文件格式化程序 磁盘向磁带进行数据传输的程序 程序库系统 支持需求分析、设计、实现、测试和 支持管理的软件
2010-12-23 上海理工大学计算机与电气工程学院
3
软件的特点
软件是一种逻辑实体,而不是具体的物理实体。 软件是一种逻辑实体,而不是具体的物理实体。 因而它缺乏可见性。写出程序代码并在计算机上 因而它缺乏可见性。写出程序代码并在计算机上 运行之前,软件开发过程的进展情况较难衡量, 软件质量也较难评价。 软件的生产与硬件不同,在它的开发过程中没有 软件的生产与硬件不同,在它的开发过程中没有 明显的制造过程 在软件的运行和使用期间,没有硬件那样的机械 在软件的运行和使用期间,没有硬件那样的机械 磨损,老化问题,不会被用坏。软件错误绝大多 磨损,老化问题,不会被用坏。软件错误绝大多 数为设计错误,它们更难被度量,建模,检测和 数为设计错误,它们更难被度量,建模,检测和 更正。 2010-12-23 上海理工大学计算机与电气工程学院 4
15
软件的分类
按使用的频度进行划分:
一次使用 频繁使用
2010-12-23 上海理工大学计算机与电气工程学院
16
软件的分类
按软件失效的影响进行划分:
高可靠性软件 一般可靠性软件
2010-12-23 上海理工大学计算机与电气工程学院
17
软件的发展
In the early days:
“Software” = “Place a sequence of instructions together to get the computer to do something useful”. User Computer Late 1950’s: Computer became cheaper and more common High level languages were invented easier
After 1968:
Software Engineering
2010-12-23 上海理工大学计算机与电气工程学院
19
软件的角色
软件在社会上扮演了双重角色
它本身是一种产品
将计算机硬件的计算能力发挥出来
同时, 同时,它也是一种传递产品的工具
软件传递了我们这个时代最重要的产品: 软件传递了我们这个时代最重要的产品:
2010-12-23 上海理工大学计算机与电气工程学院
26
软件危机
软件危机的定义
通常把在计算机软件开发与维护过程中所遇到的一系列 严重问题笼统地称为软件危机。这些问题绝不仅仅是不 能正常运行的软件才具有的,实际上,几乎所有软件都 不同程度地存在这些问题。
2010-12-23 上海理工大学计算机与电气工程学院
按软件规模进行划分:
类别 参加人员数 研制期限 微型 1 1~4周 ~ 周 小型 1 1~6月 ~ 月 源程序行数 0.5k 1k~2k ~
数值计算或数据处理,通常没有与其它程序的接口。需要按一定的 数值计算或数据处理,通常没有与其它程序的接口。 标准化技术、正规的资料书写以及定期的系统审查。只是没有大题 标准化技术、正规的资料书写以及定期的系统审查。 目那样严格。
User
Programmer
Computer
2010-12-23 上海理工大学计算机与电气工程学院
18
软件的发展
Early 1960s:
Very few large software projects were done by some experts.
Middle to late 1960s:
Truly large software systems were attempted.
28
软件危机
软件产品的质量往往靠不住。软件质量保证技术还没有坚持 不懈地应用到软件开发的全过程中; 软件常常是不可维护的。(可扩展性差,可重用性差) 软件通常没有适当的文档资料。(文档应该是“完整的”“ 最新式” 即和程序代码完全一致)。
Managers —— evaluate, track progress, ...... Programmers —— communicate to each other Maintainers ——
2010-12-23 上海理工大学计算机与电气工程学院
24
软件危机
他读了手册,考虑了他的方法,然后开始编程,两个 星期后,老板把他叫到了办公室并问他事情干得怎么 样? “很好”, 雄心勃勃的年青的工程师说,“比我想 像的要简单的多。我已经接近完成75%了。” 老板笑了,“真不可思议”, 然后他告诉这个年青 人继续好好干,在下个星期他将再次会见他。
相关文档
最新文档