dddd - 西安交通大学精品课程 :: 软件开发

Download Report

Transcript dddd - 西安交通大学精品课程 :: 软件开发

第1章 软件开发方法
(一)软件概述
计算机教学实验中心
问题的提出






什么是软件 ?
软件有哪些特征?
什么是软件危机?
什么是软件生命周期?
软件开发技术发展史
……
上一页
下一页
停止放映
第2|83页
1.理解软件的概念及软件的特征
2.了解软件生产的历史
3.软件危机及项目失败的原因
4.了解软件的生命周期概念
5.了解软件开发史
上一页
下一页
停止放映
第3|83页
软件(Software)
上一页
随着信息化、网络化和数字化时代的到来,
社会对“软件”的需求激增。如今,世
界发达国家都把软件列为国家发展的关键
技术领域。
美国国家关键技术委员会将软件列为六大关
键技术之一;
欧洲共同体将“软件和信息处理”列为关键
技术;
我国把信息产业放在优先发展的地位,看作
是中国发展高新技术、赶超世界先进水平
的一次千载难逢的机遇。
下一页
停止放映
第4|83页
软件的基本概念
什么是软件?
计算机系统由计算机硬件和软件构成。
计算机神奇的功能是在软件的“指挥”下创造出来
的。
软件是各种程序和有关资料的总称。
上一页
下一页
停止放映
程序是:
 为实现特定目标或解决特定问题而用计算
机语言编写的命令序列的集合
 是人们求解问题的逻辑思维活动的代码化
描述
程序的最重要的目的是:
便于阅读、交流
第5|83页
Roger S. Pressman 对软件的认识

上一页
“计算机软件已经成为一种驱动力。它
是进行商业决策的引擎;它是现代科学
研究和工程问题寻求解答的基础;它也
是鉴别现代产品和服务的关键因素。它
被嵌入在各类系统中:交通、医疗、电
信、军事、工业生产过程、娱乐、办
公、……难以穷举。软件在现代社会中
确实是必不可少的。而我们在进入21世
纪,软件将成为从基础教育到基因工程
的所有领域新进展的驱动器。”
下一页
停止放映
第6|83页
软件的特征
软件是逻辑产品
软件产品质量的体现方式不同
软件产品的生命周期和失败曲线不同
软件产品的成本构成不同
大多数软件仍然是定制生产的
软件产品的不同属性
上一页
下一页
停止放映
第7|83页
软件是逻辑产品
软件产品是:
• 具有产值、价格、质量和功
能的特性
• 看不见,是逻辑的、无形的
• 是脑力劳动的结晶
上一页
下一页
停止放映
第8|83页
软件产品质量体现方式不同
质量体现方式不同:
• 实用、可靠、可操作性;
• 可维护性强
• 方便用户
• 不会折旧、损坏、老化
上一页
下一页
停止放映
第9|83页
软件产品的成本构成不同
12%
需求率
生产率 4%
开发人员
上一页
下一页
停止放映
1979年美国国防预算的9%用于计算机领域,约$113亿
($1258亿)。在这$113亿中,$91亿用于软件投资(约
占80%),仅有不到$23亿用于购买硬件设备。
第10|83页
软、硬件失败曲线不同
上一页
下一页
停止放映
第11|83页
大多数软件产品仍然是定制生产
上一页
下一页
硬件产品的生产技术和工艺已经成熟,可
以做到标准化、系列化成批生产,不论哪
个厂家生产的产品,用户买来都可以集成、
组装和替换使用。
尽管软件产品复用是软件界孜孜不倦追求
的目标,在某些局部范围内几家领军软件
企业也建立了一些软件组件复用的技术标
准,例如,OMG的CORBA、Microsoft的COM
和DCOM、SUN的EJB和J2EE,但是目前还做
不到大范围使用软件替代品。大多数软件
仍然是为特定任务或用户定制的。
停止放映
第12|83页
软件产品的不同属性
为便于软件产品的研制、生产、维护和使
用,软件还必须具有:
可维护性(Maintainability)
独立性(Dependability)
效率性(Efficiency)
可用性(Usability)
上一页
下一页
停止放映
第13|83页
软件分类
软件按不同方式可以划分为
不同的类型:
• 按功能划分
• 按规模划分
上一页
下一页
停止放映
第14|83页
按功能划分软件分类
系统软件
软件
应用软件
上一页
操作系统
网络系统
语言编译器
工具软件
管理软件
实时软件
科学计算、数据处理
嵌入式软件
人工智能软件
专用领域软件
下一页
停止放映
第15|83页
系统软件
上一页
是支持计算机系统正常运行并实现用户操作
的那部分软件。
一般是在计算机系统购买时随机携带的,也
可以根据需要另行安装。
系统软件的主要特征是:
• 与硬件有很强的交互性
• 能对资源共享进行调度管理
• 能解决并发操作处理中存在的协调问题
• 其中的数据结构复杂,外部接口多样化,
便于用户反复使用
下一页
停止放映
第16|83页
系统软件例
①操作系统(Operating System)
②网络系统(Network System)
③语言编译系统( Language Compiler)
④通信软件(Communications Software)
上一页
⑤ 工具软件(Tools Software)
下一页
停止放映
第17|83页
应用软件
应用软件是为满足用户不同领域、不
同问题的应用需求而提供的那部分软件。
它可以拓宽计算机系统的应用领域,放
大硬件的功能。
应用软件具有无限丰富和美好的开发前
景。
上一页
下一页
停止放映
第18|83页
应用软件例
① 事务处理软件
② 实时软件
③ 科学计算和数据处理软件
④ 嵌入式软件
上一页
⑤人工智能软件
下一页
停止放映
第19|83页
按规模划分软件分类
类别
参加人
员数
研制期限
产品规模
(语句行数)
实 例
微型
1
1~4周
0.5k
选择排序程序
小型
1
1~6月
1k~2k
数值计算程序
中型
2~5
1~2年
5k~10k
汇编程序
较大型
5~20
2~3年
50k~100k
数据库系统
大型
100~1000
4~5年
1M
操作系统
极大型
2000~5000
5~10年
1M~10M
空中交通管制系统
上一页
下一页
停止放映
第20|83页
软件开发技术发展史





