软件与软件危机
一、软件发展历史:四个时代:**- 程序设计的原始时代(20世纪50年代)****- 基本软件时代(20世纪50年代末~60年代末)****- 程序设计的方法时代(20世纪60年代末~70年代中)****- 软件工程时代(20世纪70年代中~今)**二、软件的概念及特点软件定义软件特点软件分类软件的生命周期三、软件危机:案例引入:软件危机软件危机的表现软件危机产生的原因缓解软件危机的途径一、软件发展历史:
“软件”出现于20世纪60年代,尽管自从第一台计算机问世以来就开始了软件的产生,但“软件”的发展经历了四个时代。
四个时代:
- 程序设计的原始时代(20世纪50年代)
a.生产方式:个体手工劳动;
b.编程语言:机器语言、汇编语言;
c.无软件说明书等任何文档,不可视;
d.开发方法追求编程技巧,程序难懂;
e.只有程序、程序设计概念。
- 基本软件时代(20世纪50年代末~60年代末)
a.操作系统+编译技术;
b.“功能性程序设计”开发方法;
c.高级语言开发工具。
问题:软件数量膨胀,需求复杂,难度变大开发成本高涨,个体化软件开发方式不适应规模大、结构复杂的软件开发,产生了“软件危机”。
- 程序设计的方法时代(20世纪60年代末~70年代中)
a..分层次结构;
b..结构化程序设计方法;
c..各类程序设计语言出现;
d..形成了完整的软件系统;
e.提出“程序设计=数据结构=算法”。
- 软件工程时代(20世纪70年代中~今)
a.出现“软件工程”思想;
b.工程化关系关系;
c.数据库理论生产方式。
软件不是自然规律的产物,是人类思维的创造物,有待理论的更新和不断实践。
二、软件的概念及特点
“软件”一词随计算机的发展,在不同的阶段有不同的认识
软件定义
计算机发展初期,所谓的“软件”就是“程序”,甚至是“机器指令程序”,属于从属地位。意识到机器上增加软件的功能会使计算机系统功能大大提高,在研制计算机系统是考虑到了硬件和软件,认为“软件”是“程序”+“说明书。软件发展到第三阶段,认为’"软件”就是“文档+程序,软件工程时代又有了新的进展。计算机软件可定义为:计算机程序。文档和数据的集合。软件特点
软件是一种逻辑实体,而不是具体的物理实体;软件生产与硬件不同;在软件的运行和使用期间,没有硬件那样的机械 磨损,老化问题;软件的成本相当昂贵。软件分类
系统软件支撑软件应用软件支撑软件软件的生命周期
软件生命周期包括:软件定义、软件开发和软件维护期。
软件定义期~问题定义、可行性研究、需求分析(定义期也成为系统分析)。
软件开发期~总体设计、详细设计、编码和单元测试,其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
软件维护期~使软件持久地满足用户的需要。
三、软件危机:
案例引入:
IBM公司的 OS/360,共约100万条指令,花费了5000个人年;经费达数亿美元,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“…像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。…”1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是程序:
DO 5 I=1,3
误写为:DO 5 I=1 . 31967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁。
软件危机
“软件危机”(Software crisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力财力,而在开发过程中就夭折。
1968年北大西洋公约组织的计算机科学家为了解决“软件危机”正式提出“软件工程”。
软件危机的表现
用户对对软件开发成本和进度的估计常常很不准确;“已完成的”软件系统不满意的现象经常发生;软件产品的质量往往靠不住;软件常常是不可维护的;软件通常没有适当的文档资料;软件成本在计算机系统总成本中所占的比例逐年上升;软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。软件危机产生的原因
软件危机源于:软件本身:与软件的特点有关。
人为因素:软件开发与维护的方法不正确有关。具体原因:
a.软件是逻辑部件,不是物理部件;
b.软件的规模越来越大,结构越来越复杂;
c.软件开发、维护管理困难;
d. 软件开发技术落后;
e.生产方式落后
f.开发工具落后
缓解软件危机的途径
软件危机只能缓解,不能解决。
1. 更新观念,应该彻底消除“软件就是程序”的错误观念。;
2.吸取系统工程的理念,结合组织管理和技术管理两方面。
3.应该不断地去发现、完善、推广使用在实践中总结出来的软件开发的成功的技术和方法;
4.开发更好的软件开发工具。
综上,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。