危机的特点

软件危机特点之一,就是软件系统的复杂性与可靠性的制约向相反方向发展的结果,或者说系统具有反向制约性,使系统的复杂性与可靠性相背离, 出现系统的复杂性提高反而可靠性降低的现象。这种现象,我们称之为导致软件危机的第一种反向制约性。这种现象所反映的本质,便是系统的结构不良。如果系统的结构良好,特别是优化的结构,则可以使系统的复杂性与可靠性的制约向正方向发展,即系统具有正向制约性,使系统的复杂性与可靠性相协调,系统的可靠性便随复杂性的提高而提高。人脑就具有优化结构而又天然改善的高可靠系统。采用结构程序设计,改良程序的结构,也可以改善程序的可靠性。一个大型软件系统,固然每一程序的正确性是必要的,但更重要的是各程序之间联系的正确性,才能保证系统整体的可靠性。因此, 需要把大型的程序系统当作一项工程来设计和研制,以对付日益增长的软件危机。

摆脱软件危机的根本出路究竟在哪里?人们一直在思考,在探索⋯⋯

危机意味着革命,哪里有危机,哪里就蕴含着希望。“物理学危机”带来的是物理学革命,软件危机带来的是计算机革命,这不仅是软件革命,而是包括硬件革命在内的“全面”革命。计算机革命的实质,就是把人脑生产世界未来知识的负担转嫁给机器制造物。这场革命就是要冲破知识处理的双重局限性。

为什么软件危机又会引起硬件革命呢?这是因为计算机系统是包括硬件和软件两大系统组成的有机整体,硬件和软件既相互依存又彼此制约。硬件与软件相比,硬件是相对稳定的,而软件是最为活跃的。在数值应用方面, 软件与硬件系统结构比较协调。但当软件的应用扩大到非数值方面,它与硬件系统结构就不协调,以致患有“硬件不适症”。本来软件功能与硬件功能是可以相互转化的,只因硬件结构的不变性与软件功能的可塑性之间的矛盾得不到解决,致使软件功能不能转化为硬件功能。在这种情况下,要增强计算机的能力,只能使软件负担过重,导致软件危机加深。除非硬件革命,使硬件具有可变性,提高它的应变能力,才能克服上述矛盾。

软件危机特点之二,就是随着软件功能的扩大,硬件反而越来越不适应。这种现象,我们称之为导致软件危机的第二种制约性。这种危机,随着计算机的非数值应用的不断扩大而日益增长。两者之间的关系如图 1 所示。

因此,要摆脱软件危机,还必须改变硬件系统的结构,非数值应用危机的关系使之与软件的广泛应用相适应。换言之,软件危机推动硬件在系统结构方面的变革,使之突破诺依曼计算机模型的框架,向非诺依曼型计算机迈进。

同样,硬件革命也推动软件革命,需要研制新型的软件,以适应新型的硬件系统结构。随着新型软件应用范围的进一步扩大,还会有硬件系统结构不适应的情况,很可能导致第二次软件危机。除非我们能使机器自编程序和自行纠错,这需要人工智能技术,或者不用程序机器也能出色地工作,这需要研制仿脑型机器,才能从根本上消除软件危机。