上一页
应用驱动是推进软件发展进程的主线:
从软件发展早期的按个人意愿编写代码,到按
软件工程的理论生产大型应用系统;
从手工作坊式的封闭性制作到按标准制式、大
工业生产的开放系统;
从注重个人精雕细琢地编写代码的技巧到注重
工程项目的管理和开发团队的协作;
从为特定应用定制设计到以复用为目标的组件
式开发;
从由少数软件天才的编程艺术到由广大用户直
接参与的应用开发。
下一页
停止放映
第21|83页
阶段划分



上一页
半个多世纪以来,软件及软件开发技术在
理论、观念、目标及技术方法等方面都发
生了很大变化。
以10年左右为间隔,划分为五个阶段。详
见表1-2。
讨论每个时期软件开发技术的特点,包括
软件开发技术处理的对象、用途、目的、
开发方法、开发工具、发展状况、技术突
破、理论成就及目标等。
下一页
停止放映
第22|83页
第一阶段20世纪 40-50年代
早期计算机是由只有硬件的“裸机”组成,计
算机中不装任何软件。由于采用电子管作为
逻辑电路的元器件,系统稳定性很差。
那时人们只关心硬件的性能和技术指标,系统
设计与实现是以硬件为中心,软件开发(实
际上是程序设计)处于从属地位。
上一页
下一页
停止放映
第23|83页
软件主要特征










处理对象:由“0”和“1”组成的二进制序列 ;
用途:主要是科学计算及军事应用(弹道计算);
目的:“确定计算机硬件动作的序列”;
开发方法:经验主义;
开发工具:机器语言;
认识:计算机的用途是快速计算。
发展概况:机器语言、汇编语言、FORTRAN语言;
技术突破:存储器技术、 “迭代-反复”算法、观念转变 ;
理论成就:冯·诺依曼理论和图灵测试;
目标:用最少资源来获得最大运算能力。
上一页
下一页
停止放映
第24|83页
阶段软件大事件








上一页
下一页
停止放映

