软件危机
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件危机
落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
20 世纪60年代以前,计算机主要为电子管计算机,体积大,速度慢,性能较差,计算机刚刚投入实际使用,软件设计往往只是为了一个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言,软件的规模比较小,文档资料通常也不存在,很少使用系统化的开发方法,设计软件往往等同于编制程序,基本上是个人设计、个人使用、个人操作、自给自足的私人化的软件生产方式。
1964年4月,以IBM360为代表德大容量、高速度的计算机—集成电路计算机出现,使计算机的应用范围迅速扩大,软件开发急剧增长。高级语言开始出现;操作系统的发展引起了计算机应用方式的变化;大量数据处理导致第一代数据库管理系统的诞生。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率,软件危机开始爆发。
早期出现的软件危机主要表现在:
①软件开发费用和进度失控。费用超支、进度拖延的情况屡屡发生。有时为了赶进度或压成本不得不采取一些权宜之计,这样又往往严重损害了软件产品的质量。
②软件的可靠性差。尽管耗费了大量的人力物力,而系统的正确性却越来越难以保证,出错率大大增加,由于软件错误而造成的损失十分惊人。
③生产出来的软件难以维护。很多程序缺乏相应的文档资料,程序中的错误难以定位,难以改正,有时改正了已有的错误又引入新的错误。随着软件的社会拥有量越来越大,维护占用了大量人力、物力和财力。进入80年代以来,尽管软件工程研究与实践取得了可喜的成就,软件技术水平有了长足的进展,但是软件生产水平依然远远落后于硬件生产水平的发展速度。
为此,1968 年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,第一次讨论软件危机问题,并正式提出“软件工程”一词,从此一门新兴的工程学科——软件工程学——为研究和克服软件危机应运而生。
当前,类似的软件问题依然存在,具体体现在:
1. 软件开发进度难以预测
拖延工期几个月甚至几年的现象并不罕见,这种现象降低了软件开发组织的信誉。以丹佛新国际机场为例:
该机场规模是曼哈顿机场的两倍,宽为希思机场的10倍,可以全天侯同时起降三架喷气式客机;投资1.93亿美元建立了一个地下行李传送系统,总长21英里,有4,000台遥控车,可按不同线路在20家不同的航空公司柜台、登机门和行李领取处之间发送和传递行李;支持该系统的是5,000个电子眼、400台无线电接受机、56台条形码扫描仪和100台计算机。按原定计划要在1993年万圣节前启用,但一直到1994年6月,机场的计划者还无法预测行李系统何时能达到可使机场开放的稳定程度。
2. 软件开发成本难以控制
投资一再追加,令人难于置信。往往是实际成本比预算成本高出一个数量级。
而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量,从而不可避免地会引起用户的不满。
3. 用户对产品功能难以满足
开发人员和用户之间很难沟通、矛盾很难统一。往往是软件开发人员不能真正了解用户的需求,而用户又不了解计算机求解问题的模式和能力,双方无法用共同熟悉的语言进行交流和描述。
在双方互不充分了解的情况下,就仓促上阵设计系统、匆忙着手编写程序,这种“闭门造车”的开发方式必然导致最终的产品不符合用户的实际需要。
4. 软件产品质量无法保证
系统中的错误难以消除。软件是逻辑产品,质量问题很难以统一的标准度量,因而造成质量控制困难。
软件产品并不是没有错误,而是盲目检测很难发现错误,而隐藏下来的错误往往是造成重大事故的隐患。
5. 软件产品难以维护
软件产品本质上是开发人员的代码化的逻辑思维活动,他人难以替代。除非是开发者本人,否则很难及时检测、排除系统故障。
为使系统适应新的硬件环境,或根据用户的需要在原系统中增加一些新的功能,又有可能增加系统中的错误。
6. 软件缺少适当的文档资料
文档资料是软件必不可少的重要组成部分。
实际上,软件的文档资料是开发组织和用户的之间权利和义务的合同书,是系统管理者、总体设计者向开发人员下达的任务书,是系统维护人员的技术指导手册,是用户的操作说明书。
缺乏必要的文档资料或者文档资料不合格,将给软件开发和维护带来许多严重的困难和问题。最典型失败系统的例子是:
IBM公司开发OS/360系统,共有4000多个模块,约100万条指令,投入5000人年,耗资数亿美元,结果还是延期交付。在交付使用后的系统中仍发现大量(2000个以上)的错误。
原因
软件工程研究结果表明,软件危机的原因主要有两方面:
与软件本身的特点有关
软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件;软件样品即是产品,试制过程也就是生产过程;软件不会因使用时间过长而“老化”或“用坏”;软件具有可运行的行为特性,在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况较难衡量,软件质量也较难评价,因此管理和控制软件开发过程十分困难;软件质量不是根据大量制造的相同实体的质量来度量,而是与每一个组成部分的不同实体的质量紧密相关,因此,在运行时所出现的软件错误几乎都是在开发时期就存在而一直未被发现的,改正这类错误通常意味着改正或修改原来的设计,这就在客观上使得软件维护远比硬件维护困难;软件是一种信息产品,具有可延展性,属于柔性生产,与通用性强的硬件相比,软件更具有多样化的特点,更加接近人们的应用问题。
随着计算机应用领域的扩大,99%的软件应用需求已不再是定义良好的数值计算问题,而是难以精确描述且富于变化的非数值型应用问题。因此,当人们的应用需求变化发展的时候,往往要求通过改变软件来使计算机系统满足新的需求,维护用户业务的延续性。
来自于软件开发人员的弱点
其一,软件产品是人的思维结果,因此软件生产水平最终在相当程度上取决于软件人员的教育、训练和经验的积累;
其二,对于大型软件往往需要许多人合作开发,甚至要求软件开发人员深入应用领域的问题研究,这样就需要在用户与软件人员之间以及软件开发人员之间相互通讯,在此过程中难免发生理解的差异,从而导致后续错误的设计或实现,而要消除这些误解和错误往往需要付出巨大的代价;