软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题主要源于落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。软件危机的表现包括:
对软件开发成本和进度的估计不准确:
这种现象降低了软件开发组织的信誉,而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量,从而引起用户的不满。
用户对“已完成的”软件系统不满意:
软件开发人员和用户之间的信息交流不充分,导致最终的产品不符合用户的实际需要。
软件质量保证技术没有坚持不懈地应用到软件开发全过程中:
这包括审查、复审和测试等环节的缺失,导致软件质量问题难以发现和纠正。
软件常常是不可维护的:
由于开发过程没有统一的、公认的规范,软件开发人员按各自的风格工作,导致程序中的错误难以改正,软件的复用性不高。
软件开发费用和进度失控:
费用超支、进度拖延的情况屡屡发生,有时为了赶进度或压成本不得不采取一些权宜之计,严重损害了软件产品的质量。
软件危机的爆发可以追溯到20世纪60年代,当时计算机刚刚投入实际使用,软件设计往往是为了一个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言,软件的规模比较小,文档资料通常也不存在,很少使用系统化的开发方法。随着计算机应用范围的迅速扩大和软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出,原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率。
为了解决软件危机,软件从业人员、专家和学者做出了大量的努力,诞生了一门新兴学科——软件工程学。软件工程学把软件作为工程对象,从技术措施和组织管理两个方面来研究、解决软件危机。