如何理解软件危机?

软件危机的定义

“软件危机”是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机主要包含了两方面的问题:一是如何开发软件以满足软件日益增长的需求;二是如何维护数量不断增长的已有软件。

软件危机表现形式

(1)对软件开发成本和研制进度的估计常常很不精确。经费预算经常突破,完成时间一拖再拖。这种现象降低了软件开发组织的信誉,而且有时为了赶进度和节约成本所采取的一些权宜之计又往往影响了软件产品的质量,从而不可避免地会引起用户的不满。

2)“已完成”的软件不能满足用户要求。软件开发人员常常在对用户需求只有模糊的了解,甚至对所要解决的问题还没有确切认识的情况下,就匆忙着手编写程序了。软件开发人员和用户又未能及时交换意见,使得一些问题不能得到及时解决,导致开发的软件不能满足用户要求,使得开发失败。

(3)软件产品质量差,可靠性得不到保证。软件质量保证技术(审查、复审和测试)还没有坚持不懈地应用到软件开发的全过程中,提交给用户的软件质量差,在运行中暴露大量问题。

(4)软件产品可维护性差,软件开发人员在开发过程中按各自的风格工作,各行其是,没有统一、公认的规范和完整规范的文档,发现问题后进行杂乱无章的修改。程序结构不好,运行时发现错误也很难修改,导致维护性差。

(5)软件成本在计算机系统总成本中所占的比例逐年上升。软件的发展跟不上硬件的发展。由于微电子技术的进步和生产自动化程度的不断提高,硬件成本逐年下降,然而软件开发需要大量人力,软件成本也随着通货膨胀以及软件规模和数量的不断扩大而持续上升。

(6)软件开发生产率提高的速度远远跟不上计算机应用速度普及深入的趋势。软件的发展跟不上用户的要求。软件产品“供不应求”的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。

软件危机产生的原因

造成上述软件危机的原因与软件自身特点有关,也与软件开发人员在开发和维护时所采用的生产方式、方法、技术有关,可概括为以下几个方面。

(1)软件是计算机系统中的逻辑部件。软件产品往往规模庞大,结构复杂,这给软件的开发和维护带来客观的困难。

(2)软件开发的管理困难。软件规模大、结构复杂,又具有无形性,这导致管理困难,进度控制困难,质量控制困难,可靠性无法保证。

(3)软件开发费用不断增加,维护费用急剧上升,直接威胁计算机应用的扩大。

(4)软件开发技术落后。在20世纪60年代,人们注重如编译原理、操作系统原理、数据库原理等一些计算机理论问题的研究,而不注重软件开发技术的研究,用户要求的软件复杂性与软件技术解决复杂性的能力不相适应。

(5)生产方式落后。有人统计,硬件的性能价格比在过去30年中增长了10^6。一种新器件的出现,其性能较旧器件提高,价格反而有所下降,而软件则相形见绌。软件规模与复杂性增长了几个数量级,但生产方式仍然采用个体手工方式开发,根据个人习惯爱好工作,无章可循,无规范可依靠,带有很强的“个性化”特征的程序,因缺乏文档而根本不能维护,加剧了供需之间的矛盾。

(6)开发工具落后,生产效率提高缓慢。软件开发工具趋于原始,没有出现高效率的开发工具,因而软件生产效率低下。还有软件开发人员忽视需求分析的重要性,轻视软件维护也是造成软件危机的原因。

解决软件危机途径

目前,计算机的应用日益广泛,世界上发达国家的许多企业将全部投资的10%以上用于计算机领域。但到目前为止,计算机的体系结构在硬件上仍然是冯·诺依曼计算机。实际中复杂、庞大的问题,只能由专门人员编制软件来解决。假设计算机能实现智能化,能进行推理和运算,正确解决用户所提出的问题,那么软件危机就会有根本性的缓解。然而新一代计算机体系结构的研制可能还需要一段时间。那么在目前计算机硬件条件下,要想解决软件危机必须解决以下问题。

(1)首先应该对计算机软件有一个正确的认识,彻底清除“软件就是程序”的错误观念。

(2)要使用好的开发技术和方法,并且要不断研究探索更好更有效的技术和方法。尽快消除在计算机系统早期发展阶段形成的一些错误观念和做法。

(3)要有良好的组织、严密的管理,各类人员要相互配合,共同完成任务。充分认识软件开发不是某种个体劳动的神秘技巧。

(4)应该开发和使用好的软件工具。正如机械工具可以“放大”人类的体力一样,软件工具也可以“放大”人类的智力,从而可以有效提高软件生产率。

软件系统开发与制造一台机器或建造一栋大厦有许多相同之处,所以要采用“工程化”的思想做指导来解决软件研究中面临的困难和混乱,从而走出软件危机的困境。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注