软件可靠性是个大问题如果说计算机体系结构描写了计算机的躯体,那么,软件就是计算机的灵魂。软件可靠性对可信计算起着举足轻重的作用。几十年来,硬件技术特别是集成电路技术飞速发展,但软件技术在产品质量、生产力、成本及性能等众多方面都滞后于硬件技术的发展。随着软件系统规模和复杂性的增加,其开发成本以及由于软件故障而造成的经济损失也正在增加,软件质量问题已成为制约计算机发展的关键因素之一。
软件可靠性是个大问题
不要认为,软件仅仅是一个计算机指令序列,它是为用户提供所需信息处理能力的逻辑上的信息处理设备。用户需要的是一个满意的软件产品。但是,不要把软件的产品实现和开发管理混为一谈,或者顾此失彼。产品实现包括从需求描述、系统设计、系统实现、测试验证到运行维护的整个生命周期。但是,几十年的经验表明,要实现一个高质量的软件产品,开发管理极其重要。软件生命周期定义了软件过程的框架和原则,但没有描述软件过程的活动、组织形式、工具和操作规程,以及开发方针和约束。这些正是当下所谓软件过程技术要研究的。由于当今的软件,无论是系统软件、中间件或应用软件,都不是一个单位、一个人能够完成的,需要合作和协同,因此,软件产业需要国际标准。20世纪80年代,卡内基-梅隆大学的软件工程研究所在美国国防部的支持下,提出了评价软件供应商过程能力的能力成熟度模型(CMM)。一个软件组织的能力成熟度的高低,就看该组织是否能站在比软件项目更高的层次上考察其实施软件开发所使用的软件过程。能够定义该软件过程者为成熟度三级;如能度量和管理,则达到成熟度四级;如果还能优化该过程,则达到了成熟度五级。只有在成熟的软件过程管理之下,才能生产出高质量的软件产品。CMM模型现在还在不断地丰富和改进。质量和生产率是软件工程的两个核心目标。CMM等已被公认为软件质量保证方面的事实标准。它强调软件过程的管理与控制,忽略软件人员个人的主动性和创造性。所以,进入二十一世纪,在美国成立了Agile联盟,提出了敏捷软件开发方法,以适应那些需求不够确定、软件开发团队不是很大的软件开发项目。在2000年,美国政府和商业机构公布了CMM水平评估结果。在第一、二级者超过一半,30%达到第三级,只有17%达到第四、五级。实际情况可能比这还要糟。CMM现在正发展成CMMI,以更广泛地评估一个单位创造复杂软件系统的能力。一个信息技术(IT)项目经理最重要的责任是为各种活动分配资源。其他责任还有项目计划和评估、控制、组织、合同管理,质量管理,风险管理,通讯和人力资源管理。项目经理的错误决策也许是今天软件失效的主要原因。技术管理的失误引起技术差错,但可以纠正,而错误的项目管理决策,例如雇用程序员太少或合同类型的错误,可能引起全盘皆输。
2005年9月IEEESpectrum杂志专门报导了用户定制的企业软件及许多软件失效的问题,这些失效导致公司破产、政府和工业界每年损失在美国达到600-750亿美元,这类计划的15-20%不是中途停止,就是完成后很快被抛弃。问题在那里?为什么软件会失败?没有过程文档或者很糟的过程文档、不可能满足的需求、很差的或者不断更改的规格说明和质量控制。最大的问题可能在于人,用户无法说清究竟他希望要什么,卖主无法控制,管理者看到这种情况只有另图别路。我们不妨举几个典型的例子来说明问题。
①最著名的一个软件失效是美国联邦调查局(FBI)的“虚拟案件文件系统”。这个用户软件希望自动化该局的纸上工作环境,允许下属通过计算机网络分享与调查相关的信息。但是,FBI说,开发商开发的软件错误太多,使他们丢弃了这个1.7亿美元的项目。但是许多人说FBI对此失败也有责任。当FBI准备花更多的钱来做这个项目时,应该搞清楚现在的问题出在哪里。研究表明问题还是出在软件开发过程的错误。
请问是楼主引用的材料,还是自己的体会啊,想了解下你的数据来源,我想引用下
(4)编码过程
编码一般由程序员完成。程序的质量与程序员的素质很有关系,甚至和程序员的性格、作风和经历都有关系。编码过程的故障最能体现程序员的编程水平。但出错仍然是不可避免的,而且是大量的。
软件可靠性
已投入运用的软件的一个重要标志是软件可靠性。从实验系统所获的统计数据表明,运行软件的驻留故障密度各不相同,与财产有关的关键软件为每千行代码1-10个故障,而生命攸关的关键软件为每千行代码0.01-1个故障。正是由于软件可靠性的大幅度提高才使得计算机得以广泛应用于社会的各个方面。一个可靠的软件应该是正确的、完整的、一致的和健壮的。美国电机电子工程师协会(IEEE)定义软件可靠性为系统在特定的环境下,在给定的时间内,无故障地运行的概率,用来评价软件按照用户的要求和设计目标,完成规定功能的能力。软件可靠性牵涉到软件的性能、功能性、可用性、可服务性、可安装性、可维护性以及文挡等多方面特性,是对软件在设计、生产以及在它所预定环境中具有所需功能的置信度的一个测度,是衡量软件质量的主要参数之一。
关于软件可靠性方面的量度,主要有:
•软件中初始故障个数。
•软件经过测试后,通过查错、改错,在软件中剩余故障的个数。
中国可靠性网http://可靠性.com
•平均无故障时间。
•故障间的时间长度
•故障发生率
•软件的可靠度
•预测下一次故障的发生时间等。
软件开发过程中,测试过程的完整文档使对测试结果的收集和评价成为可能,从而可以定量地估计软件可靠性。软件可靠性模型就是利用软件测试所提供的有关软件系统的故障数据,估算软件的可靠性,对软件将来的故障行为进行预测,以协助开发人员监督软件开发过程,辅助软件过程管理,如过程评估、风险分析、项目估计与决策等。这类软件可靠性数学模型已经有了几十种,但人类的实践活动很难用数学方法描述出来,所以至今没有很理想的模型。可是,从另一方面看,软件可靠性的预测是软件产业界极其关心的。因为,软件不达到一定的可靠性,不能推向市场,所以必须经过详细测试。但是,测试的时间又不能拖得过长,以致影响进入市场的时间,造成经济损失。那么,一个软件究竟应该测试多长时间再推向市场才算最好,自然成为业界关注的重要问题。
系统数据发表年份硬件(%)软件(%)维护(%)操作(%)环境(%)
AT&TESS19782015-65-
Tandem19851826251714
Bellcore19862630-44-
Tandem19871943131312
由表1可以看出,软件故障正逐渐成为导致计算机系统失效和停机的主要因素。对复杂计算机系统需求的急剧增加,远远超过计算机软/硬件设计、实现、测试及维护的能力,结果出现了许多可怕的计算机工程事故,其中大多数都是由于软件故障所致。
面对系统需求和软件复杂性的增长,软件行业碰到两个大问题:一个是软件生产力的问题;一个是软件可靠性的问题。几百、几千万行的程序,要在较短的时间内拿出来,就必须要有多人分工协同,重用已有的软件,使从规范到程序的许多过程自动化,这样才能提高软件生产力。因此,软件设计方法在不断发展。可另一方面,怎么保证这么快开发出来的这么大的软件没有故障?这就是软件可靠性的问题。勿庸置疑,如何提高软件可靠性,如同如何提高软件生产力一样,已成为整个软件开发过程中必须始终关心和设法解决的问题。
软件故障与硬件故障的异同
计算机系统中可能出现的故障多种多样,可以进行不同的分类。如果把故障分为硬件故障、软件故障、操作故障和环境故障四类,情况各不相同。硬件故障是因为物理性能的恶化所造成;软件故障是由设计阶段的人为因素所造成;操作故障是指操作人员和维护人员的错误;环境故障则包括电源、外界干扰、地震、火灾、病毒等各种外界因素引起的故障。软件故障导致软件在其运行期间的表现偏离了事先规定的行为要求。如果规格说明书错了,即使软件的实现与规格说明书的要求符合,但它与用户的要求不吻合,从用户立场上来看,这也是对事先规定行为的偏离,它将直接影响到用户的使用。因此,只要用户有抱怨,就可以说,是由于软件故障所致。但是,另一方面,如果用户提出的对系统的要求过于复杂,前后矛盾,或者不全面,就会天生地出现故障,甚至整个项目的崩溃。
www.Kekaoxing.com中国可靠性
软件故障是指软件设计上的错误,它是人为的。而硬件故障虽然也有由于设计错误而引起,但大部分是物理故障,例如寿命、磨损、外界干扰等。而软件既没有寿命问题,也没有磨损的问题。软件故障是一个软件固有的,不在一定的条件下不会表现出来。恰恰是由于尚未表现出来,常常被人误认为没有故障。虽然说软件故障不像硬件故障可能由于元件老化产生,但软件由于长期使用使软件性能下降,甚至完全失效的故障也是有的。例如,无休止的线程、无释放的文件锁闭、数据污染、存储空间的彻底分裂与积聚差错等。
软件故障是人为的,其来源主要有以下几个:
(1)软件规范(Specification)
软件规范是软件开发的出发点,是需求分析的结果,一般是用自然语言书写。保证软件规范完全性和无矛盾性是很困难的。例如一个银行取款机,用户的操作错误应该是允许的,只要取款机不出钱、不计账就可以。但是,你不能允许用户无限制地试下去,以防止他恶意地刺探别人密码或其他攻击。对于一个操作系统写一个规范,你几乎无法穷尽地考虑所有可能的情况。越是大的、复杂的软件项目,其软件规范就越难写,写出来的规范存在故障的概率也就越大。
(2)软件开发过程
KekaoXing.com
软件开发过程是一个需要很多人参与协同的过程。协同过程中的漏洞容易造成软件故障。软件管理过程不到位,出现软件故障的可能性就加大。
(3)软件工具
在软件开发过程中,必然要使用很多软件工具,例如,编译器就是最基本的一种。现在,越来越多的软件工具已在市场出现。事实上,越是大型的软件,越是需要更多的工具。值得注意的是,软件工具本身并不能保证完全正确。工具中固有的软件故障就可能使新开发的软件产生故障。
②所有的信息技术系统都是很脆弱的。对一个砖瓦建筑大楼,你需要拆掉几百块置于战略位置的砖才能使一面墙倒塌。但是,对于一个十万行程序的软件,只要有一两行是坏的,就会出现大问题。1991年,AT&T电话网络失灵,使一千二百万用户丢失电话服务,完全是由于一行程序中一个字符的键入错误造成的。
③另一个不成熟的IT实践是1997年美国税收服务的40亿现代化项目,美国国税局现在还继续投80亿。把税收编码翻译成软件编码基本上是不可能的。税收法规非常复杂,基于常常是含糊的法律条文,并且经常改变。从信息工程的观点来看,那是一个需求梦想。如果考虑到来自内部和外部的恶意攻击,问题就更加复杂。
④SydneyWaterCorp.是澳洲最大的水提供商,该公司的自动顾客信息和计费系统,经费3,320万美元,在2002年被取消。根据澳大利亚总审计师的研究,该项目的计划和规范不适当,使许多需求改变,而且要追加经费和推迟项目的计划。SydneyWater不得不在花费了3,320万美元之后,中断该项目。
⑤OxfordHealthPlansInc.在1997年,该公司的自动计费和索赔系统不能处理扩展的商务,导致4亿美元没有收上来,6.5亿美元没有付出去。而高级经理们对扩展牛津的生意比提供满足目前需求的计费系统更有兴趣。甚至在问题出现以后,例如服务清单送出几个月以后,经理们并不在意。当计费系统失效时,公司丢失几千万美元,股票价格一天内由68降到26美元,勾销了34亿企业价值。股东们告状,最后输掉2.25亿美元。政府部门对该公司展开调查,最后发现300万违规。
中国可靠性网KekaoXing.com
⑥在1986年,LondonStockExchange想设计一个新的股票结算系统,决定研制股票交易自动化系统。7年后,到1993年,花费了6亿美元,停止了这个系统的开发,不但因为设计太复杂、太麻烦,而且因为管理太差,太幻想化了。研究表明,虽然出现了许多问题,工期一再推迟,花费很高,但没有人对该项目的真实情况进行调查研究。
⑦2004年10月,一家英国食品上市公司注销了一个5.26亿美元投资的自动贮藏链管理系统项目。由于该系统失效,公司不得不雇用3000人来把商品从仓库送到各商店的货架上。
这种软件项目失败的例子还有很多。从这些例子中我们首先看出,发达国家的软件开发费用是很高的,软件失效的损失是惨重的。就我国目前的情况看,这两点都未做到。我们常常以为,软件不过是编码,找几个学生就可以做了,不需要很多经费。所以,一般软件项目经费较少。另一方面,软件完成以后,公司或机关并不完全依赖该软件,而是锦上添花,即使软件失效也无关大局,因而损失也不大。俗语说“便宜没好货”,越是便宜的东西,质量就越差。当然,这种情况正在改变,例如飞机场的管理系统崩溃,飞机就无法进出航空港。你也就无法期望很廉价地开发一个高可靠的飞机场管理系统。其次,我们可以看出,软件并不光是指它的编码。软件是一个过程。整个生命周期中的任何故障都可能引起软件的失效。许多信息技术专家相信,软件失效实际出现的次数比人们感知的还要多。这些故障通常不可预计,它们出现在各个国家、大公司,商业,事业单位和政府机关,造成的纳税人和股东以及投资者的金钱损失一年就是几十亿美元。随着信息技术无处不在地增长,这个问题将更加严重。今年,全世界的组织和政府将投资约1万亿元于信息技术,包括硬件、软件和服务。5-10%将半途而废,其他的将推迟或追加经费,只有少数真正成功。最大的悲剧在于,人们知道,软件失效总体来说不可避免,许多组织即使看到了危害甚至毁灭该组织的威胁,也不把预防失效看作紧急之事。这并不是由于技术上的原因,而是由于复杂的商业和社会原因。中国可靠性网http://可靠性.com
近十几年来,即使对于已成功的软件开发项目,软件代码量大增也是影响软件可靠性的大问题。例如,航天飞机机载系统有近五十万行代码,地面控制和处理系统也有大约三十五万行代码。在美国电信业中,电信线路的正常运转需要数百个软件系统的支持,其代码总量超过一亿行。有两个原因使计算机软件越来越大:一个是人们对计算机需求和依赖的与日俱增,计算机系统的规模和复杂性急剧增加;另一个是软件体系结构越来越复杂。为了提高软件生产力,软件过程趋于复杂,许多人协同工作,层次化的或网状的体系结构和层次化的开发方法,都使得计算机软件的大小以惊人的速度急剧膨胀。与此同时,计算机出现故障引起危机的可能性也逐渐增加。由于计算机硬件技术的进步,元器件可靠性的提高,硬件故障相对显得次要了。研究表明:由于软件设计故障引起的系统失效与由于硬件设计故障引起的失效之比是10:1。表1.1给出了某些成熟的计算机系统失效源的统计数据。