软件可靠性指标的云表示及传统软件可靠性模型的局限性和改进
扫描二维码
随时随地手机看文章
本篇介绍几个主要的软件可靠性指标及其云模型表示,并在不同的论域上基于云模型定义软件可靠性的概念划分,最后提出基于云对传统软件可靠性模型进行改进的方法。
一、软件可靠性指标的云表示
1.可靠度
传统软件可靠度是指软件在规定的条件下、规定的时间段内完成预定的功能的概率,或者说是软件在规定时间内无失效发生的概率。设随机变数T表示从软件运行时间(t=0)开始到系统失效所经历的时间,则在时刻t的软件可靠度
R(t)=P{T>t},
不可靠度或称为失效分布函数
F(t)=1-R(t)。
对要求在规定时间内能无失效工作比较高的系统,可选可靠度作为软件可靠性参数,如工业过程控制系统软件。
语言原子值的云的数字特征为(Ex,En,He);当云的熵和超熵均为0,即其数字特征为(Ex,0,0),则云就是某个精确数值Ex;当云的超熵为0,即其数字特征为(Ex,En,0),则云可以看成是模糊集理论意义下的模糊数。可见,定性语言原子值的云表示具有普遍意义,精确数值和模糊数均可理解为云表示的特例。
下面,对应于软件可靠度和软件不可靠度,我们给出基于云模型的定义方式。
软件在规定的条件下和规定的时间内,完成规定功能的可能程度称为云可靠度,用定义于软件可靠度域[0,1]的虚拟云R^~表示。
软件在规定的条件下和规定的时间内,不能完成规定功能的可能程度称为云不可靠度,用定义于软件不可靠度域[0,1]的虚拟云F^~表示。
2.失效率和失效强度
如果F(t)是可微的,则还可获得软件在t时刻的失效概率,即失效密度函数
软件失效率(Failure Rate),又称之为风险函数(Hazard Function),表示软件在时刻t没有发生失效的条件下,单位时间内(即在(t,t+Δt)区间内,当Δt很小时)发生失效的概率,即
假设软件在t时刻发生的失效数为N(t),显然N(t)是一个随机数,且随时间t的变化而不同,即{N(t),t>0}为一随机过程。设H(t)为随机变量N(t)的均值,即有
H(t)=E[N(t)],
则
h(t)=H′(t)
为t时刻的失效强度(Failure Intensity)。
从定义可以看出,失效率和失效强度是两个不同的概念,失效率的定义和硬件可靠性中瞬时失效率的定义是完全一致的,是基于寿命的观点给出的,它是一个条件概率密度。而失效强度则是基于随机过程定义的,是失效数均值的变化率。
可以证明,如果在稳定使用软件,且不对软件作任何修改的条件下,软件的失效强度应为一常数值。事实上,在这种情况下,{N(t),t>0}为一齐次泊松过程(HPP过程),或者称失效时间服从参数为λ的指数分布,任一时间点上的失效率都为λ。
如果在测试或使用中,对发生的错误采取纠正措施,且不引入新的错误,那么随着测试和错误纠正的交替进行,失效率/失效强度应呈现下降趋势,相应地,可靠性应呈现增长趋势。如果随着测试和错误纠正的不断进行,失效率/失效强度呈现增长趋势,则说明软件测试和错误纠正可能存在着以下问题:例如由于错误纠正引入了更多的错误,从而导致更频繁的失效;非均匀测试等。
如果仅就一个软件给出软件可靠性要求,选择失效率或失效强度作为可靠性参数都是可以的,但是由于增长模型常常直接给出失效强度的变化规律,因此选用失效强度作为参数可能更直接一些,而选用失效率则还要进行转换。目前,美国的AT&T公司在软件开发中就使用失效强度作为参数加以控制。
在确定可靠性要求时,如果软件可靠性是系统可靠性要求的一部分,则选择失效率参数比较合适,因为它不仅和硬件的概念是一致的,而且也是硬件中常用的可靠性参数,这样便于理解和进行系统综合。当然,在可靠性增长预计过程中,由于我们常常得到的是失效强度的变化规律,因此如果给出的是失效率指标要求的话,则应把失效率指标要求转换为失效强度指标要求,这种转换随模型的不同而不同。
失效率/失效强度适用于失效发生频率较低的系统,比如操作系统、民用电话交换系统等。
据文献,高可靠性软件的失效率要求小于10^-7/h,一般可靠性软件的失效率介于10^-7/h到10^-3/h之间,低可靠性软件的失效率则大于10^-3/h。
为反映软件失效的不确定性,可分别用虚拟云λ(t)^~,h(t)^~表示软件失效率、失效强度。
3 .平均失效前时间和平均失效间隔时间
软件的平均失效前时间MTTF(Mean Time To Failure)指软件在失效前正常工作的平均统计时间。MTTF和软件可靠度存在函数关系
软件的平均失效间隔时间MTBF(Mean Time Between Failures)指软件在相继两次失效之间正常工作的平均统计时间。在失效率为常数λ的情况下,可得MTBF=1/λ。
MTTF和MTBF的主要差异在于研究的时间对象是TTF还是TBF。TTF是指从当前时间开始运行软件到出现下次失效的时间,而TBF是指上次失效到下一次失效的时间间隔,该时间间隔严格的说,除了包括重新启动系统直到下一次发生失效的时间外,还应包括重新启动系统之前的诸如失效处理等工作时间。但这一部分时间在整个程序运行时间中一般占相当小的比例,如果不考虑这一部分工作时间的话,TTF和TBF是完全一致的。事实上,目前MTBF和MTTF的使用都比较多,并未加以特别的区分。对于失效率为常数和系统恢复正常时间很短的情况下,MTBF与MTTF几乎是相等的。
对于系统云平均失效前时间,用定义于软件MTTF域[0,+∞)的虚拟云MTTF~表示。对于云平均失效间隔时间,用定义于软件MTBF域[0, +∞)的虚拟云MTBF~表示。
4.软件可靠性指标的概念划分
一般地,自然语言中可用“很低”、“低”、“一般”、“高”、“很高”等五个语言值来表示软件在规定的条件下和规定的时间段内完成预定的功能的可能性的大小,或者说作为软件可靠性这个语言变量的取值范围。我们称包含这五个语言值的集合构成一个软件可靠性评价概念集,记为Re1。根据具体问题的要求还可约定更细的语言值集合作为系统可靠性评价集,记为Re2,即“极低”、“非常低”、“很低”、“低”、“较低”、“一般”、“较高”、“高”、“很高”、“非常高”、“极高”等十一个语言值;当然还可以更粗,记为Re3,即“低”、“一般”、“高”等三个语言值。这三个概念集Re2,Re1,Re3对应不同的抽象层次,其概念粒度是依次增加的。
显然,这些词之间不存在明确的界线,往往存在含混的“重叠区”。因此,从定量的角度,我们也需要考虑对软件可靠性水平实现类似自然语言的软性划分。由于云模型是一种可以有效实现语言值表示的定性概念与其定量表示之间不确定性转换的模型。我们尝试应用云模型,赋予不同的软件可靠度(或其他软件可靠性指标)以随机的确定度,来统一刻画软件可靠性评价的不同语言值中的随机性、模糊性及其关联性。通常采用云变换方法根据软件可靠性的不同指标域中数据值的分布情况,自动生成一系列由云模型表示的基本概念,实现对论域的软划分。
以软件可靠度为论域,软件可靠性评价的概念集Re1和Re2可分别用图1中的两个云滴图来直观表示。从图中可见,不同概念之间有着明显的区别,但又不存在明确的界线来严格划分。同一层次中各个概念之间的区分不是硬性的,允许一定的交叠,相同的属性值可能分属不同的概念,不同属性值对概念的贡献程度也不同。特别在其中的一些交界处,比如Re2,当软件可靠度为0.86时,也许某个专家会判断软件的可靠性“非常高”了,但也有人会认为只是“很高”而已,云滴确定度的随机性恰好能够反映这种现象。在重叠区中同一个属性值在不同的情况下可能会分配给不同的云,这与人类认知过程中的分类情况显然是吻合的。若用模糊数学中的隶属函数(如正态分布曲线,三角形或梯形分布曲线)来表示这些模糊概念,如图2所示。根据最大隶属度原则总会给出唯一的判定——软件可靠性“非常高”,从这点而言,模糊数学彻底地走向了精确数学,不再有丝毫模糊可言。
图1软件可靠性评价概念集的云图表示
图2 软件可靠性评价概念集的模糊数学表示
若我们得到了软件可靠度(或其他软件可靠性指标)的虚拟云表示,给定置信水平1-α后,可使用Y条件云发生器计算系统可靠度的下限值。为获得该系统的定性评价,以虚拟云的期望为输入值,使用X条件云发生器计算对应概念评价集中不同语言值的确定度,最后根据隶属概念的极大判定法选择最合适的语言值。
二、传统软件可靠性模型的局限性及其改进
1.传统软件可靠性模型
软件可靠性工程中的重要研究内容就是软件可靠性建模,其目的是根据与软件可靠性有关的数据,以统计方法给出软件可靠性的估计值或预测值。软件可靠性模型是软件可靠性定量分析技术的基础。以软件可靠性模型为支撑的软件可靠性定量分析技术,在软件开发过程中具有重要的作用。
对于软件可靠性研究中所使用的可靠性模型,根据模型的建模对象与时间的关系可分为两大类型:一类是可靠性预计模型,另一类是可靠性结构模型。
软件可靠性预计模型即黑盒模型,此类模型将与运行时间有关的信息或数据作为主要的研究对象,本质上属于描述软件失效数与测试执行时间之间关系的模型。若错误能完全排除,且不引入新的错误,则该类模型亦称为软件可靠性增长模型(Software Reliability Growth Model,简称为SRGM)[83]。借助这类模型,可以对软件的可靠性特征作出定量的预计(Prediction)或估计(Estimation)。例如,可以预计或估计软件在预定工作时间的可靠度,预计软件在任意时刻发生失效的平均值、软件在规定的时间间隔内发生失效次数的平均值、软件在任意时刻的失效率、软件失效时间间隔的概率分布和软件预期的交付时间等。估计和预计是两个有区别又有联系的概念。估计是指对软件现有的可靠性水平作出评价。预计是对软件未来的可靠性特征进行预测。预测未来的前提是认识现状,所以二者难以截然分开。软件可靠性估计和软件可靠性预计总称为软件可靠性评估(Evaluation)。必须指出,在使用数学模型进行预测时,蕴涵的假定是,事物发展规律在未来的一段时间内保持不变。对于短期预测,这个假设是合理的。但是,随着预测期的延长,其近似性减弱。用可靠性模型进行预计时,为了得到较准确的结果,如果发现软件的失效规律有明显改变,必须对参数加以修正或重新收集失效数据,重新确定模型参数。
对于已经交付使用的程序,用户一般不具有独立排错能力,只能将失效数据情况通知承制方,经过承制方分析、更正后,统一发出改错通知或程序的修改版本。程序在正式更改之前可认为模型参数保持不变。对于处于测试阶段的程序,程序错误不断排除。模型参数应及时调整,这时失效率函数是不连续的阶梯形线段。
软件可靠性结构模型即白盒模型,此类模型不考虑与运行时间直接相关的信息或数据,而根据软件自身特点和各组成部分的不同可靠性通过判断系统结构逻辑关系来对系统整体可靠性作出评估。软件可靠性结构模型是软件系统可靠性分析的重要工具,既可以用于软件系统的可靠性综合,也可用于软件系统的可靠性分解。
2.传统软件可靠性模型的局限性分析
目前许多可供实际使用的软件可靠性模型,其共同特点就是每一个模型的理论基础都建立在不同的统计假设之上。这些假设是软件可靠性模型建立的主要依据,也是全部软件可靠性分析和评估的理论基础和先决条件。由此可见,模型的成功与否,与模型的基本假设有着很大的关系。模型假设的局限性太多,势必影响到它们的应用范围。目前,对于软件可靠性模型的诸多疑虑,也多半来自于此。从具体工程实践的角度而言,软件可靠性模型越简单越好,模型假设越接近现实越好,但不幸的是,这二者之间的矛盾很难平衡。
通过对数种软件可靠性模型假设进行分析研究,其中的假设主要包括下几个方面的内容:
(1)关于软件中初始错误数N0的描述;
(2)关于软件中失效率λ(t)的描述;
(3)关于软件失效间隔时间的描述;
(4)关于软件剩余错误数的描述;
(5)关于软件排错方面的描述;
(6)关于软件测试方面的描述。
传统软件可靠性模型的假设往往与软件开发实际不相符合,有的模型总是假定失效过程一定服从某一个经典概率分布,比如说二项分布或泊松分布,但是失效过程到底是否服从某一经典分布是不能肯定的。另外有的模型总是假定失效强度曲线按某一预定规律变化,比如G-O模型认为失效强度是按指数衰减的,J-M模型则认为失效强度是几何衰减的。这样,模型当然就不可能有很高的精度,只能碰运气。当某一工程项目的失效强度碰巧是指数型的或是几何衰减型的时候,它们的精度显得很好,一旦换一个工程项目,当它的失效强度不按这些规律变化时,这些模型的精度就很糟糕。
下面通过两条实例来讨论模型假设的局限性。
假设1:软件排错不引入新的错误。即认为软件修改总是完美的,这与软件开发实际不相符合。许多现存模型(特别是那些早期的软件可靠性模型),考虑到排错引入新的错误会使问题复杂化,于是假设排错不引入新的错误。这样做的结果虽然使理论上的处理简单明了,但与实际情况相距太远。软件的开发靠人完成,且排错问题由人工完成,人类行为的不可预测性无论在开发还是排错一个软件,同样要表现出来。事实上,由于排错时的某些处置失当,往往会产生许多副作用,引入一些始料不及的新错误。这些新的错误的发生率有可能比先前更正过的那些错误要高,因此系统的可靠性可能变得更坏而不是更好。这也正好解释了我们观察记录软件中出现的错误时,错误数为什么经常会大幅度地振荡。引入新的错误,另一方面的原因还在于软件产品各模块(指结构化的软件产品而言)间的逻辑关系错综复杂、互为因果,故而使得局部的某些改动甚至可能产生牵涉全局性的许多问题。
假设2:软件的失效率为常数。此假设与软件开发实际也不太相符合,局限性很大,根据实际的观察,不同错误的发生率因人而异,变化也很大。那些将所有错误处理成具有相同出现率的模型是十分不现实的。理论证明也表明,这样做的结果,必然会产生乐观的估计偏差。另一方面,对具体错误不加区分,我们实际观察到的结果,也显示出失效率不可能为常数。一般而言,在系统测试的初期,错误是多发性的,而且可能有大幅度地振荡。究其原因,在于测试初期,软件产品未经过充分排错,而在系统测试的后期,软件产品经过了较充分的排错以后,失效率自然也就随之下降了。
3.传统软件可靠性模型的改进思路
传统软件可靠性模型往往都是根据失效数据给出参数或某个可靠性指标(为叙述方便,不妨都记为θ)的一个估计数值,而不同的样本给出的点估计值是不同的,即使是同一样本,不同的点估计统计量计算的估计值也不同。区间估计方法考虑了点估计的随机性,给出的置信区间[θL,θU]是在一定置信水平1-α要求下的区间,区间的上限θU、下限θL分别称为置信上限和置信下限,公式表达即
P{θL≤θ≤θU}=1-α,
上式表明该置信区间包含θ真值的概率为1-α,其中:α是事先选定的,我们常取0.1,0.05,0.01等作为α的值。置信区间能被表示为双侧或者单侧置信区间。用双侧界限值表示在一定的置信度下这个区间的大小。用单侧界限值表示在一定的置信度下的置信上限或置信下限。根据应用情况,来选择单侧或者双侧区间。例如,分析者在可靠度方面用单侧置信下限,在失效率方面用单侧置信上限估计,并且用双侧置信区间来估计分布参数。
相应地,在模糊数学中,可用模糊区间数[θL,θU]/(1-α)、模糊中心数((θL+θU)/2,(θU-θL)/2)/(1-α)或者三角形模糊数(θL,(θL+θU)/2,θU)等方法来表示θ可能的取值范围。显然,θ真值落在置信区间中的可能性是不同的,尽管三角形模糊数(或者正态模糊数)假定一个简单精确的隶属函数来描述θ取值的隶属度,但不能反映隶属度的随机性,即不同人对不确定信息的认识存在的差异性。
为了反映可靠性评估模型中θ的随机性和模糊性,我们可以用定义于相应论域上的云C(Ex,En,He)来表示θ可能的取值范围,其中:
一般地,若得到软件可靠性指标的置信区间,则可直接通过上述公式计算得到相应软件可靠性指标的虚拟云表示,进而可获得软件可靠性的定性评价。
下面具体分析下公式中He取值的物理意义。He是熵En的离散程度,即熵的熵,它反映了每个数值隶属这个语言值程度的凝聚性,即云滴的凝聚程度。由于熵反映了在论域中语言值可被人们接受的范围,而超熵He又是熵的熵,若He/En=α小,也就是说置信水平(1-α)高,由正向云发生器可知,随机熵En(的变化就小,表明人们对定性概念的每一个量值隶属于此定性概念的程度在认识上是比较一致的;相反,若He/En=α大,也就是说置信水平(1-α)低,随机熵En(的变化就剧烈,表明人们对定性概念的每一个量值隶属于此概念的程度在认识上有比较大的分歧,由此反映出人们对此定性概念在论域中被接受的范围有多大在认识上是不一样的。
长按二维码识别关注我们
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!