软件可靠性的定义
1983年美国IEEE计算机学会对“软件可靠性”作出了明确定义,此后该定义被美国标准化研究所接受为国家标准,1989年我国也接受该定义为国家标准。
该定义包括两方面的含义:(1)在规定的条件下,在规定的时间内,软件不引起系统失效的概率;(2)在规定的时间周期内,在所述条件下程序执行所要求的功能的能力;其中的概率是系统输入和系统使用的函数,也是软件中存在的故障的函数,系统输入将确定是否会遇到已存在的故障(如果故障存在的话)。
软件可靠性的影响因素
软件可靠性是关于软件能够满足需求功能的性质,软件不能满足需求是因为软件中的差错引起了软件故障。
软件中有哪些可能的差错呢?软件差错是软件开发各阶段潜入的人为错误:1.需求分析定义错误。
如用户提出的需求不完整,用户需求的变更未及时消化,软件开发者和用户对需求的理解不同等等。
2.设计错误。
如处理的结构和算法错误,缺乏对特殊情况和错误处理的考虑等。
3.编码错误。
如语法错误,变量初始化错误等。
4.测试错误。
如数据准备错误,测试用例错误等。
5.文档错误。
如文档不齐全,文档相关内容不一致,文档版本不一致,缺乏完整性等。
从上游到下游,错误的影响是发散的,所以要尽量把错误消除在开发前期阶段。
错误引入软件的方式可归纳为两种特性:程序代码特性,开发过程特性。
程序代码一个最直观的特性是长度,另外还有算法和语句结构等,程序代码越长,结构越复杂,其可靠性越难保证。
开发过程特性包括采用的工程技术和使用的工具,也包括开发者个人的业务经历水平等。
除了软件可靠性外,影响可靠性的另一个重要因素是健壮性,对非法输入的容错能力。
所以提高可靠性从原理上看就是要减少错误和提高健壮性。
硬件可靠性定量评估是以收集到的失效间隔时间来做的,软件的失效间...
1983美IEEE计算机软件靠性作明确定义该定义美标准化研究所接受家标准1989我接受该定义家标准该定义包括两面含义: (1)规定条件规定间内软件引起系统失效概率; (2)规定间周期内所述条件程序执行所要求功能能力; 其概率系统输入系统使用函数软件存故障函数系统输入确定否遇已存故障(故障存)软件靠性关于软件能够够满足需求功能性质软件能满足需求软件差错引起软件故障软件哪些能差错呢? 软件差错软件发各阶段潜入错误: 1.需求析定义错误用户提需求完整用户需求变更未及消化软件发者用户需求理解同等等 2.设计错误处理结构算错误缺乏特殊情况错误处理考虑等 3.编码错误语错误变量初始化错误等 4.测试错误数据准备错误测试用例错误等 5.文档错误文档齐全文档相关内容致文档版本致缺乏完整性等 游游错误影响发散所要尽量错误消除发前期阶段 错误引入软件式归纳两种特性:程序代码特性发程特性 程序代码直观特性度另外算语句结构等程序代码越结构越复杂其靠性越难保证 发程特性包括采用工程技术使用工具包括发者业务经历水平等 除软件靠性外影响靠性另重要素健壮性非输入容错能力 所提高靠性原理看要减少错误提高健壮性
如何避免软件危机
软件危机(Software Crisis) 是计算机软件在它的开发和维护过程中所遇到的一系列严重问题。
概括地说,主要包含两方面的问题:如何开发软件,怎样满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
“软件危机”使得人们开始对软件及其特性进行更深一步的研究,人们改变了早期对软件的不正确看法。
早期那些被认为是优秀的程序常常很难被别人看懂,通篇充满了程序技巧。
现在人们普遍认为优秀的程序除了功能正确,性能优良之外,还应该容易看懂、容易使用、容易修改和扩充。
程序设计语言虽然为计算机的应用开拓了无比广阔的前景,但游荡在软件世界的幽灵——“软件危机”依然存在。
因为软件的开发不仅受到程序设计的方法、结构的制约,而且受到开发周期以及软件开发成本的限制,更重要的是软件质量的保障与其程序设计的正确性关系极大。
如果所开发的软件其可靠性得不到保障,在运行中将会产生不堪设想的严重后果。
60年代中期以后,计算机硬件技术日益进步,计算的存贮容量、运算速度和可靠性明显提高,生产硬件的成本不断降低。
计算机价格的下跌为它的广泛应用创造了极好的条件。
在这种形势下,迫切要求计算机软件也能与之相适应。
因而,一些开发大型软件系统的要求提了出来。
然而软件技术的进步一直未能满足形势发展的需要,在大型软件的开发过程中出现了复杂程度高、研制周期长、正确性难以保证的三大难题。
遇到的问题找不到解决办法,致使问题堆积起来,形成了人们难以控制的局面,出现了所谓的“软件危机”。
最为突出的例子是美国IBM公司于1963年~1966年开发的IBM360系列机的操作系统。
该软件系统花了大约5 000人一年的工作量,最多时,有 1000人投入开发工作,写出近100万行的源程序。
尽管投入了这么多的人力和物力,得到的结果却极其糟糕。
据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。
可想而知,这样的软件质量糟到了什么地步。
难怪该项目的负责人F·D·希罗克斯在总结该项目时无比沉痛地说:“……正像一只逃亡的野兽落到泥潭中作垂死挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难,……程序设计工作正像这样一个泥潭……一批批程序员被迫在泥潭中拼命挣扎,……,谁也没有料到问题竟会陷入这样的困境……。
” IBM360操作系统的历史教训已成为软件开发项目中的典型事例被记入历史史册。
如果开发的软件隐含错误,可靠性得不到保证,那么在运行过程中很可能对整个系统造成十分严重的后果,轻则影响到系统的正常工作,重则导致整个系统的瘫痪,乃至造成无可挽回的恶性事故。
如,银行的存款可能被化为乌有,甚至弄成赤字;工厂的产品全部报废,导致工厂破产。
1963年,美国用于控制火星探测器的计算机软件中的一个“,”号被误写为“·”,而致使飞往火星的探测器发生爆炸,造成高达数亿美元的损失。
为了克服这一危机,一方面需要对程序设计方法、程序的正确性和软件的可靠性等问题进行系列的研究;另一方面,也需要对软件的编制、测试、维护和管理的方法进行研究,从而产生了程序设计方法学。
1968年,E·W·代克斯特拉首先提出“GOTO语句是有害的”论点,向传统程序设计方法提出了挑战,从而引起了人们对程序设计方法讨论的普遍重视。
众多著名的计算机科学家都参加了这种讨论。
程序设计方法学也正是在这种广泛而深入的讨论中逐渐产生和形成的。
什么是程序设计方法学呢?简言之,程序设计方法学是讨论程序的性质、程序设计的理论和方法的一门学科。
它包含的内容比较丰富,例如,结构程序设计,程序正确性证明,程序变换,程序的形式说明与推导、程序综合、自动程序设计等。
在程序设计方法学中,结构程序设计占有十分重要的地位,可以说,程序设计方法学是在结构程序设计的基础上逐步发展和完善起来的。
什么是结构程序设计呢?至今仍众说纷纭,还没有一个严格的,又能被大家普遍接受的定义。
1974年,D·格里斯将已有的对结构程序设计的不同解释归结为13种,其中,比较有代表性的如下: 结构程序设计是避免使用GOTO语句的一种程序设计; 结构程序设计是自顶向下的程序设计; 结构程序设计是一种组织和编制程序的方法,利用它编制的程序易于理解、易于修改; 程序结构化的一个主要功能是使程序正确性的证明容易实现; 结构程序设计对设计过程中的每一步去验证其正确性,这样便自动导致自我说明和自我捍卫的程序设计风格; 总之,结构程序设计讨论了如何将大规模的和复杂的流程图转换成一种标准的形式,使得它们能够用几种标准的控制结构(通常是顺序、分支和重复)通过重复和嵌套来表示。
上述定义或解释从不同角度反映了结构程序设计所讨论的主要问题。
实质上,结构程序设计是一种进行程序设计的原则和方法,按照这种原则和方法可设计出结构清晰、容易理解、容易修改、容易验证的程序。
按照结构程序设计的要求设计出的程序设计语言称为结构程序设计语言。
利用结构程序设计语言,或者说按结构程序设计的思想和原则编制出的程序称为...
何为可靠性?可靠性是否意味着真实?
可靠性指元件、产品、系统在一定时间内、在一定条件下无故障地执行指定功能的能力或可能性。
可靠性并不能意味着真实。
可靠性是一项重要的质量指标,只是定性描述就显得不够,必须使之数量化,这样才能进行精确的描述和比较。
可靠性的定量表示有其自己的特点,由于使用场合的不同,很难用一个特征量来完全代表。
可通过可靠度、失效率、平均无故障间隔等来评价产品的可靠性。
从广义上讲,“可靠性”是指使用者对产品的满意程度或对企业的信赖程度。
而这种满意程度或信赖程度是从主观上来判定的。
为了对产品可靠性做出具体和定量的判断,可将产品可靠性可以定义为在规定的条件下和规定的时间内,元器件(产品)、设备或者系统稳定完成功能的程度或性质。
例如,汽车在使用过程中,当某个零件发生了故障,经过修理后仍然能够继续驾驶。
产品实际使用的可靠性叫做工作可靠性。
工作可靠性又可分为固有可靠性和使用可靠性。
固有可靠性是产品设计制造者必须确立的可靠性,即按照可靠性规划,从原材料和零部件的选用,经过设计、制造、试验,直到产品出产的各个阶段所确立的可靠性。
使用可靠性是指已生产的产品,经过包装、运输、储存、安装、使用、维修等因素影响的可靠性。
维多利亚的秘密1