1945年6月30日,冯·诺依曼(John von Neumann)在EDVAC计算机设计报告草
案中介绍了存储程序的概念。
1946年6月,冯·诺依曼与高德斯坦等人发表了《电子计算机装置逻辑结构初
探》的论文,成为EDVAC的设计基础。
1950年10月,图灵发表《计算机器与智能》(Computing Machinery and
Intelligence)论文,指出如果一台机器对于质问的响应与人类的响应完全
无法区别,那么这台机器就具有智能。今天,人们把这一论断称为图灵测试,
它奠定了人工智能的理论基础。
1952年霍普研制成功第一个编译程序A-O。
1954年IBM资助的一个委员会在John Backus领导下开始研制高级语言,设计
用于科学与工程计算的FORTRAN语言。
1956年IBM推出了IBM704,其机器性能较以前的计算机有了显著提高。并且在
其上首次运行了符号汇编程序SAP,成为程序发展史上最有意义的事。它确立
了汇编的基本形式。
1957年,在IBM704上运行了第一个高级语言FORTRAN,至今还在使用。
1958年,推出多个高级语言。有麻省理工学院(MIT)的麦卡锡(John
McCarthy)为人工智能领域的应用而设计LISP语言;有第一个用于数控机床
的编程的专用语言APT;还有用于商业数据处理的语言Flow-Matic。
1858年,Alex Bernstein等人在IBM704机开发的第一个成熟的程序——象棋
程序;有Alan Newell等人使用高级语言首次开发的模仿人类思维过程的程序;
第25|83页
还有空中交通管理系统。
第二阶段20世纪 60年代
由于硬件技术的发展,在电路设计中广泛采用
晶体管和集成电路,使计算机的体积大大缩
小,系统稳定性提高,价格降低。开始出现
以屏幕显示器和键盘输入方式的商用计算机,
促进了计算机的产、销量急剧上升。
上一页
在软件领域,应用领域拓宽,社会对应用软件
的需求急剧增加,软件的地位和作用不断提
高,从而有力地推动了软件技术和开发方法
的改进和发展。
下一页
停止放映
第26|83页
软件主要特征
处理对象:高级语言编写的程序 ;
 用途:科学计算、商务应用和数据处理;
 目的:“确定计算机指令的动作序列”;
 开发方法:功能性程序设计;
 开发工具:汇编语言、高级语言;
 认识:软件应独立于硬件;必须规范程序内部控制流;
 发展概况:高级语言;编译技术;非数值商业应用;软件危
机
 技术突破:高级语言促进计算机应用 ;功能性程序设计技术;
 理论成就:软件工程解决软件危机;结构化程序设计理论;
上一页
 目标:扩大程序系统的规模,以适应更复杂的应用。

下一页
停止放映
第27|83页
阶段软件大事件





上一页
下一页
停止放映

1960年,ALGOL60语言是使用递归的第一个面向过程的语言,用与数
学与科学计算。同年创建通用商用语言COBOL。
1961年诞生了第一个模拟语言GPSS。同年MIT在 IBM7090上开发了第
一个实验性分时系统CTSS(Compatible Time Sharing System)。当
时的7090只有32K内存,监控程序为5K,剩下27K给用户使用。CTSS支
持32个用户,对 IBM后来的操作系统产生了很大的影响。
1962年, 在测试技术方面,Auerback公司提供了最早的基准程序
Benchmark用于测试技术。同年,贝尔实验室研制了用语音谱图识别
语音。和能设计、存储及编辑合成音乐的软件。
1963年,贝尔实验室发明了能够专门处理字符串的SNOBOL语言。同年,
花费了80亿美元的美国半自动防空系统(SAGE)研发成功投入使用。
1964年5月1日,美国达特茅斯学院的凯梅尼和汤姆斯发明推出了
BASIC语言。同年,IBM公司开发出报表生产程序RPGⅡ。后来有人认
为RPGⅡ是第四代编程语言的先兆。IBM经过7年努力,完成了航空订
票系统,还在当年开发了计算机辅助设计系统。
1965年,开始了服务于大型分时系统的MAC工程。后来发展成为
Multics操作系统。 同年,荷兰计算机科学家迪克斯特拉(Dijkstra)
提出结构化编程技术,适合在软件的详细设计或低层设计及编码实现
阶段采用。
第28|83页
阶段软件大事件(续)



上一页
下一页
停止放映

1966年,IBM公司的P.H.Howard提出英文字符识别系统,推动了文字识
别技术的发展。R.Casey和G.Nagy对汉字OCR(光学字符识别)进行了研
究,并提出二级匹配的方法。
1967年,挪威计算中心的O.J.Dahl和K.Nygaard用ALGOL语言开发出
Simula67用于模拟应用,这是第一个面向对象语言。同年,美国科学家克
努斯经典著作——The Art of Computer Programming。把算法与数据结
构作为独立实体从使用它们的程序中分离出来,开创数据结构,算法理论。
1968年10月北大西洋公约组织(NATO)的科学委员会在德国加尔密斯
(Garmisch)开会讨论软件可靠性及软件危机的问题,产生了关于“软件
工程”的加尔密斯报告,首次提出了 “软件工程”的问题。 同年,荷兰
科学家埃德 Edsgar W.Dijkstra在 ACM通信上发表了“GOTO语句值得考
虑的害处”的论文,引发了一场关于结构化编程的大讨论。国际信息处理
联合会(FP)鼓励使用六位数字的数据格式(YYMMDD)来表示日期进行信
息交换,从而造成2000年危机问题。同年Ivan E.Suterland提出窗口技
术。
1969年,贝尔实验室的Dennis M.Ritchie和K.Thompson用PDP-7汇编指
令编写了UNIX的第一版本V1。UNIX的发展对计算机界、尤其是对软件界产
生了巨大而深刻的影响。
第29|83页
第三阶段20世纪 70年代
这个时期计算机硬件的发展具有里程碑的意义,
采用诸如大规模集成电路,分布式技术、网
络技术、嵌入式等高新技术极大地提高了计
算机系统的处理能力,特别是微处理器的诞
生,开创了大众化使用计算机的新时代。
该阶段软件的特征是:高性能的计算机系统对
软件的功能和性能提出了更高的要求。
上一页
下一页
停止放映
第30|83页
软件主要特征










