1.2.1 软件危机产生的原因
20世纪60年代中期以前,计算机刚刚投入使用,通用硬件相当普遍,软件却是为每个具体应用而专门设计和编写的。这时的软件通常是规模比较小的程序,除了程序清单以外,没有其他文档资料保存下来。软件设计往往等同于编写程序,密切依赖于计算机的机器代码或汇编语言,很少使用系统化的开发方法,基本上是个人设计、个人使用、个人操作、自给自足的私人化的软件生产方式。
20世纪60年代中期到70年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件需求急剧增长。高级语言开始出现,操作系统的发展引起了计算机应用方式的变化,大量数据处理导致第一代数据库管理系统的诞生。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率,软件危机开始爆发。
1968年,在北大西洋公约组织的NATO(North Atlantic Treaty Organization)国际会议上,著名计算机科学家Fritz Bauer首次提出了“软件危机”(Software Crisis)这个名词。软件危机的出现和日益严重的趋势充分暴露了软件产业在早期的发展过程中存在的各种各样的问题。可以说,人们对软件产品认识的不足及对软件开发的内在规律理解的偏差是软件危机出现的本质原因。具体来说,软件危机出现的原因可以概括如下。
(1)忽视软件开发前期的需求分析。
(2)开发过程缺乏统一的、规范化的方法论指导。
软件开发是一项复杂的工程,人们需要用科学的、工程化的思想来组织和指导软件开发的各个阶段;而这种工程学的视角正是很多软件开发人员所没有的,他们往往简单地认为软件开发就是程序设计。
(3)文档资料不齐全或不准确。
软件文档的重要性没有得到软件开发人员和用户的足够重视。软件文档不仅是软件开发团队成员之间交流和沟通的重要平台,还是软件开发项目管理的重要工具。如果人们不能充分重视软件文档的价值,势必会给软件开发带来很多不便。(https://www.daowen.com)
(4)忽视与用户之间、开发组成员之间的交流。
(5)忽视测试的重要性。
(6)不重视维护或由于上述原因造成维护工作的困难。
由于软件的抽象性和复杂性,使得软件在运行之前对开发过程的进展情况很难估计,再加上软件错误的隐蔽性和改正的复杂性,这些都使得软件开发和维护在客观上比较困难。
(7)从事软件开发的专业人员对这个产业的认识不充分,缺乏经验。
软件产业相对于其他工业产业而言,是一个比较年轻、发展不成熟的产业,人们在对它的认识上缺乏深刻性。
(8)没有完善的质量保证体系。
完善的质量保证体系的建立需要有严格的评审制度,同时还需要有科学的软件测试技术及质量维护技术。若软件的质量得不到保证,会使得开发出来的软件产品往往不能满足人们的需求,同时人们还可能需要花费大量的时间、资金和精力去修复软件的缺陷,从而导致出现软件质量的下降和开发预算超支等后果。