软件危机与软件工程
2010-12-23 上海理工大学计算机与电气工程学院
25
软件危机
一个星期后,老板把年青人叫到了办公室,问“我们 的进展如何?” “很顺利”,年青人说“但是我遇到了一些小难题, 我将解决它们并且很快就能保持进度” “那么,最终日期能保证吗?”老板问。 “没问题,” 工程师说,“我已经快完成90%了。” 如果你在软件界工作了几年,你可以完成这个故事 。毫不惊奇,年青人在项目的90%处停滞不前,直到 在别人的帮助下在一个月后完成了项目。
按软件规模进行划分:
类别 参加人员数 研制期限 微型 1 1~4周 ~ 周 小型 1 1~6月 ~ 月 源程序行数 0.5k 1k~2k ~
数值计算或数据处理,通常没有与其它程序的接口。需要按一定的 数值计算或数据处理,通常没有与其它程序的接口。 标准化技术、正规的资料书写以及定期的系统审查。只是没有大题 标准化技术、正规的资料书写以及定期的系统审查。 目那样严格。
27
软件危机
问题出在哪里? 问题出在哪里?
对软件开发成本和进度的估计常常很不准确。实际成本 地估计成本有可能高出一个数量级,实际进度比预期进 度拖延几个月甚至几年的现象并不罕见 “闭门造车”必然导致最终产品不符合用户的要求.软件 开发人员通常在对用户要求只有模糊的了解,甚至对于 所要解决的问题 还没有确切认识的情况下,就仓促上阵 忙着着手编写程序;并且开发人员和用户之间的信息交 流往往很不充分, 2010-12-23 上海理工大学计算机与电气工程学院
第一讲 软件危机与软件工程
2010-12-23 上海理工大学计算机与电气工程学院
1
你会写程序吗? 你会写程序吗? 你会开发软件吗? 你会开发软件吗?
2010-12-23 上海理工大学计算机与电气工程学院
2
什么是软件
软件是计算机系统中与硬件相互依存的另一部分, 软件是计算机系统中与硬件相互依存的另一部分, 它是包括程序,数据及其相关文档的完整集合 程序是按事先设计的功能和性能要求执行的指令 程序是按事先设计的功能和性能要求执行的指令 序列 数据是使程序能正常操纵信息的数据结构 数据是使程序能正常操纵信息的数据结构 文档是与程序开发,维护和使用有关的图文材料 文档是与程序开发,维护和使用有关的图文材料
21世纪初 21世纪初
“Y2K定时炸弹” Y2K定时炸弹” 定时炸弹 无所不在的计算” “无所不在的计算” 2010-12-23 上海理工大学计算机与电气工程学院
21
软件危机
软件危机” 年在NATO会议上作为一 “软件危机” 是1958年在 年在 会议上作为一 个正式的议题被提出来 Software Crisis ! 软件项目不成功的例子比比即是: 软件项目不成功的例子比比即是:
2010-12-23 上海理工大学计算机与电气工程学院
5
软件的特点
软件的开发和运行常受到计算机系统的限制,对 计算机系统有着不同程度的依赖性 软件的开发至今尚未完全摆脱手工艺的开发方式 软件的开发至今尚未完全摆脱手工艺的开发方式 软件本身是复杂的
实际问题的复杂性 程序逻辑结构的复杂性
软件成本相当昂贵 相当多的软件工作涉及到社会因素
人与人的交流比写程序困难得多。 软件开发成本在计算机系统总成本中所占的比例逐年上升 软件开发生产率的提高速度远远不能满足社会对软件产品日 上海理工大学计算机与电气工程学院 29 益增长的需求 2010-12-23
案例1:1999 年 10 月,耗资 1.25 亿美元的 NASA 的 火星气象卫星失踪,据信这是由于简单的数据转换错 误所导致的。人们发现卫星软件中,有些数据使用英 制,它们应被转换成公制。这个卫星应当充当另一项 任务中的火星极地着陆项目的通信转发器,那个任务 也失败了,原因不明。
2010-12-23 上海理工大学计算机与电气工程学院
中型
2~5 ~
1~2年 ~ 年
5k~50k ~
软件人员之间、与用户之间的联系、协调的配合关系。因而计划、 软件人员之间、与用户之间的联系、协调的配合关系。因而计划、 资料书写以及技术审查需要比较严格地进行。应用程序和系统程序。 资料书写以及技术审查需要比较严格地进行。应用程序和系统程序。 系统的软件工程方法是完全必要的。 系统的软件工程方法是完全必要的。
2010-12-23 上海理工大学计算机与电气工程学院
24
软件危机
他读了手册,考虑了他的方法,然后开始编程,两个 星期后,老板把他叫到了办公室并问他事情干得怎么 样? “很好”, 雄心勃勃的年青的工程师说,“比我想 像的要简单的多。我已经接近完成75%了。” 老板笑了,“真不可思议”, 然后他告诉这个年青 人继续好好干,在下个星期他将再次会见他。
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
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.
2010-12-23 上海理工大学计算机与电气工程学院
3
软件的特点
软件是一种逻辑实体,而不是具体的物理实体。 软件是一种逻辑实体,而不是具体的物理实体。 因而它缺乏可见性。写出程序代码并在计算机上 因而它缺乏可见性。写出程序代码并在计算机上 运行之前,软件开发过程的进展情况较难衡量, 软件质量也较难评价。 软件的生产与硬件不同,在它的开发过程中没有 软件的生产与硬件不同,在它的开发过程中没有 明显的制造过程 在软件的运行和使用期间,没有硬件那样的机械 在软件的运行和使用期间,没有硬件那样的机械 磨损,老化问题,不会被用坏。软件错误绝大多 磨损,老化问题,不会被用坏。软件错误绝大多 数为设计错误,它们更难被度量,建模,检测和 数为设计错误,它们更难被度量,建模,检测和 更正。 2010-12-23 上海理工大学计算机与电气工程学院 4
22
软件危机
案例2: 美国IBM公司在1963年至1966年开发的 IBM360机的操作系统。这一项目花了5000人一年的 工作量,最多时有1000人投入开发工作,写出了近 100万行源程序。......据统计,这个操作系统每次发 行的新版本都是从前一版本中找出1000个程序错误而 修正的结果。...... 这个项目的负责人F. D. Brooks(人月神话,一代软件 工程大师)事后总结了他在组织开发过程中的沉痛教训 时说:“......正像一只逃亡的野兽落到泥潭中做垂死 的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的 灾难。......程序设计工作正像这样一个泥潭,......一 批批程序员被迫在泥潭中拼命挣扎,......谁也没有料 到问题竟会陷入这样的困境......”。IBM360操作系统 的历史教训成为软件开发项目的典型事例为人们所记 2010-12-23 上海理工大学计算机与电气工程学院 取。 23
2010-12-23 上海理工大学计算机与电气工程学院
26
软件危机
软件危机的定义
通常把在计算机软件开发与维护过程中所遇到的一系列 严重问题笼统地称为软件危机。这些问题绝不仅仅是不 能正常运行的软件才具有的,实际上,几乎所有软件都 不同程度地存在这些问题。
2010-12-23 上海理工大学计算机与电气工程学院
信息
2010-12-23 上海理工大学计算机与电气工程学院
20
计算机和软件的历史观
70年代和80年代 70年代和80年代 年代和80
“新的工业革命” 新的工业革命” 工业社会将转变为信息社会” “工业社会将转变为信息社会” ……
90年代 90年代
“知识的民主化将改变旧的权力结构” 知识的民主化将改变旧的权力结构”
1M~10M
• 只是对软件工程技术依赖的程度不同而已。
2010-12-23 上海理工大学计算机与电气工程学院
13
软件的分类
按软件工作方式划分:
实时处理软件 交互式软件 批处理软件
2010-12-23 上海理工大学计算机与电气工程学院
14
软件的分类
按软件服务对象的范围划分:
项目软件 产品软件
2010-12-23 上海理工大学计算机与电气工程学院
使计算机系统各个部件、相关软件和数据协调、高效 地工作的软件
操作系统 数据库管理系统 设备驱动程序 通信处理程序等
2010-12-23 上海理工大学计算机与电气工程学院
9
软件的分类
支撑软件
协助用户开发软件的工具软件
文本编辑程序 文件格式化程序 磁盘向磁带进行数据传输的程序 程序库系统 支持需求分析、设计、实现、测试和 支持管理的软件
2010-12-23 上海理工大学计算机与电气工程学院
12
软件的分类