处理对象:小规模系统的程序设计 ;
用途:商务应用;网络互联;数据库应用;
目的:“研究数据结构和算法以寻求处理的时-空平衡”;
开发方法:研究数据结构和算法;结构 化开发方法;
开发工具:高级语言;数据库技术;
认识:平衡时-空平衡复杂度;程序执行的停机;程序可读性;
发展概况:数据独立(文件、DB);对复杂系统的规格说明;
技术突破:数据结构及算法 ;区分了应用软件和系统软件;
理论成就:数据结构及算法 理论;形式方法;软件工程方法;
目标:解决软件危机。
上一页
下一页
停止放映
第31|83页
阶段软件大事件



上一页
下一页
停止放映
1970年,Winston Royce在他的《管理大型软件系统的开发》提出了著名的
“瀑布模型” 。同年,柯特(E.F.Codd)提出关系模型为关系数据库技术
的发展打下基础。在编程语言方面,出现了用于系统程序设计的 BLISS语言,
用来编写编译程序和操作系统。
1971年,瑞士联邦技术学院的伍尔斯教授发明了第一个结构化的编程语言
Pascal,并用17世纪法国著名科学家 Blaise Pascal(帕斯卡)的名字命名。
同年,伍尔斯教授还提出“自顶向下、逐步细化”的结构化程序设计方法。
Friedrich I.Bauer提出软件工程的定义:“确立并使用正确的工程原理和
方法,以便能够经济地获得可靠而有效的软件。” 巴拿斯提出了信息隐藏的
原理,对软件工程的发展产生巨大影响。
1972年,出现三种有深远影响的编程语言:贝尔实验室的 Dennis Ritchie发
明的C语言。它在Martin Richards的 BCPL语言和 Ken Tbompston的B语言的
基础上进行发展。最初的C语言是为编写UNIX而设计的,并在PDP-11上首先实
现。法国马赛大学的Alan Colmeratuer发明 PROLOG语言,用于人工智能领域,
其在欧洲和日本比较流行。Xerox公司Palo Alto研究中心 Alan Kay(艾
兰·凯)发明的 Smalltalk语言。它是一种面向对象的语言,适合使用鼠标工
作的可视计算机系统,它体现了与传统程序设计不同的观念及风格。同年,
在计算机科学的理论方面,计算复杂性理论提出了NP问题的思想。提出对某
些大规模的计算问题(如旅行商问题),其计算量是极其巨大的。同年,华
第32|83页
裔科学家王安发展了字处理系统。
阶段软件大事件(续)





