软件开发不仅仅是把程序写好就够了,还要做前期的需求和体系结构设计(架构设计),而且,前期的设计比程序编码更重要。关于这一点,初入行业的软件工程师时常会感到困惑,因为他们往往初出茅庐,没有大型项目经验。在他们的心中,只有程序,没有体系结构。
为了解决软件新人的这些困惑,本节从软件危机谈起,介绍软件构件、软件重用的基本概念,阐述软件体系结构的意义、发展和应用现状。
1.1从软件危机谈起
软件危机( software crisis )是指在计算机软件的开发( development )和维护
( maintenance )过程中所遇到的一系列严重问题。20世纪60年代末至70年代初,“软件危机”一词在计算机界广为流传。事实上,几乎从计算机诞生的那一天起,就出现了软件危机,只不过到了1968年在原西德加密施(Garmish )召开的国际软件工程会议上才被人们普遍认识到。
时至今日,“软件危机”虽然在软件行业已经家喻户晓,但很多工程师还是不能很好地理解软件危机究竟为何物,在实际的软件项目中,软件危机的“表现”在哪里,本节就这些内容做一个简单的介绍。
1、软件成本日益增长
在计算机发展的早期,大型计算机系统主要是被设计( design )应用于非常狭窄的军事领域。在这个时期,研制计算机的费用主要由国家财政提供,研制者很少考虑到研制代价问题。随着计算机市场化和民用化的发展,代价和成本就成为投资者考虑的最重要的问题之一。
20世纪50年代,软件成本( cost )在整个计算机系统成本中所占的比例为10%-20%。但随着软件产业的发展,软件成本日益增长。相反,计算机硬件随着技术的进步、生产规模的扩大,价格却在不断下降。这样一来,软件成本在计算机系统中所占的比例越来越大。
到20世纪60年代中期,软件成本在计算机系统中所占的比例已经增长到50%左右。而且,该数字还在不断地递增,下面是一组来自美国空军计算机系统的数据∶1955年,软件费用约占总费用的18%,1970年达到60%,1975年达到72%,1980年达到80%,1985年达到85%左右。而如今,购买一台普通的电脑只要2-3千元人民币,但如果把常用的操作系统、办公软件、安全软件等装好,却要远远超过购买电脑的费用。
由于软件是逻辑、智力产品,软件的开发需建立庞大的逻辑体系,这是与其他产品的生产不一样的。例如∶工厂里要生产某种机器,在时间紧的情况下可以要工人加班或者实行“三班倒”,而这些方法都不能用在软件开发上。
在软件开发过程中,用户需求( requirement)变化等各种意想不到的情况层出不穷,令软件开发过程很难保证按预定的计划实现,给项目计划和论证工作带来了很大的困难。
Brooks在其名著《人月神话》中指出:“在已拖延的软件项目上,增加人力只会使其更难按期完成”。事实上,软件系统的结构很复杂,各部分附加联系极大,盲目增加软件开发人员并不能成比例地提高软件开发能力。相反,随着人员数量的增加,人员的组织、协调、通信、培训和管理等方面的问题将更为严重。
许多重要的大型软件开发项目,如IBM OS/360和世界范围的军事命令控制系统
( wWMCCS ),在耗费了大量的人力和财力之后,由于离预定目标相差甚远不得不宣布失败。
3、软件质量差
软件项目即使能按预定日期完成,结果却不尽人意。1965年至1970年,美国范登堡基地发射火箭多次失败,绝大部分故障是由应用程序错误造成的。程序的一些微小错误可以造成灾难性的后果,例如,有一次,在美国肯尼迪发射一枚阿脱拉斯火箭,火箭飞离地面几十英里高空开始翻转,地面控制中心被迫下令炸毁。后经检查发现是飞行计划程序里漏掉了一个连字符。就是这样一个小小的疏漏造成了这支价值1850万美元的火箭试验失败。
评论0