软件可靠性是个大问题

摘自http://blog.51xuewen.com/ymin/article_12698.htm

 

 软件可靠性是个大问题
如果说计算机体系结构描写了计算机的躯体,那么,软件就是计算机的灵魂。软件可靠性对可信计算起着举足轻重的作用。几十年来,硬件技术特别是集成电路技术飞速发展,但软件技术在产品质量、生产力、成本及性能等众多方面都滞后于硬件技术的发展。随着软件系统规模和复杂性的增加,其开发成本以及由于软件故障而造成的经济损失也正在增加,软件质量问题已成为制约计算机发展的关键因素之一。

    软件产品实现包括从需求描述、系统设计、系统实现、测试验证到运行维护的整个生命周期。但是,几十年的经验表明,要实现一个高质量的软件产品,开发管理极其重要。软件生命周期定义了软件过程的框架和原则,但没有描述软件过程的活动、组织形式、工具和操作规程,以及开发方针和约束。这次的绿坝事件首先就是由于开发管理出了问题。质量和生产率是软件工程的两个核心目标。一个信息技术(IT)项目经理最重要的责任是为各种活动分配资源。其他责任还有项目计划和评估、控制、组织、合同管理,质量管理,风险管理,通讯和人力资源管理。项目经理的错误决策也许是今天软件失效的主要原因。技术管理的失误引起技术差错,但可以纠正,而错误的项目管理决策,可能引起全盘皆输。

  2005年9月IEEE Spectrum 杂志专门报导了用户定制的企业软件及许多软件失效的问题,这些失效导致公司破产、政府和工业界在美国每年损失达到600-750亿美元,这类计划的15-20%不是中途停止,就是完成后很快被抛弃。问题在那里?为什么软件会失败?没有过程文档或者很糟的过程文档、不可能满足的需求、很差的或者不断更改的规格说明和质量控制。最大的问题可能在于人,用户无法说清究竟他希望要什么,卖主无法控制,管理者看到这种情况只有另图别路。我们不妨举几个典型的例子来说明问题。

①最著名的一个软件失效是美国联邦调查局(FBI)的“虚拟案件文件系统”。这个用户软件希望自动化该局的纸上工作环境,允许下属通过计算机网络分享与调查相关的信息。但是,FBI说,开发商开发的软件错误太多,使他们丢弃了这个1.7亿美元的项目。但是许多人说FBI对此失败也有责任。当FBI准备花更多的钱来做这个项目时,应该搞清楚现在的问题出在哪里。研究表明问题还是出在软件开发过程的错误。
②所有的信息技术系统都是很脆弱的。对一个砖瓦建筑大楼,你需要拆掉几百块置于战略位置的砖才能使一面墙倒塌。但是,对于一个十万行程序的软件,只要有一两行是坏的,就会出现大问题。1991年,AT&T电话网络失灵,使一千二百万用户丢失电话服务,完全是由于一行程序中一个字符的键入错误造成的。
③另一个不成熟的IT实践是1997年美国税收服务的40亿现代化项目,美国国税局现在还继续投80亿。把税收编码翻译成软件编码基本上是不可能的。税收法规非常复杂,基于常常是含糊的法律条文,并且经常改变。从信息工程的观点来看,那是一个需求梦想。如果考虑到来自内部和外部的恶意攻击,问题就更加复杂。
④Sydney Water Corp.是澳洲最大的水提供商,该公司的自动顾客信息和计费系统,经费3,320万美元,在2002年被取消。根据澳大利亚总审计师的研究,该项目的计划和规范不适当,使许多需求改变,而且要追加经费和推迟项目的计划。Sydney Water 不得不在花费了3,320万美元之后,中断该项目。
⑤Oxford Health Plans Inc. 在1997年,该公司的自动计费和索赔系统不能处理扩展的商务,导致4亿美元没有收上来,6.5亿美元没有付出去。而高级经理们对扩展牛津的生意比提供满足目前需求的计费系统更有兴趣。甚至在问题出现以后,例如服务清单送出几个月以后,经理们并不在意。当计费系统失效时,公司丢失几千万美元,股票价格一天内由68降到26美元,勾销了34亿企业价值。股东们告状,最后输掉2.25亿美元。政府部门对该公司展开调查,最后发现300万违规。
⑥在1986年,London Stock Exchange想设计一个新的股票结算系统,决定研制股票交易自动化系统。7年后,到1993年,花费了6亿美元,停止了这个系统的开发,不但因为设计太复杂、太麻烦,而且因为管理太差,太幻想化了。研究表明,虽然出现了许多问题,工期一再推迟,花费很高,但没有人对该项目的真实情况进行调查研究。
⑦2004年10月,一家英国食品上市公司注销了一个5.26亿美元投资的自动贮藏链管理系统项目。由于该系统失效,公司不得不雇用3000人来把商品从仓库送到各商店的货架上。
 