上一页
下一页
停止放映
1974年G.J.Myers,W.Stevens,L.Constantine,E.Yourdon等发展了
结构化设计(SD)方法,基本思想是通过模块化建立一个结构良好的系统。
同年,在斯得哥尔摩的象棋比赛中,计算机进行了首次赛事。
1975年,M.A.Jackson提出JSP方法,它是适合中小型数据处理系统进行模
块结构设计的一种方法。同年,Charles H.Moore发明了Forth语言,它适
合实时控制及工业机器人的编程。这一年还出现了SPSS语言,用于社会科学
的统计。勃洛克发表著作“人月的秘密” ,提出在拖延了的项目中增加人
员只会使项目更为延期的观点。
1976年B.W.Boehm又对软件工程给出定义:“在软件(包括程序和文档)
设计、实现、测试、运行、维户的各个过程中.建立在科学基础上的一套实
用方法”。C.A.Hoare则认为软件工程是“一种导致电子数字计算机具有
强大功能的艺术,这种功能表现为人可以方便地使用计算机”。
1977年,美国国家计算机和信息处理标准委员会(ANSC-X3)制定信息交换
代码ASCII的标准X3.4-1977。
1979年,在美国国防部新语言的评审中,法国人Jean Ichbiah主持设计的绿
色语言HoneywellBull最后获胜。同年5月,以对编程做过重大贡献的爱达·拉
夫拉斯伯爵夫人的名字命名新语言Ada。还是在这一年,贝尔实验室的
L.R.Rabiner等利用聚类技术开发了不定人的英语识别系统。
第33|83页
第四阶段20世纪 80年代
这个时期计算机硬件的发展体现在个人计算机和计算机
网络。
上一页
该阶段软件发展的特征是:个人计算机应用软件异军突
起,形成信息产业中新的增长点。伴随微处理器和嵌
入式系统的发展,计算机应用开始深入我们的日常工
作和生活。旺盛的市场需求和政府企业甚至广大百姓
的资金投入,孕育了大量软件企业。市场竞争和市场
经济规则促进了软件产品功能更强,质量更高,性能
价格比更好。大型机(包括中、小型机)软件向个人
计算机上移植,从而为软件提供了更广阔的发展空间
和巨大的用户市场。
下一页
停止放映
第34|83页
软件主要特征









上一页
下一页

处理对象:大型系统的程序设计 ;
用途:关系数据库应用;各领域计算机应用;
目的:大众化普及应用计算机;
开发方法:构造系统方法;用标记工具描述系统;文档是
管理系统结构的主要手段;
开发工具:高级语言;基于PC的开发工具;早期CASE工具;
认识:软件生命周期;强调开发组协作的重要性;
发展概况:软件工程研究机构;CASE环境;图形界面系统;
技术突破:C/S计算模式 ;GUI图形用户界面;
理论成就:RDB的理论; 软件工作量度量COCOMO;软件过
程改进模型CMM;
目标:开发更大规模和复杂性软件系统,满足应用的需求。
停止放映
第35|83页
阶段软件大事件






上一页

下一页
停止放映

1980年8月,经过长期的努力,由美国国防部确定把ADA语言用于过程控制与
嵌入式应用。
1981年,B.W.Boehm出版了《软件工程经济学》,提出构造费用模型
(COCOMO)作为软件的价格估计模型。引起了软件度量的发展。同年,
R.Abbott总结了面向对象的设计方法学。在这一年,美国 Ashton Tate公司
推出关系数据库dBASEⅡ,并迅速赢得世界范围内的巨大市场。
1981年,IBM公司推出个人计算机IBM PC,选Microsoft公司的MS-DOS作为其
个人计算机的操作系统,并将其命名为PC-DOS。从而为Bill Gates的
Microsoft公司的发展开辟一条通往成功的道路。
1981年,中国颁布了《信息交换用汉字编码字符集·基本集》,国家标准代号
GB2312-80。
1982年,John Warnock开发了 Postscript的页面描述语言,该语言后来形成
著名的 Adobe系统。同年,Autodesk 公司推出了计算机辅助设计系统
AutoCAD第一版。
1983年,王永民发明了“五笔字型”汉字输人法。AT&T公司公布了UNIX
System V,伯克利分校公布了4.2BSD。同年,Apple公司推出鼠标操作的图标
及下拉式菜单的工作方式,开创了图形操作界面的先河。
1983年,贝尔实验室发展了C++语言,既在C语言的基础上增加了面向对象程
序设计所需要的抽象数据类型——类。
1984年,Fox Software公司推出 PC关系数据库系统FoxBASE。同年,Novell
第36|83页
公司推出局域网络管理系统Netware V1.0。
阶段软件大事件(续)





