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页