转载自http://www.cmaintop.com/UploadFiles/2004121921215700.pdf
软件可靠性
软件的可靠性是用以衡量一个软件(指计算机程序)好坏很重要的一个评价指标。软件的
可靠性与硬件的可靠性有许多相似之处,更有许多差别。这种差异是由于软、硬件故障机理
的差异造成的,因而使软件可靠性在术语内涵、指标选择、设计分析手段以及提高软件可靠
性的方法与途径等方面具有其自身的特点。然而,软件可靠性作为一个新的研究领域正在发
展和应用。
1 基本概念
(1) 软件故障及其特征
对于软件的不正常,常用三个术语来描述:
①缺陷(fault):指的是软件的内在缺陷。
②错误(error):缺陷在一定环境条件下暴露,导致系统运行中出现可感知的不正常、
不正确和不按规范执行的状态。
③故障(failure):由于对错误未作任何纠正而导致系统的输出不满足预定的要求。
缺陷可能导致错误并造成系统的故障,因此,缺陷是一切错误的根源,故存在下面的传
递关系:缺陷→错误→故障。
但是发生过故障的软件通常仍然是可用的。只有当软件频繁发生故障,或公认已经“陈
旧”时,软件才被废弃,这一版本软件的寿命也就终结。
有缺陷的软件只有在特定条件下才能导致出错,而在一般情况下是能够正常工作的。软
件缺陷一般有以下特征:
①软件缺陷的固有性。软件一旦有缺陷,它将潜伏在软件中,直到它被发现和改正。反
之,在一定的环境下,软件一旦运行是正确的,它将继续保持这种正确性,除非使用环境发
生了变化。此外,它不像硬件,随时间推移会因使用而不断“耗损”,或产生新的缺陷。因
此,软件缺陷是“牢靠地”、“无耗损地”潜伏于软件之中。
②缺陷对环境的敏感性。对于一个软件来说,它的各部分之间有着密切的联系。软件的
运行过程实际上是各部分间的一个逻辑组合过程,不同的逻辑组合就可得到不同的程序路
径,而每一次软件运行或完成某功能都是选择了某一条程序路径。选什么样的程序路径是由
软件自身确定的输入环境决定的。对于不同的输入环境,软件的运行路径可能有不同。如果
软件在某些程序路径上含有缺陷,那么在执行这些程序路径时就有可能发生错误。这就是软
件错误与输入环境的关系。对在一定输入环境下工作出错的软件,当退出该环境后,对于其
他环境,此软件又可能正常工作。但当再次进入该环境时,软件又会出错。这说明缺陷对环
境是十分敏感的。
③软件错误的传染性。任一软件缺陷,只要未被排除,始终存在于该软件中,一旦暴露,
处理过程就将产生错误,而这种错误往往是变化的。例如,由于某一处错误处理,使某个处
理变量C 的值与要求不合,当变量C 继续参加运行时会引起处理过程中的其他错误。故这
类错误是具有“传染性”的。如果错误不被纠正,也许这种错误就一直存在以至继续“传染”,
直到引起软件故障。
(2) 软件可靠性
软件可靠性是“软件在规定的条件下、规定的时间周期内执行所要求的功能的能力”。
软件可靠性同样可用可靠度来衡量,而软件的可靠度是“软件在规定的条件下、规定的时间
周期内不引起系统故障的概率”。该概率是系统输入与系统使用的函数,也是软件中存在的
缺陷的函数。系统输入将确定是否会遇到已存在的缺陷(如果有缺陷存在的话)。
软件可靠性的定义虽与硬件可靠性定义貌似类同,但定义中的各要素的含义是不同的。
环境条件是指软件的使用(运行)环境,它涉及到软件运行所需要的一切支持系统及有关的因
素。规定的时间t 被定义为软件系统一旦投入运行后的计算机挂起(开机但空闲)和工作的累
积时间。显然,在使用期间中还有计算机的停机时间,它不包括在运行时间t 内。规定功能
是指从软件要求上或规格说明书和设计说明书上规定的软件全部功能。
2 常用参数
软件的故障与硬件不同,软件一旦出现故障,查明原因后相应的缺陷就可以得到纠正,
以后不再重复出现。因此这是一个可靠性增长的问题。特定的故障出现是非重复性事件,因
此不能用频率学派的理论来说明。基于上述分析,可知在一个较长的时间区间内,故障率
λ (t) 肯定不是常值。但是通过对软件工厂工作质量(包括质保体系质量)的掌握程度,根据
软件开发(测试)过程的质量可靠性分析,可以建立起对软件质量可靠性的“信念”,用概率
方法对其进行评估。
常用的软件可靠性参数有以下一些。
①系统平均不工作间隔时间(MTBSD)
设V T 为软件正常工作总时间,d 为软件系统由于软件故障而停止工作的次数,则定义
+1
=
d
T TV
BSD
式中: BSD T ——系统平均不工作间隔时间(MTBSD)。
②系统不工作次数(一定时期内)
由于软件故障停止工作,必须由操作者介入再起动才能继续工作的次数。
③可用度( A )
设V T 为软件正常工作总时间, D T 为由于软件故障使系统不工作的时间,则定义
V D
V
T T
A T
+
=
或 BD DT
BD
T T
A T
+
=
式中: BD T ——平均工作时间(h); DT T ——平均不工作时间(h)。
一般情况下,生产计算机系统要求A ≥99.8%;银行计算机系统要求A ≥99.9%。
④初期故障率
一般以软件交付使用方后的三个月内为初期故障期。初期故障率以每100h 的故障数为
单位。用它来评价交付使用的软件的质量并预测软件可靠性何时基本稳定。
⑤偶然故障率
一般以软件交付给使用方后的四个月后为偶然故障期。偶然故障率一般以每千小时的故
障数为单位,它反映了软件处于稳定状态的质量。
⑥使用方误用率
使用方不按照软件规范及说明等文件来使用而造成的错误叫“使用方误用”。在总使用
次数中,使用方误用次数占的百分率叫“使用方误用率”。造成使用方误用的原因之一是使
用方对说明理解不深,操作不熟练,但也可能是说明没有讲得非常清楚引起误解等。
⑦用户提出补充要求数
由于软件开发过程中未能充分满足用户需要,或者用户对软件开发时所提要求不全面,
软件开发使用后用户又提出补充要求,需要生产方对软件进行修改、完善。
3 软件可靠性模型
虽然软件可靠性与硬件可靠性有相似之处,都是用出故障的概率来表示的,但由于两者
间故障机理不同,因此可靠性模型也不一样。软件可靠性模型有很多种,下面介绍常用的三
类:
①从硬件可靠性理论导出的模型;
②根据程序内部特性得到的模型;
③用已知错误植入软件,经过测试、分析比较建立的可靠性模型。
第一种可靠性模型所做的假设是:
①在两次错误出现之间的调试时间随错误出现率呈现指数分布,而错误出现率和剩余错
误数成正比;
②每个错误一经发现,立即排除,并使错误总数减1;
③产生错误的速率是个常数。
对软件来说,上面假设的合理性可能还有问题,例如,纠正一个错误的同时可能不小心
而引入另一些错误,这样第②个假设将不成立。
第二种可靠性模型计算存在于软件中的错误的预期数目,根据软件复杂性度量函数导出
的定量关系,这种模型建立了程序面向代码的(如操作符的数目)与程序中错误的初始估计数
字之间的关系。
奈伯(Naib)在一项利用霍尔斯特德(Halstead)方法对软件出错率估算的研究中发现,环
境因素对软件出错率的影响最大,并找出了三个起决定作用的随机变量,即:
①使用过该软件的总用户数X ;
②当前用户人数Y ;
③当前用户中有过出错历史的用户数Z 。
X 、Y 、Z 为随机变量。这样软件出错率可表示为
X DY B Z
D
V
2 3 + + ⎟⎠
⎞
⎜⎝
⎛
其中: ( ) ( ) 1 2 1 2 2 2 2 1 2 V = η log η +η log η log η +η , 2
1 2
2η
η N D =
式中: 1 η——操作符个数; 2 η ——操作对象个数; 2 N ——操作对象使用次数; 3 B ——模
块个数。
经实验奈伯发现,该式的结果与实验值相关系数达0.92。
第三种可靠性模型是由D.Mills 首先提出的。这种方法一开始用来估算野外生活的动物
数或一个池塘内鱼的尾数。比如,要估算池塘内鲢鱼的尾数N ,可以先把带有标记的t N 尾
鲢鱼放入池塘,过一段时间后,从池塘中捕捉鲢鱼。数一数不带标记的鲢鱼有n 尾,带标记
的有t n 尾。如果这些带与不带标记的鲢鱼分散均匀,又比较合群,而且捕捉的难易度相同,
那么就可以求得N 为
t
t
N
n
N = n
植入模型就是在软件中“植入”已知的错误,并计算发现的植入错误数与发现的实际错
误数之比而开发出的模型。随机将一些已知的带标记的错误植入程序。设程序中尚未发现的
残留错误总数为N ,植入的错误总数为t N 。在历经一段时间的测试之后,总共发现有程序
的残留错误n 个和带标记的植入错误t n 个。假定植入错误和程序中的残留错误都可以同等
难易地被测试到,就可用上式求出程序中尚未发现的残留错误总数N 。但这种模型依赖于
测试技术。例如,如何判定哪些错误是程序的残留错误,哪些是植入带标记的错误,不是件
容易的事。而且植入带标记的错误有可能导致新的错误。
还有其他一些软件可靠性模型,例如外延式。绘制单位时间内已检测到错误数目的关系
曲线,然后用最小二乘法将曲线外延,以此来估计程序中尚残留的错误数目。
4 提高软件可靠性的途径
提高软件可靠性的根本途径是开展软件工程,减少软件缺陷。还应当:
①严格的配置管理。软件的配置管理能标识和确定系统中的配置项,在系统整个寿命期
内控制这些项目的投放与更动,记录并报告配置和更动要求,验证配置项的完备性和正确性。
它能够完成软件的配置标识,配置控制,配置记录,技术状态审计(审核)四项任务。严格的
配置管理是保证软件可靠性的重要措施之一。
②软件(模块)的标准化。对硬件产品来说,一般地说标准化程度越高,其质量与可靠性
也越高。软件也一样。软件标准件应由国家至少是部门来组织生产。这样软件的质量与可靠
性将会有明显的提高。
③软件可靠性设计准则。实践证明:总结国内外,特别是本部门、单位的成功或失败的
经验教训,制订并贯彻产品可靠性设计准则是提高产品可靠性的根本手段。对硬件产品如此,
软件也相同。硬件可靠性设计的很多思路与方法可用在软件之中。例如:
·FMEA,FTA 可以根据软件的特点具体化后加以应用;
·冗余技术。软件不能像硬件一样用几个完全相同的单元组成冗余,因为一错皆错。但
软件可使用具有相同功能,但算法及逻辑上都“相异”的技术,使用多版本编辑结构或恢复
块结构来构成冗余,提高系统的可靠性。
·由于计算机运行及信息传输中可能出错,因此,软件应有一定的抗拒硬件出错能力。
例如采用信息论中现成的检错码及纠错码;又如对关键及重要信息的编码应与其他信息编码
有足够的Hamming 距离(两码字X、Y 间的Hamming 距离d(X、Y)是码字X、Y 之间对应位取
不同值的码元数,如X=1100,Y=1011,则,d(X、Y)=3)。
·对以安全性为重点的计算机应有一个叫安全性内核的独立程序监视系统。在出现潜在
的不安全状态或有可能转移到不安全状态时,转入规定的状态。
④软件的设计评审。应像硬件一样建立严格的设计评审制度,使之成为把好软件质量关
的重要手段。为了防止软件可靠性设计评审走过场,制订“软件可靠性与可维护性的设计评
审检查单”是必要的,要按检查单逐项评审,审查软件是否严格按可靠性设计准则设计。