上一页
下一页
停止放映
1984年10月15日,国际标准化组织ISO制定了开发系统互连参考模型OSI/RM,即
ISO7498-1。它从逻辑上把网络功能分成七层。同年,计算机图形学在Apple公
司的Macintoch操作系统上取得极大成功。
1985年,Microsoft公司推出Windows窗口界面操作系统。ISO提出软件质量度量
模型建议。该模型分高、中、低三层,各层均有多项评价准则。
1986年,Oracle公司推出 Distributed ORACLE分布式关系数据库。同年,出版
了世界第一部电子图书,《美国科学院百科全书》,它的3万个图,900万字的
内容就存储在一张5.25英寸的CD-ROM光盘上。同年,Wall Street Journal 出
书把计算机辅助软件工程CASE的概念推广开来。
1987年,卡内基梅隆大学的软件工程研究所的Watts Humphrey等发表了“软件
过程成熟度框架”,后来成为用于预测开发单位是否有能力生产可靠软件的
“能力成熟度模型CMM”。同年,IBM公司和Microsoft公司合作推出OS/2操作系
统,为IBM公司的PS/2 个人计算机系统配套。OS/2被称为32位微机的新一代操
作系统。
1988年,Barry Boehm提出了软件系统开发的“螺旋模型”。后来,该模型被认
为能有效提高系统开发效率。同年,ACM的一个工作组提出一份报告“计算仍是
一门学科”。它把计算机学科归纳为九个主题领域:算法与数据结构、体系结
构、人工智能与机器人学,数据库与情报检索、人机通信、数值与符号计算,
操作系统,编程语言,软件工程与方法学。它还包括了三种不同的处理方法:
理论、抽象、设计,构成计算机学科的3×9矩阵。
第37|83页
第五阶段20世纪 90年代
当计算技术发展到网络计算,标志着计算机网络时代的到
来。伴随处理分散的海量数据的应用需求,诞生并促进
了分布式技术、并行计算、人工神经网络等技术的发展。
反映该阶段的软件特征是:多媒体信息的实时处理技术成
为研究的热点;计算机系统内部传统的处理模式(单指
令流单数据流SISD和单指令流多数据流SIMD)受到极大
挑战,具有并行处理功能的新型处理模式(多指令流多
数据流MIMD)倍受关注和厚爱;面向对象的开发方法代
表着在新处理环境中提高软件开发效率和质量的方向;
信息唾手可得的网络服务软件满足着人们日益增长的应
用需求。
上一页
下一页
停止放映
第38|83页
软件主要特征
处理对象:基于Internet/Web的程序设计 ;
 用途:网络互联及网络应用;
 目的:通过支持跨地区、跨部门、跨时间的群组共享信息协同
工作来提高群组,集团的整体的生产率;
 开发方法:基于组件、基于Internet/Web的开发方法;
 开发工具:组件技术;基于Web开发工具;现代CASE工具 ;
 认识:非功能性需求的重要性;基于环境的软件过程改造;
 发展概况:Internet/Intranet;基于Web应用;虚拟现实技术;
新技术涌现,但缺乏理论指导;
 技术突破:设计模式 ;浏览器技术;CORBA/COM/OLE技术;
 理论成就:“交互模型”作为网格计算的理论基础;
上一页目标:正确的时刻,把正确的信息,安全地送给需要的人。

下一页
停止放映
第39|83页
阶段软件大事件





上一页
下一页
停止放映

1990年,Tim Berners Lee提出了关于World Wide Web的原型,并同
时给出了 URL、HTML和HTTP的概念。同年,国际标准化组织接受UNIX
标准POSLX为国际标准 ISO9945/1。这一年,Microsoft 公司的
Windows取得极大成功。
1991年IBM与Microsoft分道扬镳。6月13日,中国颁布了《计算机软
件保护条例》,并于同年10月1日开始实施。
1992年l月,Intel公司和Microsoft公司联合发表有关保持环境的APM
标准。
1993年,伊利诺斯州大学的超级计算机应用研究中心的学生和研究人
员开发了第一个基于图形用户界面的Internet浏览器,取名为NCSA
Masaic。同年,美国白宫发表了一份报告,阐述了克林顿政府的
“National Information Infrastructure”(国家信息基础建设)发
展计划。人们把 NII常称为“Information Super Highway”(信息高
速公路)。
1994年,Netscape公司首次推出它的浏览器Navigator。由于它卓越
的功能和便捷的操作方式,使其在很短的时间内风靡世界。
1995年,SUN公司推出了Java及其集成开发环境。Java语言是基于
Internet的编程语言,使得应用程序同时在不同平台运行成为可能。
同年,Microsoft公司推出 Windows95。
第40|83页
软件危机



上一页
下一页
从20世纪60年代开始,软件界经常遭受软件危机
的袭扰。
以IBM公司的OS/360操作系统为例。它共有4000多
个模块、100万行指令,共投入5000人年,耗资5
亿美元,但在交付使用的系统中仍找出2000个以
上的错误。
经研究发现,研制软件系统需要投入大量的人力、
物力和资金,但是系统的质量却无法保证。开发
软件所需的高成本与软件产品的低质量之间存在
尖锐的矛盾。软件开发陷入不可自拔的恶性循环
之中。这种现象被称为“软件危机”(Software
Crisis)。
停止放映
第41|83页
软件危机的表现
⑴软件开发进度难以预测
⑵软件开发成本难以控制
⑶用户对软件功能难以满足
⑷软件产品质量无法保证
⑸软件产品难以维护
⑹软件通常缺少适当的文档资料
⑺生产率提高的速度不能满足社会需要
上一页
下一页
停止放映
第42|83页
⑴软件开发进度难以预测
拖延工期几个月甚至几年的现象并不罕见,这种现象降低了软件开发
组织的信誉。
以丹佛新国际机场为例
该机场规模是曼哈顿机场的两倍,宽为希思机场的10倍,
可以全天侯同时起降三架喷气式客机;
 投资1.93亿美元建立了一个地下行李传送系统,总长21
