首页 理论教育软件危机导致局势严峻,需改变开发方式

软件危机导致局势严峻,需改变开发方式

【摘要】:原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率,软件危机开始爆发。遇到的问题找不到解决办法,致使问题堆积起来,形成了人们难以控制的局面,“软件危机”形势严峻。IBM360操作系统的历史教训已成为软件开发项目中的典型事例被记入史册。产生软件危机的主要原因是软件开发人员错误地认为:①开发软件就是编程,不注重软件开发过程,忽视了分析、设计、测试、维护的工作。

20世纪60年代以前,计算机刚刚投入实际使用,软件设计往往只是为了一个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言,软件的规模比较小,文档资料通常也不存在,很少使用系统化的开发方法,设计软件往往等同于编制程序,基本上是个人设计、个人使用、个人操作、自给自足的私人化的软件生产方式

60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件开发需求急剧增长。高级语言开始出现,操作系统的发展引起了计算机应用方式的变化,大量数据处理导致第一代数据库管理系统的诞生。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率,软件危机开始爆发。

60年代中期以后,计算机硬件技术日益进步,计算机价格的下跌为它的广泛应用创造了极好的条件。在这种形势下,一些开发大型软件系统的要求被提了出来。然而在大型软件的开发过程中出现了复杂程度高、研制周期长、正确性难以保证三大难题。遇到的问题找不到解决办法,致使问题堆积起来,形成了人们难以控制的局面,“软件危机”形势严峻。

最为突出的例子是美国IBM公司于1963—1966年开发的IBM360系列机的操作系统。该软件系统花了大约5 000人一年的工作量,最多时有1 000人投入开发工作,写出近100万行的源程序。尽管投入了这么多的人力和物力,得到的结果却极其糟糕。据统计,这个操作系统每次发行的新版本都是从前一版本中找出1 000个程序错误而修正的结果。可想而知,这样的软件质量糟到了什么地步。难怪该项目的负责人F.D.希罗克斯在总结该项目时无比沉痛地说:“……正像一只逃亡的野兽落到泥潭中作垂死挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难……程序设计工作正像这样一个泥潭……一批批程序员被迫在泥潭中拼命挣扎……谁也没有料到问题竟会陷入这样的困境……”IBM360操作系统的历史教训已成为软件开发项目中的典型事例被记入史册。

将大的浮点数转换成整数是一种常见的程序错误来源。1996年6月4日,欧洲航天局研制的阿里亚娜五型(Ariane 5)火箭的初次航行造成了灾难性的后果。发射后仅仅37秒,火箭偏离它的飞行路径,爆炸并解体了。火箭上载有价值5亿美元的通信卫星,连同火箭本身,6亿美元付之一炬。后来的调查显示,控制惯性导航系统的计算机向控制引擎喷嘴的计算机发送了一个无效数据,在将一个64位浮点数转换成16位有符号整数时产生了溢出。在设计Ariane 4火箭的软件时,软件开发人员小心地分析了数值,并且确定该数据绝不会超出16位。不幸的是,他们在Ariane 5火箭的系统中简单地重新使用了这一部分,没有检查它所基于的假设。

如果开发的软件隐含错误,可靠性得不到保证,那么在软件运行过程中很可能对整个系统造成十分严重的后果,甚至导致整个系统的瘫痪,造成无可挽回的巨大损失。1963年,美国用于控制火星探测器的计算机软件中的一个“,”被误写为“·”,致使飞往火星的探测器发生爆炸,造成高达数亿美元的损失。1965年至1970年,美国范登堡基地多次发射火箭失败,绝大部分故障是由应用程序错误造成的。有一次,在美国肯尼迪航天中心发射一枚阿脱拉斯火箭,火箭飞离地面几十英里后在高空开始翻转,地面控制中心被迫下令炸毁。后经检查发现是飞行计划程序里漏掉了一个连字符。就是这样一个小小的疏漏造成了这枚价值1 850万美元的火箭的试验失败。

产生软件危机的主要原因是软件开发人员错误地认为:

①开发软件就是编程,不注重软件开发过程,忽视了分析、设计、测试、维护的工作。(www.chuimin.cn)

②软件很灵活,很容易修改。软件确实容易修改,但难的是如何正确地修改,并且不引入新的错误,而且越到软件开发后期,软件修改的难度和代价也越大。

③增加人员可以加快进度。对于进度已落后的软件开发项目,增加人员只会让其进度更加落后。

④软件开发最重要的是编程技巧。光重视编程技巧而忽视了编程的规范性,不注意信息交流,从而导致开发人员难以合作,软件难以维护。

试比较以下两段功能完全相同的C语言程序:

显然程序A比较容易理解,更便于开发人员之间交流和维护软件。

因此,为了应对软件危机,一方面,需要对程序设计方法、程序的正确性和软件的可靠性等问题进行系列的研究;另一方面,也需要对软件的编制、测试、维护和管理的方法进行研究。

软件工程”这一概念是1968年在NATO(北大西洋公约组织)一次专门讨论软件危机的国际会议上正式提出的,其基本思想是用“工程”的概念来开发软件,使得软件开发过程变得可管理、可控制并保证软件开发的质量。