可靠性建模资料整理

软件可靠性建模

1 模型概述

1.1 软件可靠性的定义

1983年美国IEEE计算机学会对“软件可靠性”作出了明确定义,此后该定义被美国标准化研究所接受为国家标准,1989年我国也接受该定义为国家标准。该定义包括两方面的含义:

(1)在规定的条件下,在规定的时间内,软件不引起系统失效的概率; (2)在规定的时间周期内,在所述条件下程序执行所要求的功能的能力; 其中的概率是系统输入和系统使用的函数,也是软件中存在的故障的函数,系统输入将确定是否会遇到已存在的故障(如果故障存在的话)。

软件失效的根本原因在于程序中存在着缺陷和错误,软件失效的产生与软件本身特性、人为因素、软件工程管理都密切相关。影响软件可靠性的主要因素有软件自身特性、人为因素、软件工程管理等,这些因素具体还可分为环境因素、软件是否严密、软件复杂程度、软件是否易于用户理解、软件测试、软件的排错与纠正以及软件可靠性工程技术研究水平与应用能力等诸多方面。

1.2 软件可靠性建模思想

建立软件可靠性模型旨在根据软件可靠性相关测试数据,运用统计方法得出软件可靠性的预测值或估计值,下图给出了软件可靠性建模的基本思想。

图软件可靠性建模基本思想

从图中可以看出软件失效总体来说随着故障的检出和排除而逐渐降低,在任意给定的时间,能够观测到软件失效的历史。软件可靠性建模的目标如下:(1)预测软件系统达到预期目标所还需要的资源开销及测试时间;(2)预测测试结束后系统的期望可靠性。

1.3 软件可靠性建模基本问题

软件可靠性建模需要考虑以下基本问题: (1) 模型建立

模型建立指的是怎样去建立软件可靠性模型。一方面是考虑模型建立的角度,例如从时间域角度、数据域角度、将软件失效时刻作为建模对象,还可以将一定时间内软件故障数作为建模对象;另一方面是考虑运用的数学语言,例如概率语言。

(2) 模型比较

在软件可靠性模型分类的基础上,对不同的模型分析比较,并对模型的有效性、适用性、简洁性等进行综合权衡,从而确定出模型的适用范围。

(3) 模型应用

软件可靠性模型的应用需要从以下两方面考虑:一是给定了软件的开发计划,如何选择适当的模型;二是给定了软件可靠性模型,如何指导软件可靠性工程实践。

软件系统的失效历史可以通过对测试得到的失效数据分析获得,而实际情况中,人们最为关注的是软件未来的失效趋势。软件可靠性模型基本都是建立在一定的假设基础之上,所以,即使花费了大量的时间和精力对软件的可靠性进行预计,也只是一种预测,这种预测的不确定性是许多未知原因交互作用的结果,根据软件可靠性模型的预测只能以概率形式表示。

1.4 软件可靠性模型的特点

(1) 与使用的程序设计语言无关。软件可靠性的应用与选用什么程序设计语言来编写软件之间没有什么直接关系。但对于根据同一个规格说明书,不管你用什么程序设计语言软件来编写软件,同一个软件可靠性模型应给出同样的估测结果。

(2) 与具体用到的软件开发方法无关。软件开发是一个十分复杂的过程,涉及到许多的人为因素,从而使得对软件的质量难以进行预测。为了保证预测的精度,不妨假设待估测的软件系统是用最坏的软件开发方法开发出来的。

(3) 测试方法的选择问题。实际上是无法通过彻底的测试来获得完全可靠的软件,所以不得不采用有限的测试,那么目标就是用最少的测试以求最大限度的软件可靠性。

可以用例如边界值测试法、分类测试法、路径测试法等方法来达到。几乎所有的软件可靠性模型都假定测试环境就是将来软件的运行环境,这限制了高可靠性估计情况下的这些模型的可用性。

(4) 改错过程。实际上改正老的错误时往往会引人新的错误。

(5) 模型要表述的内容。模型应该指出测试的输入是否已足够地覆盖了输入域,测试的条件和数据是否已准确地模拟了操作系统、是否已足以查出那些类似的错误等。软件可靠性模型假定测试的条件和数据与操作环境有着同样的分布,也就简捷地假设了上述要表述的内容。

(6) 输入的分布问题。可靠性估计紧密地依赖于模型假设的输入分布。作为一个极端的情况,如果输入是一个常数(比如说只用到一个输入),软件将或者出错或者成功的执行,于是就给出可靠性相应地为 0 或为 1。

(7) 关于软件复杂性问题。大多数现有的软件可靠性模型都没有考虑这个问题。实际上,复杂的软件应该比简单的软件要求更多的测试。

(8) 模型的验证问题。常常由于缺乏实际可用的足够数据,使得对模型的验证无法进行,且在整个软件寿命周期内,软件几乎呈常数倍数地增加,导致可靠性也相应地变化,软件可靠性的验证工作也就更加复杂化。

(9) 关于时间问题。在软件可靠性量测与硬件可靠性量测综合起来对一定的系统环境进行考核时,将 CPU 时间作为时间单位是必要的。

(10)

考虑模型所要求的数据是否容易收集。否则,由于数据问题,将会限制软

件可靠性的应用范围。

1.5 软件可靠性模型的分类

到目前为止,软件可靠性模型的研究已有 40 多年的历史,国内外已发表的软件可靠性模型有近百种,但由于对软件可靠性模型的研究还处在一个初步阶段,目前并没有一个完整、系统的科学分类方法。为了从宏观上研究、掌握和理解这些模型,不少学者提出不同的分类方法。

(一)根据建模对象分类

根据建模对象将模型分为两种:静态模型和动态模型,如图:

图根据建模对象分类

1、静态模型

静态模型的建模对象是与运行时间无关的数据或信息,如软件的各种复杂性参数,特点是不需要进行软件测试即可进行软件缺陷估计,应用与软件开发的早期阶段。随着软件可靠性设计逐渐被重视,这种模型的重要性也体现出来。

2、动态模型

动态模型的建模对象主要是与运行时间相关的数据或信息。如Shooman模型、Jelinski-Moranda模型、Schick-Wolverton模型,Musa 执行时间模型、G-O 模型、Moranda几何Poission模型。

(二)根据模型假设分类

根据模型假设将模型分为随机过程模型和非随机过程模型,如图所示。

图依据模型假设分类

1、随机过程模型

(1)马尔科夫过程模型

这类模型认为在t 时刻,软件系统的失效过程是一个马尔科夫过程。有代表性的模型有Jelinski-Moranda模型,Schick-Wolverton模型。 (2)非齐次泊松过程模型

这类模型把时间划分为0,t1,t2,…t??时间间隔,每个间隔内发现的失效数是泊松随机

联系客服:779662525#qq.com(#替换为@)