英里,有4,000台遥控车,可按不同线路在20家不同航
空公司柜台、登机门和行李领取处之间发送和传递行李;
 支持该系统的是5,000个电子眼、400台无线电接受机、
56台条形码扫描仪和100台计算机
 按原定计划要在1993年万圣节前启用,但一直到1994年
6月,该系统还无法正常运行。
据研究结果统计:只有15%的项目是按计划完成的。

上一页
下一页
停止放映
第43|83页
⑵软件开发成本难以控制
投资一再追加,令人难于置信。据同样的研究统计结
果表明:仅有10%的项目是按费用计划完成的。
上一页
例如,20世纪80年代初,美国国内税收服务处(IRS)
让Sperry公司开发一套联邦税收表格自动处理系统。
结果是:系统被证明不适合当前的工作量,花费几
乎是预算的两倍,必须立即更换(华盛顿邮报的报
道)。到1985年,还需要再追加9千万美元来改进
Sperry公司最初价值1.03亿美元的设备。另外,因
为出现的问题阻碍了IRS按时返还纳税者的税款,
IRS还被迫偿还4. 02亿美元的利息以及2.23千万美
元的工资给加班职员。
下一页
停止放映
第44|83页
⑶用户对产品功能难以满足
开发人员和用户之间很难沟通、矛盾很难统
一。往往是软件开发人员不能真正了解用户的
需求,而用户又不了解计算机求解问题的模式
和能力,双方无法用共同熟悉的语言进行交流
和描述。
在双方互不充分了解的情况下,就仓促上阵设
计系统、匆忙着手编写程序,这种“闭门造车”
的开发方式必然导致最终的产品不符合用户的
实际需要。
表1-4显示了开发系统失败所造成的经济损失。
上一页
下一页
停止放映
第45|83页
⑷软件产品质量无法保证
上一页
下一页
停止放映
系统中的错误难以消除。软件是逻辑产品,质量
问题很难以统一的标准度量,因而造成质量控
制困难。
例如,一次美国在肯尼迪角发射一枚阿脱拉斯火
箭,预定将用这种火箭运载飞往金星的宇宙飞
船。火箭飞离地面几十英里高空开始翻转,地
面控制中心被迫下令自爆炸毁。后经检查发现
是飞行计划程序中漏掉一个连字符。就是这样
一个连字符的疏漏造成这枚价值1850万美元的
火箭实验失败。
据统计数字表明:在大型系统中,约3/4的系统
有问题。表1-5显示了美国对政府开发的9个软
件项目调查的结果。可用系统只占不到5%。
第46|83页
⑸软件产品难以维护
软件产品本质上是开发人员的代码化的
逻辑思维活动,他人难以替代。除非是
开发者本人,否则很难及时检测、排除
系统故障。
为使系统适应新的硬件环境,或根据用
户的需要在原系统中增加一些新的功能,
又有可能增加系统中的错误。
上一页
下一页
停止放映
第47|83页
⑹软件缺少适当的文档资料
文档资料是软件必不可少的重要组成部分。
实际上,软件的文档资料是开发组织和用户
的之间权利和义务的合同书,是系统管理者、
总体设计者向开发人员下达的任务书,是系
统维护人员的技术指导手册,是用户的操作
说明书。
缺乏必要的文档资料或者文档资料不合格,
将给软件开发和维护带来许多严重的困难和
问题。
上一页
下一页
停止放映
第48|83页
⑺软件开发供不应求
软件开发生产率的提高速度,难以满足社
会需求的增长率。软件产品“供不应求”
的现象致使不能充分利用现代计算机硬件
提供的巨大潜力。
上一页
下一页
停止放映
第49|83页
软件危机产生的原因
产生软件危机有两个方面的原因:
• 与软件本身的特点有关;是内在因
素、客观的存在,只能因势利导加
以解决。
• 与软件开发和维护的技术方法有关;
是外在因素,可以完善、提高。
上一页
下一页
停止放映
第50|83页
软件特点的因素(内因)
软件是逻辑产品,是代码化了的人的思维活
动。在总体构思时,别人无法管理和干预。
在写出程序、并在机器上运行之前,进展情
况难以掌握,开发质量也无法评估。这些都
给管理和控制带来不便。
上一页
软件是特定问题在计算机上的运行描述。实
际问题的复杂性决定了一个实用软件系统规
模往往十分庞大。大有大的难处。程序规模
越大,控制、管理难度也就越大。
下一页
停止放映
第51|83页
软件开发维护技术方法的因素
开发人员和用户之间的矛盾。许多软件系统开发失
败的主要原因是开发人员在没有准确、完整地了解了用
户的需求后就急于编程;用户对需求也往往不能准确、
完整地提出。
软件开发各阶段任务不明确,方法不科学。软件
产品有其生命周期。在周期的各个阶段有其具体的任务,
如何完成任务,各个阶段有不同的技术方法和操作步骤。
只有科学的按生命周期各阶段的任务去组织实施,才能
保证质量,降低成本;急于求成,不按科学规律、方法
实施,只能“事倍功半”,事与愿违。
重编程,轻分析;重开发,轻维护;重程序,轻
文档。软件产品的使用寿命很长。在这期间要对软件
上一页
下一页
停止放映
进行必要的修改。据统计数据表明,软件维护的费用占
总费用的55%~70%。软件工程的一个重要目标就是提高
软件的可维护性,减少软件维护的代价。
第52|83页
导致软件开发项目失败的原因


