NoText
宇宙的中心是地球。 地球的中心是人类。 人类的中心是思想。 改变思想,就能改变一切!

在互联网上有一个广为流传的笑话。比尔-盖茨(有时也是别的软件大亨)说:“如果汽车工业也象软件业这样发展,我们都能开上25美元的汽车,1000英里后才需要加油。”这时有一位汽车业大亨反驳说:“对,汽车就会每天无缘无故的坏两次,你把服务人员叫来后,他们会告诉你要重装引擎。”  
      
    这反映出软件业当前的一个大问题。虽然软件迅速成为了人们日常生活的重要部分,主宰着银行、交通等关键领域,但是大多数软件的可靠性不佳,很多人都遇到过计算机蓝屏从而使数小时工作报废的情况。软件工程师指出,软件代码往往设计不佳,太长而且效率不高。即使程序没有问题使用起来也不方便,书店里充斥的大部头计算机入门图书就是最好的证明。  
      
    软件的质量在下降  
      
    卡内基梅隆大学软件设计学院教授汉弗里指出:“软件的现状很糟糕,而且还在不断恶化。”他认为,好的软件应该是“可用、可靠、可维护、无缺陷、价格经济”,现在的软件连一条都不满足。得克萨斯大学奥斯汀分校计算机学教授迪克斯特拉表示:“计算机用户这些年来获得的服务很糟糕,始终得防备出故障。带着Bug的软件满世界跑,我们真应该感到羞愧。人们已经理所当然地认为Windows   XP的4500万行代码中肯定会出现一些错误。”一家软件质量培训公司老板吉姆-麦卡锡要宽容一些,他认为大多数软件的性能还是值得购买和使用的。  
      
    软件业的问题并不是夸大。在过去15年,软件问题导致了15颗人造卫星坠毁,破坏了火星登陆计划,导致美国海军击落民用飞机,一个飞机场推迟一年交付使用。几乎所有产业的工程师们都不会说自己的产品不如以前,逐步改正错误应该是技术演化的自然趋势。但是软件业很特殊,很多软件工程师都认为软件的质量在下降,至少没有改进。随着软件重要性的提高,代码错误的危害也越来越严重。SRI的计算机科学家纽曼表示:“我们的情况比5年前差多了,风险更大而防护更差。在各产业中这是很少见的。”  
      
    一些软件公司通过更新程序来逃避批评,微软是这方面的代表。在发布Windows   XP的当天,微软网站上就出现了18兆的Windows   XP补丁程序,这可能创了纪录。微软还要求用户在安装补丁前对重要文件备份,但是有时备份文件无法恢复,微软说:“Windows   XP家庭版创建的一些备份软盘不能与Windows   XP家庭版一起工作。”这反映出软件开发商对推出产品太着急,而对产品的漏洞漠不关心。  
      
    代码编写技术跟不上潮流  
      
    莱斯大学计算机专家华莱士表示:“软件业的问题不在微处理器价格低廉,也不是微软产品太差。关键是软件业编写软件的技术已经跟不上急剧增长的复杂性的需要了。”程序员用Java、C、C++等语言写代码,然后再通过“编译器”把它们翻译成一长串0和1。重要的是,编译器对有明显问题的代码能够拒绝编译,只会输出一些错误信息。在70年代以前,编译器都放在主机系统上,往往需要提前几天甚至几周进行预订,由于谁都不想耽误进度,所以代码编写者往往直到深夜还在反复检查自己的工作。那时,写软件就象写学术论文一样。但是随着计算机的普及,态度发生了变化。程序员不再对编写代码小心翼翼了,遭到编译器拒绝成了家常饭,而程序员只是按编译器的要求逐条改正错误。纽曼说:“他们认为,只要编译器不报错就是正确的。”  
      
    随着程序越来越大、越来越复杂,这种“代码加修补”机制的局限性越来越明显了。根据汉弗里对13000个程序的研究,平均而言,专业代码编写者每千行要出100到150个错误。照此推算,有1600万行的Windows   NT   4将有2百万个错误。虽然绝大多数小问题不会有什么影响,但是仍然会有上千个能导致严重问题的错误。虽然微软在发布Windows   NT   4之前进行了长时间的测试,汉弗里指出:“在测试阶段最多只能找到一半错误。”即使微软投入大量时间和金钱进行4轮测试,那么也只能从16个错误中找出15个错误,这样发布时还会有8万个错误。  
      
    长期以来,软件工程师一直在寻找防犯错误的新技术。微软开发Windows时就开发出了很多新技术,其中最知名的就是模块设计法。但是批评者指出,模块之间往往只是简单地拼在一起,缺乏规划。汉弗里说:“一些软件计划的规划方案就是在信封背后画几个圈圈。”更糟糕的是,为了市场宣传的需要,软件公司在新软件中塞入尽可能多的功能,这降低了模块设计法的效果,Windows就是一个例证。比尔盖茨在4月表示,如果把浏览器部分去掉,Windows的功能就会不正常。由于缺乏设计,软件产品的升级并不能作出不会带来新问题的保证。  
      
    Standish咨询公司的调查表明,美国商务软件的设计在规划和管理上很糟糕。在2000年,大约有四分之一的项目被完全取消,没有产生最终产品。这给软件业带来了670亿美元的损失,其它软件产品的延期又造成了210亿美元的损失。美国商业部下属的国家标准和技术研究所指出,软件开发成本的近80%都用在了鉴别和纠正软件中的错误上,这还不算产品问世后完善产品、编写补丁的成本。如果能加强产品检测工作,就能够在软件开发的初期发现漏洞并进行修补,这每年能给美国企业节约222亿美元成本。  
      
    用户对创新要求太高  
      
    对创新的过高要求导致软件一直处于不可靠阶段。前Lotus首席工程师康奈尔表示,与汽车业不同,软件也总是在创新,90年代是浏览器,现在则是手机用户界面。他说:“这就象一个汽车制造商说:我们今年要造火箭。这当然会遇到问题。”微软首席技术官米尔沃德表示:“软件业面临着两难处境:人们总是要更多的功能。”他指出,微软的Word在1983年只有27000行代码,但是功能不多,如果不添加新功能的话,Word早就不存在了。米尔沃德认为,用户往往非常缺乏自知之明,微软的企业客户就经常指手划脚,要求微软加上一些功能再去掉一些功能。他认为:“软件业的问题在于用户的过高要求。”  
      
    2001年7月,微软IIS服务器软件中的缓冲溢出错误导致“代号红色”病毒袭击了数千家企业客户,两个月后,“尼姆达”病毒又利用其他错误袭击了好几千台电脑。在微软的主要产品暴露出一系列令人尴尬的缺陷后,比尔-盖茨在今年一月指示软件开发人员要把安全性放在首要位置,大幅减少产品中的错误。这听起来不错。但是过去的记录显示,微软在修改软件漏洞方面速度很慢,在批评那些公开漏洞的安全专家时却很迅速。今年二月,微软史无前例地停止新代码编写两个月,对程序员进行可靠性和安全性方面的集体培训,会上,管理人员把一些与会者的错误用大屏幕显示出来。  
      
    软件开发商越来越重视产品质量了。微软程序员效率研究中心负责人斯里瓦斯塔瓦表示:“C#等高级语言将会禁止一些错误。”五月,微软、NASA等16家企业建立了旨在测量和改善软件可靠性的“可持续计算”财团。批评者虽然对此表示欢迎,但是他们指出,除非开发商抛弃很多根深蒂固的观念,否则这些措施不会有效。佛罗里达技术学院的计算机科学家卡内尔指出:“软件产业的信条就是把质量当作第二位的任务。”在软件发布前,很多企业都会召开“Bug递延会”,决定哪些Bug要立即解决,哪些可以通过让用户下载补丁或进行升级来解决。卡内尔说:“在其它产业,知道有缺陷却不采取行动是会受到起诉的。但是在软件业,这是常规。所以人们都不买程序的1.0版本。”  
      
    如果说软件工程师愿意选择忽视漏洞的话,学者、黑客等外部人员则很愿意指出这些问题。但是软件公司越来越努力地阻止这种公开讨论。在许多软件授权协议的小字里包含禁止发表基准测试结果的条款。1999年,《PC》杂志试图对Oracle和微软的数据库产品进行比较,虽然《PC》保证比较的公正性,但是Oracle还是利用软件协议里的条款阻止他们这么做。Network   Associates要求购买McAfee   VirusScan查毒软件的用户在发表评论前必须征得公司的同意,这甚至导致纽约州以“限制言论自由”为由对公司提出了起诉。  
      
    一些专家认为软件业将逐步得到改善。软件公司被免除了产品责任令很多人感到惊讶。“爱虫”病毒的泛滥就是因为微软不顾安全专家的警告允许在Outlook中轻易运行附件的结果。“Computer   Economics”咨询公司估计,微软的这一决定导致了87.5亿美元的损失。批评者指出,虽然软件官司对起诉者代价高昂,但是迟早会出现起诉者的,只要赔偿费用高到一定程度,企业就将加强代码的可靠性。越来越多的软件工程师相信,软件企业免受产品责任起诉的日子不会太久了。  
      
    Cigital软件测试公司首席科学家沃斯表示:“导火索可能是一次规模庞大的起诉,也可能是政府主动干预。虽然这些方法不好,但是只要用枪指着软件公司的脑袋,他们会找到改善代码的方法的。”(作者:Charles   C.   Mann   编译:Unifytruth)

posted on 2008-09-10 09:57  NoText  阅读(411)  评论(0)    收藏  举报