这种软件项目失败的例子还有很多。从这些例子中我们首先看出,发达国家的软件开发费用是很高的,软件失效的损失是惨重的。就我国目前的情况看,这两点都未做到。我们常常以为,软件不过是编码,找几个学生就可以做了,不需要很多经费。所以,一般软件项目经费较少。另一方面,软件完成以后,公司或机关并不完全依赖该软件,而是锦上添花,即使软件失效也无关大局,因而损失也不大。俗语说“便宜没好货”,越是便宜的东西,质量就越差。当然,这种情况正在改变。例如,“绿坝——花季护航”软件,国家投资4000万,不算少。完成以后,工信部向全国发通知,2009年7月1日起,全国都要用。飞机场的管理系统崩溃,飞机就无法进出航空港。你也就无法期望很廉价地开发一个高可靠的飞机场管理系统。其次,我们可以看出,软件并不光是指它的编码。软件是一个过程。整个生命周期中的任何故障都可能引起软件的失效。许多信息技术专家相信,软件失效实际出现的次数比人们感知的还要多。这些故障通常不可预计,它们出现在各个国家、大公司,商业,事业单位和政府机关,造成的纳税人和股东以及投资者的金钱损失一年就是几十亿美元。随着信息技术无处不在地增长,这个问题将更加严重。今年,全世界的组织和政府将投资约1万亿元于信息技术,包括硬件、软件和服务。 5-10%将半途而废,其他的将推迟或追加经费,只有少数真正成功。最大的悲剧在于,人们知道,软件失效总体来说不可避免,许多组织即使看到了危害甚至毁灭该组织的威胁,也不把预防失效看作紧急之事。这并不是由于技术上的原因,而是由于复杂的商业和社会原因。
近十几年来,即使对于已成功的软件开发项目,软件代码量大增也是影响软件可靠性的大问题。例如,航天飞机机载系统有近五十万行代码,地面控制和处理系统也有大约三十五万行代码。在美国电信业中,电信线路的正常运转需要数百个软件系统的支持,其代码总量超过一亿行。有两个原因使计算机软件越来越大:一个是人们对计算机需求和依赖的与日俱增,计算机系统的规模和复杂性急剧增加;另一个是软件体系结构越来越复杂。为了提高软件生产力,软件过程趋于复杂,许多人协同工作,层次化的或网状的体系结构和层次化的开发方法,都使得计算机软件的大小以惊人的速度急剧膨胀。与此同时,计算机出现故障引起危机的可能性也逐渐增加。由于计算机硬件技术的进步,元器件可靠性的提高,硬件故障相对显得次要了。研究表明:由于软件设计故障引起的系统失效与由于硬件设计故障引起的失效之比是10:1。表1给出了某些成熟的计算机系统失效源的统计数据。

                    表1 计算机系统失效源的统计数据
 

系   统
数据发表年份
硬件(%)
软件(%)
维护(%)
操作(%)
环境(%)
AT&T ESS
1978
20
15
-
65
-
Tandem
1985
18
26
25
17
14
Bellcore
1986
26
30
-
44
-
Tandem
1987
19
43
13
13
12


由表1可以看出,软件故障正逐渐成为导致计算机系统失效和停机的主要因素。对复杂计算机系统需求的急剧增加,远远超过计算机软/硬件设计、实现、测试及维护的能力,结果出现了许多可怕的计算机工程事故,其中大多数都是由于软件故障所致。

 

  面对系统需求和软件复杂性的增长,软件行业碰到两个大问题:一个是软件生产力的问题;一个是软件可靠性的问题。几百、几千万行的程序,要在较短的时间内拿出来,就必须要有多人分工协同,重用已有的软件,使从规范到程序的许多过程自动化,这样才能提高软件生产力。因此,软件设计方法在不断发展。可另一方面,怎么保证这么快开发出来的这么大的软件没有故障?这就是软件可靠性的问题。勿庸置疑,如何提高软件可靠性,如同如何提高软件生产力一样,已成为整个软件开发过程中必须始终关心和设法解决的问题。

  软件可靠性的重要性需要全社会的公认。不但开发人员要认识这问题,管理人员,包括政府机构的官员都需要认识软件可靠性的重要性和严重性。广大用户要有冷静的头脑对待软件质量。软件不是越新越好,也不是宣传得越动人越好。软件开发人员必须有证据说明,“我的软件为什么可靠”,用户才能相信你的软件,才能用你的软件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值