计算的发展趋势:软件的慢性危机
W. Wayt Gibbs
尽管有50年的进步,软件业要达到满足信息时代社会需要的成熟工程学科的水平仍需数年乃至数十年的努力。
丹佛新国际机场本应是落基山脉的骄傲、现代工程的一个奇迹。该机场很大,其规模为曼哈顿的两倍,宽为希思罗机场的10倍,足以在恶劣天气同时降落3架喷气式飞机。还有比其规模更令人印象深刻的,这就是机场的地下行李传送系统。4000台独立的“遥控车”像智能煤矿车一样沿着21英里长的钢轨飞跑,按不同的线路在20家不同航空公司的柜台、登机门和行李领取处之间发送和传递行李。由互相联网并与5000个电子眼、400台无线电接收机、56台条码扫描机联网的大约100台计算机组成的中央神经系统,有条理地管理着每一个旅行袋和滑雪包使其安全准时地到达。
至少计划是这样的。8个月以来,这个格列佛一直为“小人国的人”——控制其自动化行李系统的软件中的差错——所困扰。原计划机场在去年万圣节前夕启用,但推迟到12月份,以使BAE自动化系统有时间排除其1.93亿美元系统中原因不明的故障。12月份又延到3月份,3月份不知不觉地来到了5月份。6月份,机场的计划者承认,他们无法预测行李系统何时能够达到可使机场开放的稳定程度。他们的债券几乎变成垃圾,预算出现赤字,每天的利息和运转费高达110万美元。
对经验丰富的软件开发者来说,丹佛机场的大灾难只不过因其明显而出名。研究表明,每6个新的大型软件系统投入运行,就有两个其他系统被取消。软件开发项目其开发时间平均超出计划时间的50%,—般来说,软件项目越大,其情况越糟。所有大型系统中约四分之三有运行问题,要么不像预计的那样起作用,要么根本不能使用。
编程技巧历经50年的不断精心改进,才达到今天这个地步。在进入第25个年头的时候,编制大型软件的困难非常之大,因此北大西洋公约组织科技委员会于1968年秋季召集了约50名第一流的编程人员、计算机科学家和工业界巨头,制定摆脱软件危机的举措。尽管专家们无法设计出一张指导软件业走向更牢固阵地的路线图,但他们的确为那一遥远的目标创造了一个名称:软件工程。软件工程现正式定义为“运用系统的、规范的和可定量的方法来开发、运行和维护软件”。
经历了四分之一世纪以后,软件工程仍是一个渴望的术语。许许多多的计算机代码仍然是由“软忤工匠”根据粗劣的编程语言用他们既不能度量也不能始终如一地重复的技术手工中编制的。George Mason大学教授Brad J. Cox说:“这就像Eli Whitney以前的滑膛枪制造。工业革命前,商品制造是非专业化的。在极大程度上凭工人技艺,几乎没有互换性。如果我们要战胜这场软件危机,我们就得废止这种勉强糊口的、每位编程人员从地基开始建造一切的工业革命前的方法。”
境况并非完全凄凉。随着编程人员开始对其编制的软件质量进行定量测试以改进其编程方法,直觉慢慢地让位于分析。当研究人员研究用比较容易避免严重错误的代数形式表达程序设计的方法吋,编程的数学基础也在加强。高等院校的计算机科学家正开始着手解决他们未能造就一支强大的软件专业大军这一问题。也许最重要的是,该行业中的许多人正把注意力转向发明支持可互换和可再用的软件部件所需要的工艺和市场结构。
“不幸的是,软件业对此未能一致地做出努力,而这是众所周知的最好的做法。”卡内基•梅隆大学软件工程研究所所长Larry E. Druffel伤心地说。事实上,一项研究发明一般需18年时间才能成为标准编程技术。通过共同努力,学术界、工业部门和政府也许能在年内将软件开发提高到一门工业时代工程学科的水平。如果努力不够,社会向信息时代的飞速发展就会停止,起码这种发展是无法预测的。
流沙
今年四月,来自学术界、工业部门和研究所的22位软件开发负责人断定:“在未来几年里,计算机应用将会发生巨大变化,从而使最初的个人计算机革命黯然失色。”这些专家们聚会于Hedsor公园(一公司在伦敦附近的休养所),纪念北大西洋公约组织于1968年召开的软件危机讨论会并分析软件的未来方向。曼彻斯特大学教授Cliff Jones回顾道:“1968年,我们知道我们想建造什么,但无能力建造。今天我们则是站在流沙之上。”
随着硬件工程师们经过艰苦努力造出速度更快、价格更便宜、体积更小的计算机,传统编程方法的基础正在迅速削弱。编程人员的许多基本假设(例如他们编制的任何程序皆有缺陷这一观点)必须相应地改变。卡内基•梅隆大学教授Mary M. Shaw说:“当计算机使用光开关后,软件必须一次成功,因为你不会再有机会修改它。”
设在艾恩德霍芬的飞利浦研究所的软件工艺主任Remi H. Bourgonjon指出:“大多数消费品中使用的代码数量每两年就翻一番。”他报道说,电视机可含有达500000字节的软件;电动剃须刀可含有达2000字节的软件。通用汽车公司的新型轿车中的动力系统是由30000行计算机代码控制的。
即使注重试验的人,要使软件—次成功也很困难。因此,国防部采用严格而昂贵的检验标准以确保赖以完成任务的软件是可靠的。这些标准曾用来保证Clementine正常工作(Clementine是国际部和国家航空航天局今春发射到月球轨道上的一颗卫星)。Clementine的一个主要任务是检验瞄准软件,该软件有朝一日可能会被用于部署在空间的导弹防御系统。但当指令该卫星自旋并将月球固定在其视野时,其软件中的错误却使该空间飞行器在长达11分钟的时间里连续使其机动推进器点火。由于燃料耗尽和剧烈旋转,该卫星无法与小行星地理星交会。
实时系统(如Clementine)中的差错很难发现,因为就像汽车发动机中的那种异常声音一样,它们往往只在这种关键情况下发生。法国INRIA研究所科技主任Gilles Kahn在Hedsor公园会议上警告说:“目前用于编制安全是关键问题的软件(如核反应堆或汽车中用的软件)的方法是否会演变并按比例适当扩充来满足我们的未来期望尚不清楚。相反,关于实时系统,我认为我们正处于一个断裂点上。”
在对分布式系统(在许多连网计算机上协同运行的程序)的不可抗拒地日益增长的需求所施加的构造压力下,软件的发展也正在出现扭曲。企业正把大量资金投入他们希望作为战略武器使用的分布式信息系统。软件发展的反复无常的特点会把这些项目变成俄罗斯轮盘赌。
许多公司为一些似乎非常简单的目标所吸引。一些公司试图使过时的主机软件以分布式形式获得新生;另外一些公司则想把现有系统互相接通,或把现有系统与能与它们共享数据和更好的用户满意接口的新系统接通。用专业术语来说,以这种方式联结软件常称为系统集成。但是,纽卡斯尔大学的计算机科学家Brian Randell提出:“有一个比集成更好的词,该词来自古老的R.A.F俚语,即‘削足适履’,意思是强行使之适合。”
软件是一个有风险的行业。因为尽管软件看起来像是有延展性的东西,但实际上大多数程序是只有那种正确的数据才能通过的复杂而靠不住的逻辑丛。像手工制作的滑膛枪一样,若干个程序可能具备类似的功能,但在设计上仍可能各有独到之处。这使软件难于修改和更正。这也意味着强行将系统拼凑在一起的企图,往往效果极差。
例如,1987年加利福尼亚州机动车辆管理处决定,通过把该州的驾驶员与车辆注册系统合并——一项表面看来很简单的任务——使其客户的生话更方便。它原希望去年启用方便客户的一站地重新登记亭,但却发现,实施该项目的费用增大为原预计的6.5倍,交付日期也要推后至1998年。12月份,该机构终止了这项为期7年、投资4430万美元的工程。
有时,成功就是最大的失败。本世纪70年代,美国航空公司建立了一个价值20亿美元的航班预订系统SABRE,它已成为旅游业基础设施的一部分,软件工程研究所的Bill Curtis回忆道:“SABRE曾是战略信息系统的光辉典范,因为它把美国航空公司推到世界最大航空公司的地位。”
美国航空公司在90年代同样热衷于炫耀软件,它曾试图将其航班预订技术与Marriot、Hiton、Budget的汽车和旅馆预订系统强行捏合到一起。1992年该项目垮台,引起一大堆讼争。Curtis说:“这是一次惨重的失败,美国航空公司在那个系统上损失了1.65亿美元。”
倒霉的不仅是这一家航空公司。6月份,IBM的顾问小组透露了对24家研制大型分布式系统的主要公司的调查结果。数字是令人不安的:55%的项目其费用高于预计的费用;68%的项目超过计划期限;88%的项目必须在很大程度上重新设计。
该调查并未报告统计资料中的一个关键项目:已完成的程序的运转可靠程度。系统的失败往往是因为未能预料到意外情况。网络使该问题更加严重。Randell解释说:“分布式系统可能包含有大量的相互连接的单个故障点,其中许多是你事先未辨别出来的。这些系统的复杂性和脆弱性是一个重大挑战。”
复杂性问题不仅是个大问题,而且越来越严重。计算机的性能-价格比大约每18个月翻一番。Curtis说,其结果之一就是“系统规模每10年增加一个数量级,对某些行业来说,每5年增加一个数量级。”为了与需求同步,编程人员必须改变其工作方式。Curtis讥讽道:“不能靠木匠来建造摩天大楼。”
请求救援,请求救援
当一个系统复杂到单个管理人员无法对其全面掌握时,一些传统的开发过程也就破除了。联邦航空管理局(FAA)在其取代全国日益过时的空中交通控制系统的10年努力中始终面临这个问题。
新系统称之为“先进自动化系统”(AAS),它综合了本世纪90年代的各种计算挑战。一个其规模在百万行以上的程序被分布在数百台计算机上和嵌入新的复杂硬件中。所有这一切就是为了对不可预测的实时事件做出连续响应,因为即使一个小的误操作也可能威胁公共安全。
为实现其技术梦想,联邦航空管理局选择了IBM的联合系统公司(它自那时起就被Loral公司买下),这是一家颇受人尊重的、领导软件开发潮流的公司。联邦航空管理局的管理人员希望(但并不要求)IBM用最先进的技术来估算项目的成本和所需开发时间。他们认为IBM会认真检查对系统的要求和为系统拟定的设计,以便及早发现差错,这样就能使这些差错在几小时而不是几天内得到解决。联邦航空管理局保守地估计为每一行计算机代码支付500美元,此数字5倍于该行业的管理良好的开发过程的平均水平。
根据海军分析中心5月份透露的一份关于先进自动化系统项目的报告,IBM的“成本估算和开发过程跟踪使用了不恰当数据,前后不一致并被项目经理们忽视。”结果,联邦航空管理局为先进自动化系统软件的每一行代码支付700-900美元。联邦航空管理局的一份内部报告悲叹道:价格昂贵的一个原因是“每一行开发出的代码平均要重写一次。”
猛增的价格和表明这个完成一半的系统并不可靠的试验,使联邦航空管理局局长David R. Hinson感到吃惊,因此他于6月份做出决定:取消先进自动化系统4个主要部份中的两个、并缩小第三个的规模。这些失败程序所耗费的1.44亿美元,与在第四个部分即中央部分(空中交通管理人员使用的新工作站软件)上投资的14亿美元相比,只是一个小数目。
这个项目也在加速失败。在超出预算10亿多美元和运行推迟了约5年之后,这个有大量错误的程序正在由卡内基•梅隆大学和麻省理工学院的软件专家认真研究,以决定是挽救它,还是必须马上取消它。他们将在9月份提出报告。
大错将成为软件开发的一个日益常见和具有破坏作用的组成部分,除非程序设计具有更多的牢固扎根于科学和数学的工程学科的特征。幸运的是,这种趋势已开始出现。在过去的10年里,软件行业的领导者已在了解如何一致而定量地衡量其开发过程的混乱、产品中的差错密度以及编程人员生产率的停滞方面取得明显进步。研究人员已经在采取下一步骤,即找出切实可行的可重复的解决这些问题的措施。
过程的进行
例如,1991年软件工程研究所(一个由军方资助的软件思想库),公布了其“能力成熟模型”(CMM)。“CMM能显示软件工程和管理的优良程度,”David Zubrow微笑着说。他负责该所关于经济方法的一个项目。CMM最后终于促使许多编程人员把注意力集中到软件生产过程的度量上,这是任何工业工程学科的一个先决条件。
以面谈、调查表和CMM为基础,评估人员就能评定一个编程小组开发满足用户所需软件的能力的等级。CMM使用5个等级,从管理混乱的1级到管理优良的5级。迄今已为261个机构评定了等级。
Curtis报道说:“大多数——约75%——的机构仍处于1级水平。他们无正规过程,无工作度量标准,无法知道前进方向的对错。”(海军分析中心曾报道,IBM联合系统公司的先进自动化系统项目“似乎处于1-等级”)余下的24%的机构处于2或3级水平。
只有两个杰出的小组获得CMM的最高等级即5级。他们是设在班加罗尔的摩托罗拉公司的印度编程小组和Loral公司的(以前属IBM公司)机载航天飞机软件项目小组。Loral公司的小组对错误控制得很成功,他们能可靠地预测该软件每一新版本中的错误数目。按软件生产力研究公司总裁Capers Jones的说法,考虑到90%的美国编程人员连发现错误都心中无数,这算是了不起的成就。他说,在那些对错误进行统计的编程人员中,能够找出所存在故障的三分之一者很少。
Loral公司航天飞机软件项目负责人Tom Peterson把成功归因于“一种文化,即不仅努力消除错误,而且努力克服让错误溜掉的测试过程中的缺陷。”尽管如此,某些错误仍不可避免地逃过检查。1981年,航天飞机的首次发射就是因为一个误操作使5台机载计算机不能良好同步而宣告失败并被推迟了两天。1992年,另一毛病(即航天飞机交全程序中的毛病)破坏了拯救lntelsat-6卫星的任务。
尽管CMM并非灵丹妙药,然而软件工程研究所对它的宣传使许多主要软件公司相信,从长远来看,定量的质量管理能够收到成效。例如,Raytheon公司设备处1988年在未能通过CMM测试后,起草了一份“软件工程启动计划”。该处开始每年投入1百万美元改进其严格的测试和检验方针,并对其400名编程人员迸行训练以使他们遵循这些方针。
三年之内,该处跃升了两级。到今年6月份,大多数项目(包括复杂的雷达和空中交通控制系统)的进度均提前,开支也在预算之内,生产率翻了一番多。对所避免的返工费用进行的分析揭示,节约的费用是花在“软件工程启动计划”上的7.8倍。这样一些成功的事例给美国空军的印象非常深刻,因此美国空军已命令其所有的软件开发部门到1998年必须合部达到CMM3级水平据报道,NASA也在考虑实施类似的政策。
数学再创造
即便安排得最好的设计也会出错。只要人类编制程序,就会有错误产生。然而,如错误能被及早消除,它们很少会对项目的完成期限和预算构成威胁。破坏性错误几乎都是在初始设计中未被发现而溜进最终产品中的那些错误。
批量软件生产厂家,因为无须取悦任一顾客,可以采取一种过时的蛮干法来消除错误:他们把有差错的产品作为版本交付出去,让广大用户去查出误操作。据微软件公司总设计师Charles Simonyi说,Windows操作系统的新版本将由20000名志愿者来进行测试。这样做非常有效,然而费用很高,效率很低,而且通常是不实际的。因为大批量生产的,PC机软件的销售额不到美国928亿美元软件市场的10%。
因此,研究人员正在制定若干战略以便及早消灭错误或完全避免造成错误。一种观点是要认识到一个系统原定要解决的问题,在系统建立过程中总会发生变化。丹佛国际机场的计划人员在建设开始很久以后,又要求BAE公司对机场行李系统的设计作耗资24万美元的改动。IBM也同样为联邦航空管理局管理人员的优柔寡断所折磨。两家公司都天真地以为,只要设计获得批准,他们就可以安心地施工。
某些软件开发者终于开始抛弃那种错觉,并把软件重新看成是某种有待成长而不是有待建立的东西。作为第一步,编程人员正越来越多地用标准国际接口元件组合出高速原型。就像建筑师的按比例缩小的模型一样,系统模型能在确立逻辑基础之前帮助消除用户和开发者间的误会。
系统模型只模仿系统的表面行为。因此它们对识别系统设计中的逻辑矛盾帮助甚少。三菱电气公司研究实验室主任Lasglo A. Belady指出:“大型软件中的绝大多数错误都是人为疏忽错误。”一旦设计编成了代码,模型一点都不会使差错检测更容易。
Praxis公司(一家英国软件公司)董事长Martin Thomas说,当要求绝对正确时,工程师就靠数学分析来预测其设计在现实世界中的行为。不幸的是,描述物理系统的数学在假想的计算机程序的二进制宇宙内并不适用。这里离散数学(它远未成熟)起决定作用。但利用还很有限的集合论和谓词演算工具,计算机科学家已设法找到一些把规范和程序翻译成数学语言的方法,这样它们就可用称之为形式方法的理论工具来分析。
Praxis公司最近把形式方法用到了英国民航局的空中交通控制项目上,尽管Praxis公司的程序比联邦航空管理局的程序小得多,但二者均存在一个类似的设计问题,即必须使冗余系统保持同步,以便一个系统发生故障时,另一个系统能立即接替其工作。Praxis公司的首席顾问Anthony Hall回忆道:“难点是确保信息按恰当的次序在两个网络间传递。”他补充说:“因此,我们试图对我们的设计进行证明,但这些证明都失败了,因为该设计是错误的。在设计早期发现错误的好处是巨大的。”该系统已按时完成并于1993年10月投入运行。
Praxis公司只对其软件的最关键部件使用了形式符号,但其他一些软件公司却在系统开发的全过程中利用了数学的严密性。由于要耗资3.5亿美元来改进用以控制法国全国铁路系统中6000辆电气列车的开关与调速软件,巴黎GEC Alsthom公司正在使用称之为“B”的形式方法。通过增加列车速度和缩短列车间的距离,该系统可为铁路公司节约数十亿美元,不然的话,就要花这笔钱来修新铁路线。
显然安全是一件令人关心的事情。因此,GEC公司的开发者用形式符号写了整个设计程序和最终程序,然后再用数学证明它们的一致。GEC公司形式开发部经理Feenando Mejia说:“然而,由于两个原因仍需进行功能试验。”首先,编程人员在证明过程中的确偶尔要犯一些错误;第二,形式方法只能确保软件满足技术规范,而无法确保软件处理现实世界中的种种意外事件。
形式方法还有其他问题。纽约州伊萨卡Odyssey研究公司战略计划主任Ted Ralston指出一页一页地阅读代数公式比检査计算机代码显得更愚蠢。为减少形式方法给编程人员带来的麻烦,若干公司正努力使形式方法自动化,Ralston的公司就是其中之一。GEC公司正与法国的Digilog公司协作,以使B方法的编程工具商品化。7家公司和机构正在对β版本进行测试,包括航空航天公司以及法国原子能管理局和其保卫部门。
在大西洋彼岸,形式方法本身仍未走红。国家标准与技术研究所的David A. Fisher说:“我怀疑美国人是否已受到足够的训练来广泛地应用形式方法。”然而也有例外,最明显的是正在实验用“洁净室”方法编程的那些公司。
半净室过程试图把形式符号、正确性证明和统计性的质量管理与进化式软件开发方法结合起来。洁净室一词来自微型芯片制造技术,这种软件开发方法试用使用严格的工程技术来始终如一地制造第一次就能完善运行的产品。编程人员在扩展系统时,一次为系统增添一次功能,并在把每一个单元纳入结构之前证明其质量。
扩展软件需要全新的测试方法。传统的方法是,开发者通过让程序以将来的使用方式运行来测试它。但这种方法往往与现实条件的相似性很少。在洁净室过程中,编程人员试图为用户可能采取的每一正确或不正确的执行路径分配一个概率,然后从这些统计数据中找出各种检査实例,这样就能更彻底地测试那些最常见的执行路径。接着让程序在每一检査实例下运行并记录程序发生故障前的时间。最后把记录的时间以真正的工程方式反馈到计算程序可靠程度的模型。
洁净室过程的早期采用者报道了一些可喜的结果。欧洲电信巨人Enesson Telecom公司把洁净室过程用于一个有70名编程人员参与的项目,来为其电话交换计算机编制操作系统。据报道,其错误减少到每千行程序码只有1个,而该行业的平均水平约为25个。也许更重要的是,该公司发现,开发生产率提高了70%,而测试生产率翻了一番。
没有银弹
另外,软件业以前也多次听说过能够杀死狼人的“银弹”。自本世纪60年代以来,开发者兜售了数十项旨在大力提高生产力的技术发明,许多开发者甚至提出示范项目以证明其大话的真实性。鼓吹面向目标分析和编程方法的人员称其方法是一种设计风范的转变,这种转就能使“生产率提高13倍”,同时产品质量更好、也更易维修,而实现所有这一切的成本却均有下降。
这是值得怀疑的。Curtis回忆道:“在70年代,结构程序设计也曾被吹捧为设计风范的转变。”计算机辅助软件工程(CASE)、第三代、第四代、第五代语言也都曾被吹棒为设计风范的转变。我们听到过许多技术上的承诺,但这些承诺中有很多并未兑现。
在此期间,在生产率方面,软件开发落后于一些更成熟的学科,最明显的是落后于硬件工程。Cox说:“我认为软件是一种货物崇拜。我们的主要成就就是从硬件工程(即更快的机器和更大的存储量)这种外来文化输入的。”Fisher看来同意Cox的意见,他指出,考虑到通货膨胀,“软件业每人创造的价值20年来一直是4万美元,根本没有任何增加。”
“我不这样认为”,普波大学教授、软件工程研究集团负责人Richard A. Demillo答道。“提高是有的,只是每个人对生产率的定义不同。”Capers最近发表的一份研究报告(基于一些肯定值得怀疑的历史资料)称,美国编程人员现今完成的代码是1970年的两倍。
事实是,无人知道软件开发者的生产率到底有多高,原因有三。
首先,能始终如一地度量编程人员生产率的美国公司不到10%。
其次,软件业仍未制定一个有用的标准度量单位。大多数报道,包括权威的计算机科学杂志上发表的那些报道,是以每个每月完成的代码行数表示生产率的。但是,程序是用各种各样的语言写成的,其操作的复杂程度差别也极大。因此,把一位日本编程员用C语言写出的代码行数与一位美国人用Ada语言写出的代码行数进行比较,就像未把日元换算成美元而将他们的工资进行比较一样。
第三,Fisher说:“在一个典型的公司里,你可以看到,两个人同坐一间办公室,拿同样多的工资,基本上具有相同学历,但他们每天写出的指令数目却相差百倍。”这种个体方面的巨大差异往往掩盖了技术和工艺过程改进的小得多的效果。
在对某些貌似革新而结果却证明是不能复现或无法度量的发明长达25年的失望之后,许多研究人员承认,计算机科学需要一实验分支来将普遍结果与偶然结果分开。“始终存在这样一种想法,如果我交给你一种方法,则这种方法之所以正确,只是因为我告诉你它是正确的”,马里兰大学教授Victor R. Basili抱怨道。他说:“人们正在研制各种各样的东西,但其中某些东西之低劣是令人震惊的。”
卡内基▪梅隆大学的Mary Shaw指出,一些成熟的工程领域把经过证明的解决方法编成手册,因此即使新手也能按统一标准处理例行设计,从而使更有才干的实践者放开手脚从事先进项目。然而却没有这样一种软件手册。因此错误年复一年地在一个又一个项目中出现。
DeMillo建议政府应更积极地参与。“国家科学基金会应当资助旨在证实其他人宣称的实验结果的研究。”他说:“通常,如果不是开创性的研究,国家科学基金会的计划官员往往就会对该研究工作打折扣。”DeMillo淸楚自己在说什么。从1989年至1991年,他是国家科学基金会计算机与计算研究处负责人。
然而,“如果软件工程要成为—门实验科学,那么它就需要实验室科学,实验室究竟在哪里呢?”Basili问道。因为试图把有前途的技术扩大到工业规模往往是失败的,所以小规模实验室的作用是有限的。DeMillo说:“我们要需有能搜集数据和进行实验的地方。而要做到这一点的唯一办法,就是找一个真正的软件开的机构合作。”
这种合作关系为数不多。最成功的也许是软件工程实验室,它由NASA的戈达德空间飞行中心、计算机科学公司和马里兰大学合搞,是Basili于1976年帮助建立的。Basili说,自那时起,研究生和NASA编程人员在“远不止100个项目”中进行了合作,大多数项目与建立卫星地面支持软件有关。
只是掺水
滑膛枪制造商直到Eli Whitney找到了制造任何熟练工人都能够装配的通用零件的方法后才提高了生产率。同样,如果适当地实现标准化,软件部件也能以多种不同规模被再用。几十年来,编程人员利用子例行程序库来避免一次又一次地重复编写同一代码。但是,当把这些部件转移不同的编程语言、计算机平台或操作环境中时,它们就会出现故障。“悲剧是,随着硬件的过时,60年代写出的一种分类算法的优秀表达式必须加以重写。”微软件公司的Simonyi评论道。
Fisher看到一种不同的悲剧。“我们所付出的真正代价是,作为软件技术任一方面的专家,你不能在一件产品中获得你的专长。如果你不能获得这种专长,你基本上就不能算是一名专家。”这并不是说还没有人尝试过。在去年受聘去国家标准与技术研究所之前,Fisher创立了增量系统公司,并担任公司的主管。他指出:“在编译程序的组件技术中,我们在三个方面具有真正的世界级水平,而在其它七个方面就有些逊色。但我们没有任何实际办法销售编译程序的组件,我们必须销售整个编译程序。”
因此,他现在正在做一些与此有关的工作。1994年4月份,国家标准与技术研究所公布了一个新的“先进技术计划”,以帮助建立以组件为基础的软件市场。作为该计划的负责人,Fisher将把1.5亿美元的研究拨款分配给那些愿意攻克目前使软件组件行不通的技术障碍的软件公司。
最大的挑战是要找到一些方法,切断使程序与特定的计算机与其他程序内在地结合在一些的联系。研究人员正在对几种有前途的方法进行调研,包括一种可用于描述软件组件的公用语言,一些能改造组件使之适合任何环境的程序和—些具有用户可自行选用的多种任选功能的组件。
Fisher赞同对组件进行“快速”综合的主意。这样编程人员就可能“基本掌握如何做而不必实际去做”,从而建立一种任何计算机都能理解的方法。他解释说:“然后,当你想把两个组件装配在一起时,就可以根据这种方法,在组件的接口上増加额外部件来获得兼容的版本。整个过程特是自动化的。”
即使有1.5亿美元的刺激和迫使公司寻求更便宜的软件编制方法的市场压力,软件的工业革命也不会马上到来。“我们预计在5~7年内只会见到这些技术的一些孤立的事例,但在技术上我们可能也不会成功,”Fisher模棱两可地说。即使在技术上没有问题时,组件也不会有多少用户,除非它具有良好的成本效益。软件组件的成本将取决于所涉及的技术,但将更取决于生产和消费组件的市场。
像Fisher—样,Brad Cox也开办过一个软件组件公司,但该公司难于维持下去。他相信他已找到了问题和答案。Cox的公司试图销售类似于计算机芯片的低级程序部件。他说:“软件集成电路和硅集成电路间的差别是,硅集成电路由原子组成,因而遵守物质不灭定律,这样人们知道如何可靠地进行买卖,但这个构成一切商贸活动的核心的交换过程对于在几毫微秒内就能被复制的东西来说则行不通。”当Cox试图销售其编程人员制作好的组件时,他发现市场能够承受的价格远低于他的开发成本。
原因是两方面的。首先,每一顾客靠手工重新改制组件很费时。国家标准与技术研究所希望通过其“先进技术计划”扫除这个障碍。另一个原因如其说是技术上的不如说是文化上的:买主只想为组件支付一次费用,然后免费复制。
Cox说:“音乐行业对该问题已有约一个世纪的经验。也们过去销售钢琴带和活页乐谱这样的有形商品,之后出现了收音机和电视,把所有这一切冲击得一塌糊余。”音乐公司通过建立代理机构来适应电台和电视广播。每当一首歌在电台、电视上播放时,代理机构就收取版税,然后把钱转给艺术家和制作人。
Cox建议在用户每次使用软件组件时也采取类似的收费办法。他说:“事实上,由于计算机和通信给我们带来的基础设施上的优势,这种模式对软件比对音乐更有效。放唱机没有高速网络线路报告使用情况,但是我们的计算机有。”
至少是将会有。Cox在展望几乎所有计算机都连网的前景时,设想通过把组件制作商、最终用户和金融机构联系起来的网络来销售各种软件。他说:“这类似于信用卡的操作,但有进入个人计算机的触须。”尽管对某些人听起来可能不吉祥,COX仍认为“现在的Internet网络与其说是一个农贸市场不如说是一个垃圾堆。我们需要一个全国性的基础设施来支持一切东西的分配,从Grandma食品店的小甜饼配方,到Apple公司的窗口管理程序,再到Addison-Wesley的电子图书。”Cox认识到他所提出的文化转变是非同小可的,因此希望在未来几年中通过由他任总裁的电子市场联合会来推进其事业。
工业过程控制、先进技术工具和通用部件的结合,看来不仅能够转变程序编制的方式,还能够转变编制程序的人。在出席Hedsor公园会议的专家中,很多人同意Belady的观点:“将来,大多数领域的专业人员将把编程作为一种工具使用,但他们并不自称编程员,也不认为自己在花时间编程。他们将认为自己在从事建筑或交通规划和影片制作。”
那种可能性回避了谁有资格建立重要的系统这一间题。今天,任何人人都可自称软件工程师。南加州大学软件工程中心主任Barry W. Boehm说:“但是,当有1亿用户-编程员时,他们经常会做一些一生中至关重要的事情,例如编制满足吩咐的应用程序”。建议像其他领域那样对软件工程师实行资格认证的人越来越多,Boehm就是其中的一个。
当然,首先编程人员得受过适当训练,资格证明才有用。目前只有28所大学开设软件工程研究生课程,5年前只有10所这样的大学。没有一所大学提供本科学位,甚至连诸如Shaw、Demillo和Basili这样的大学教师也认为计算机科学的课程一般不能很好地适应工业软件的发展。Capess Jones伤心地说:“像设计代码检查、建立用户文件和维护老化软件这样一些基本事情在学术环境中都不教。”
工程师——每一次工业革命的基本力量——不会自发产生。他们经过培训才合摆脱其前辈手艺人养成的坏习惯。在计算机科学的课程不断灌输不仅要建造更好的东西,还要有更好的建造方法之前,我们所能期望的最好情况就是,软件开发将经历一次缓慢的也许是痛苦的工业革命。
【徐彬/译 郭凯声/校】
请 登录 发表评论