从表1-6的1、2、4、6、8可以看出,用户
需求不稳定、不清晰、不完整是项目失败
的主要原因,应引起足够的重视。
软件开发方法的研究应针对项目失败的原
因系统地提出解决办法。
上一页
下一页
停止放映
第53|83页
解决软件危机的途径
上一页
下一页
停止放映
(1)采用现代化、社会化的组织管理方式;
(2)使用成功的技术和方法(面向过程、面向对
象、自顶向下等);
(3)使用更好的软件开发工具(汇编、C、VC、
各种数据库管理系统等);
为了解决软件危机就要从技术措施和组织管理
两个方面去研究,不断总结经验教训,提高软
件生产效率,降低软件开发和维护的成本。
开发软件选用最好的开发工具是至关重要的,
即选择、设置良好的软件工程支撑环境。工具
选用的好,它可以“放大”人的智力,大大加
快软件开发速度,提高软件质量。
第54|83页
软件生命周期



软件生存周期是指一个软件从提出开发要求
直到该软件报废为止的整个时期。
针对不同的开发模型、不同的开发对象以及
不同的开发方法,软件生命周期可以有不同
的划分。
如果不考虑上述不同的因素以及应用领域、
项目规模和复杂性,软件生命周期可以划分
为软件定义、软件开发和软件维护三个时期,
每个时期又进一步划分成若干个阶段。
上一页
下一页
停止放映
第55|83页
软件定义



上一页
软件定义时期的核心任务是:
“做什么”。即要确定软件开发工程的总目
标;确定工程的可行性;提出实现工程目标应
该采用的策略及系统应实现的功能;估计完成
该项工程需要的资源和成本,并且制定工程进
度表。
这个时期的工作通常又称为系统分析,由系统
分析员负责完成。
软件定义时期通常进一步划分成3个阶段:问
题定义、可行性研究和需求分析
下一页
停止放映
第56|83页
软件开发


软件开发时期的核心任务是:“怎么做”。
即要具体设计和实现在软件定义时期定义
的软件系统。
它又包括4个阶段:总体设计,详细设计,
编码和测试。其中前两个阶段又称为系统
设计,后两个阶段又称为系统实现。
上一页
下一页
停止放映
第57|83页
软件维护


上一页
维护时期的核心任务是:“改变”。即要
保证软件持久地满足用户各个方面改变的
需要。
维护时期不再进一步划分阶段,但是每一
次维护活动本质上都是一次压缩和简化了
的定义和开发过程。例如,如果提出的变
更要求是更加新的功能,那就要涉及从新
一轮的软件开发过程:需求分析、系统设
计、编码及测试。
下一页
停止放映
第58|83页
欢迎参加计教中心网站的学习讨论。
中心网址:
http://ctec.xjtu.edu.cn
课件下载地址:
ftp: //ctec.xjtu.edu.cn
我的E-mail地址:
[email protected]
上一页
谢谢,再见!
下一页
停止放映
第59|83页