-
v1.0
可编辑可修改
软件可靠性建模
1
模型概述
1.1
软件可靠性的定义
1983
年美国
IEEE
计算机学会对“软件可靠性”作
出了明确定义,
此后该定义被美国
标准化研究所接受为国家标准
,
1989
年我国也接受该定义为国家标准。该定义包括两方<
/p>
面的含义:
(
1
)在规定的条件下,在规定的时间内,软件不引起系统失效的概率;
< br>
(
2
)在规定的时间周期内,
在所述条件下程序执行所要求的功能的能力;
其中的概率是系
统输入和系统使用的函数,
也是软件中存在的故障的函数,
系统
输入
将确定是否会遇到已存在的故障(如果故障存在的话)
。<
/p>
软件失效的根本原因在于程序中存在着缺陷和错误,软件失效的
产生与软件本身特
性、人为因素、软件工程管理都密切相关。影响软件可靠性的主要因素
有软件自身特性、
人为因素、软件工程管理等,这些因素具体还可分为环境因素、软件是
否严密、软件复杂
程度、
软件是否易于用户理解、
软件测试、
软件的排错与纠正以及软件可靠性工程技术研
究水平与应用能力等诸多方面。
1.2
软件可靠性建模思想
建立软件可靠性
模型旨在根据软件可靠性相关测试数据,
运用统计方法得出软件可靠
性的预测值或估计值,下图给出了软件可靠性建模的基本思想。
1
v1.0
可编辑可修改
图
软件可靠性建模基本思想
从图中可以
看出软件失效总体来说随着故障的检出和排除而逐渐降低,
在任意给定的
时间,能够观测到软件失效的历史。软件可靠性建模的目标如下:
(
1
)预测软件系统达到
预期目标所还需要的资源开
销及测试时间;
(
2
)预测测试结束后
系统的期望可靠性。
1.3
软件可靠性建模基本问题
软件可靠性建模需要考虑以下基本问题:
(
1
)
模型建立
模型建立指的是怎样去建立
软件可靠性模型。一方面是考虑模型建立的角度,例如从
时间域角度、
< br>数据域角度、
将软件失效时刻作为建模对象,
还可以将一
定时间内软件故障
数作为建模对象;另一方面是考虑运用的数学语言,例如概率语言。<
/p>
(
2
)
模型比较
在软件可靠性模型分类的基
础上,
对不同的模型分析比较,
并对模型的有效性、
适用
性、简洁性等进行综合权衡,从而确定出模型的适用范围。
(
3
)
模型应用
软件可靠性模型的应用需要
从以下两方面考虑:
一是给定了软件的开发计划,
如何选
择适当的模型;二是给定了软件可靠性模型,如何指导软件可靠性工程实践。
< br>
软件系统的失效历史可以通过对测试得到的失效数据
分析获得,
而实际情况中,
人们
最为关
注的是软件未来的失效趋势。软件可靠性模型基本都是建立在一定的假设基础之
上,所以
,即使花费了大量的时间和精力对软件的可靠性进行预计,也只是一种预测,这
2
v1.0
可编辑可修改
种预测的不确定性是许多未知原因交互作用的结果,
根据软件可靠性模型的
预测只能以概
率形式表示。
1.4
软件可靠性模型的特点
(
1
)
p>
与使用的程序设计语言无关。软件可靠性的应用与选用什么程序设计语言来
< br>编写软件之间没有什么直接关系。但对于根据同一个规格说明书,不管你用什么程序设
计语言软件来编写软件,同一个软件可靠性模型应给出同样的估测结果。
(
2
)
p>
与具体用到的软件开发方法无关。软件开发是一个十分复杂的过程,涉及到
< br>许多的人为因素,从而使得对软件的质量难以进行预测。为了保证预测的精度,不妨假
设待估测的软件系统是用最坏的软件开发方法开发出来的。
(
3
)
p>
测试方法的选择问题。
实际上是无法通过彻底的测试来获得完全可靠
的软件,
所以不得不采用有限的测试,那么目标就是用最少的测试以求最大限度的软件可
靠性。
可以用例如边界值测试法、分类测试法、路径测试法等方法来达到。几乎所有的软
件可
靠性模型都假定测试环境就是将来软件的运行环境,这限制了高可靠性估计情况下的
这
些模型的可用性。
(
4
)
改错过程。实际上改正老的错误时往往会引人新的错误。
(
5
)
p>
模型要表述的内容。模型应该指出测试的输入是否已足够地覆盖了输入域,
< br>测试的条件和数据是否已准确地模拟了操作系统、是否已足以查出那些类似的错误等。
软件可靠性模型假定测试的条件和数据与操作环境有着同样的分布,也就简捷地假设了
上述要表述的内容。
(
6
)
p>
输入的分布问题。可靠性估计紧密地依赖于模型假设的输入分布。作为一个
< br>极端的情况,如果输入是一个常数(比如说只用到一个输入)
,软件将或者出错或
者成功
的执行,于是就给出可靠性相应地为
0
或为
1
。
(
7
)
p>
关于软件复杂性问题。大多数现有的软件可靠性模型都没有考虑这个问题。
< br>实际上,复杂的软件应该比简单的软件要求更多的测试。
(
8
)
p>
模型的验证问题。常常由于缺乏实际可用的足够数据,使得对模型的验证无
< br>法进行,且在整个软件寿命周期内,软件几乎呈常数倍数地增加,导致可靠性也相应地
变化,软件可靠性的验证工作也就更加复杂化。
3
v1.0
可编辑可修改
(
9
)
p>
关于时间问题。在软件可靠性量测与硬件可靠性量测综合起来对一定的系统
< br>环境进行考核时,将
CPU
时间作为时间单位是必要的。
(
10
)
<
/p>
考虑模型所要求的数据是否容易收集。
否则,
由于数据问题,
将会限制软
件可靠性的应用范围。
1.5
软件可靠性模型的分类
到目前为止,
软件可靠性模型的研究已有
40 <
/p>
多年的历史,
国内外已发表的软件可
靠性
模型有近百种,
但由于对软件可靠性模型的研究还处在一个初步阶段,
< br>目前并没有一
个完整、系统的科学分类方法。为了从宏观上研究、掌握和理解这些
模型,不少学者提出
不同的分类方法。
(一)根据建模对象分类
根据建模对象将模型分为两种:静态模型和动态模型,如图:
图
根据建模对象分类
1
、静态模型
静态模型的建模对象是与运行时间无关的数据或信息,
如软件的各种复杂性参数,
p>
特
点是不需要进行软件测试即可进行软件缺陷估计,
应用与软件开发的早期阶段。
随着软件
可靠性设计逐渐
被重视,这种模型的重要性也体现出来。
2
、动态模型
动态模型的建模对象主要是与运行时间相关的数据或信息。如
Shooman
模型、
Jelinski-Moranda
模型、
Schick-Wolverton
模型,
Musa
执行时间模型、
G-O
模型、
Moranda
几何
Poission
模型。
(二)根据模型假设分类
4
v1.0
可编辑可修改
根据模型假设将模型分为随机过程模型和非随机过程模型,如图所示。
图
依据模型假设分类
1
、随机过程模型
< br>(
1
)马尔科夫过程模型
这类模型认为在
t
时刻,软件系统的
失效过程是一个马尔科夫过程。有代表性的模
型有
Jelinski-Moranda
模型,
Schick-
Wolverton
模型。
(
p>
2
)非齐次泊松过程模型
这类模型把时间划分为
变量,代表性的模型有
G-O
模型。
(
3
)
Musa
执行时间模型
这类模型以
CPU
时间为标准描述
软件系统的可靠性,
建立
CPU
时
间与日历时间,
程
序的可靠性特征与测试过程资源消耗的关系。
2
、非随机过程模型
(
1
)贝叶斯类模型
这类模型中有代表性的是
L-V
模型。
(
2
)种子法模型
其思想是事先在软件中植入一定数量的缺陷植,
收集到的缺陷包含植入的和软件本身
的,用它们之间数量关系估算软件系统的缺陷数,即动态模型中的缺陷播种模型。
(
3
)基于数据域
的模型
5
时间间隔,每个间隔内发现的失效数是泊松随机
v1.0
可编辑可修改
这类模型的代表是
1973
年提出的
Nelson
模型。
(
4
)其他方法
其他的模型还有非参数分析、时间序列分析模型等模型。
(三)根据故障过程的特性分类
Amrit
将模型分为
4
类:
1
、故障间隔时间模型
这类模型研究的是故障的间隔时间。最常用的方法是假设第
i
-1
个和第
i
个故障之
间的时间服从某种分布,
从观
测到的间隔时间来估计参数,
进而估计软件可靠性和故障间
隔时
间
MTBF
(
Mean Time
Between Failure
)等软件性能度量。
2
、故障计数模型
< br>这类模型关注的是一定时间间隔内发生故障的次数,
假定故障计数服从一种已知的
随
机过程。可以通过观测的故障数或失效时间估计失效率参数,
NHPP
类软件可靠性增长模
型属于这类模型。
3
、故障播种模型
这类模型类似于种子法模型。
4
、基于输入域模型
根据程序的使用情况从输入情况的分布生成一组测试用例。<
/p>
由于获得这个分布比较困
难,
所以一般把
输入域划分为几个有代表性的等价类,
每个等价类都与一个程序路径有关。
从执行这些从输入域抽取的测试用例,观测软件故障数,从而估计软件可靠性。
(四)
Trivedi
分类及其他分类
Kishor
划分模型方法如图所示
6
v1.0
可编辑可修改
图
2
图
Trivedi
分类软件可靠性模型
其他常用的软件可靠性模型分类方法还有
Musa
和
Okumoto
给出的基于模型
五种不
同属性的模型分类方法和
Hoang Pham
给出的分类体系。
2
常见的软件可靠性建模模型
软件可靠性解析模型
软件可靠性解析
模型主要通过对软件失效数据行为进行假设,
并在该假设的基础上依
靠数学解析方法对软件可靠性进行建模。该类模型可分为指数模型、对数模型、
Li
ttlewood-Verrall
模型、数据域模型、
Mar
kov
链模型、随机
Petri
网模型
等。
2.1.1
指数模型
(
1
)
J-M
模型
J-M
软件可靠性模型于
1972
年由
Jelinski
和
Moranda<
/p>
创建,
属于二项分布有限错误
模型。其基
本假设如下:
1)
测试未运行时软件失效为
< br>0
;当测试进行时,软件错误将被
检出,
其失效率函数与软件当前的残留故障数成正比;
同时,
软件中存在的总故障数是固
定的;
2)
失效率在每个失效间隔内是常数,
其数值正比于残留的错误数;
3)
软件错误引
发的故障是相互独立的;
< br>4)
每次只修正一个错误,且当软件故障出现时,引发故障的错
误将被立即排除,并不会引入新的错误。
J-M
模
型
中
软
件
第
i
次
失
效
强
度
函
数
为
软件中
错误总数,
为失效率。
J-M
模型软件
可靠性函数为:
=
=
,其中
为
J-M
模型以一种较为简单的方式,将软件故障视为测试时间的函数,主要缺点在于假
设条件过于理想,实际情况中很难满足。
(
2
)
G-O
模型
Goel-Okumoto
软件可靠性模型
(G-O
模型
)
于
1979
年由
Goel
和
p>
Okumoto
提出,属于
7
v1.0
可编辑可修改
NHPP
有限错误模型,
其基本假设如下:
1)
测试未运行时的软件失效为
0
;
当测试进行时,
软件失效服从均值为
的泊松分布;
2)
当
时
,
测试时
间
内产生
的失效与软件残留错误成正比;
3)
对于任一组有限时间点,在对应时间段分别发生的失
效
次数相互独立;
4)
每次只修正一个错误,当软件故障出现时
,引发故障的错误被立即
排除,并不会引入新的错误。
G-O
模型在测试区间
内的累计失效数期望函
数为
,
为软件
累计测试时间。可靠性函
数为:
=
(
3
)
Musa
基本执行时间模型
Musa
基本执行时间软件可靠性模型
(Musa
模型
)
中,
软件测试时间使用了更为精确的
CPU
占用时间作为度
量基础,并给出了
CPU
时间与日历时间的转换关系,但软件由
于运行
环境的差异导致
CPU
执行时间
可能大不相同。
(
4
)
超指数增长模型
超指数增长模型对经
典指数模型进行了扩展,属于
NHPP
有限错误模型。由于编程
人
员的差异、
新旧代码的差异、
实现语
言的差异等因素导致了软件不同部分的失效率各有不
同,因此软件的不同部分将分配不同
的失效率
。超指数增长模型可用于拥有新模块和重
用模块的复杂系统中。超指数增长模型在测试区间
式中
,
表示具有相似特征模块构成的簇数量;
表示在第
个簇中存在的错误总数;
表
< br>内的累计失效数期望函数为:
示在第
个簇的失效率。该模型在应用中如何确定大型复杂系统中模块簇的划分是该模型
的关键问题之一。
(
5
)
S-Shape
模型
S-Shape
模型主要分为
Yamada
Delayed S-Shaped
模型和
Inflected
S-Shaped
模型。
S-Shape
模型使用
Gamma
分布取代了
G-
O
模型的二项分布,属于
NHPP
有限
错误模型。
S-Shape
模型认为错误发现曲线应该体现出两
个特征:
1)
软件测试者对测试软件的了解
< br>程度;
2)
软件残余缺陷随测试过程的进行,其发现难度变得越来越大。
8
v1.0
可编辑可修改
Yamada
Delayed
S-Shaped
模
型认为软件失效在测试开始时增大,
在测试结束时减小。
在该模
型中,
软件失效数据随测试时间呈
S
曲
线变化,
体现出由于测试初期测试者对测试
对象的不熟悉以及测
试后期失效数据难于发现导致失效发现率下降这一现象。
Yamada
Delayed
S-Shaped
模型在测试区间
式中,
表示最终被检测出的失效总数的期望值;
表示失效率。
Inflection
S-Shaped
模
型
认<
/p>
为
错
误
发
现
率
在
整
个
测
试
周
期
中
呈
现
递
增
的
趋
势
。
Inflection S-Shaped
模型在测试区间
内的累计失效数期望函数为:
式中
,a
表
示最终被检测出的失效总数的期望值;
b
表示失效率;
r
表示可以检测的失效数
占软件系统总失效数
的比例。
内的累计失效数期望函数为:
2.1.2
对数模型
(
1
)
Geometric
模型
Geometric
模型属于对数无限错误模型,其基本假设如下:
1)
失效发现率随软件检
测过程递减;
2)
系统中错误是无限的。
该模型认为较
早发现的错误对失效发现率的影响大于较晚发现的错误,
其错误发现间
< br>隔时间为指数分布,错误发现间隔时间密度为
为第
i
p>
个失效数据发送时的观测数据
.Geometric
模型中从第
第
个错误的期望时间为
:
期望函数为:
式中
,
。<
/p>
Geometric
模型在测试区间
,其
中
和
为常量参数,
< br>个错误开始,发现
内的累计失效数
(
2
)
Musa-
Okumoto
对数泊松模型
Musa-Okumoto
对数泊松模型属于对数无限错误模型
。该模型构建于指数递减的失效
9
v1.0
可编辑可修改
强度函数之上,
其失效强度伴随失效期望递减成指数递减,
即
失效率衰减参数
,
为初始失效率。
为
2.1.3
Littlewood-
Verrall
模型
Littlewood-Verrall
可靠性模型
(L-V
模型
)
考虑了发
现缺陷不被完全剔除的情况。
该
模
型<
/p>
基
本
假
设
如
下
:
1)
相
邻
错
误
间
隔
时
间
为
相
互
独
立
指
数
随
机
变
量
的
构成独立随机变量序列,并服从参
数为
Gamma
分布
,
为增函数,用于描述程序员的素质以及软件开发难度;
3)
软件使用
情况近似于设计预期。
p>
增函数
综合了程序员素质
以及软件开发难度
两个因素,在
L-V
模型中
和
,
其
的线性表达式和二
次表达式分别为
:
中,
,
L-V
模型的累计失效数期望函数为:
L-V
模型与前面讨论的模型相比,
最主要的不同在于前面的模型仅考虑了错误的发生对软
件可靠性
的影响,而没有考虑软件稳定运行这一现象对软件可靠性的影响。
2.1.4
数据域模型
Nelson
模型是数据域软件可靠性模型的代表,也是最重要的软件可靠性模型之一。
该模型最早于
1973
年由
Nelso
n
提出
,
并于
1978
年得以完善。
Nelson
模型中,软件的可
靠性通过对软件运行的输入数据进行测量,
这
些输入数据从集合
随机选取。随机选取的
个输入数据概率分布为
。
中
Nel
son
模型基本假设如下:
1)
程序
被认为是集
E
上的一个可计算函数
F<
/p>
的一个规范,
一个输入数据
对应一个程序
执行回合并产生一个输出
10
2)
由于程序包含缺陷,程
v1.0
可编辑可修改
序实际确定函数
希望输出
出
,该函数不同于希望函数
;
3)
对于某些
,程
序实际输出
在
的容许范围之内
,
即
;但对另一些
程序实际输
< br>,这时认为程序发生一次失效;
4)
超
出
p>
容许范围
,
即
测试
过程中不剔除程序缺陷。
若
为导致软
件产生故障的输入数据,则软件可靠性可以表示为
软件可靠性计算公式
< br>
,其中
现故障的次数。
p>
Nelson
模型存在的问题主要表现在输入数据集较大和输入数据
的随机选取具有盲目
性和局限性。
中
元素的数量,
为
次运行后软件出
,
p>
另一个
2.1.5
Markov
链模型
基于
Markov
链的软件可靠性模型主要用于评估预
测基于构件的软件系统。构件是指
封装了数据和功能的,在运行时能够通过参数进行配置
的模块。通常构件由第三方开发,
具有清晰的接口描述。
随着软
构件技术的快速发展,
聚集软构件设计大型复杂软件系统的
软件
开发方法日趋成熟,基于构件的可靠性模型研究也得到越来越多的关注。
(
1
)
Cheung
模型
< br>Cheung
模型属于基于
Markov
链的软件可靠性模型。
Cheung
模型将软件的控制
结构转
化成有向图
G
,并规定图中每
一个节点
表示一个构件,构件
到
的转移
用一个矢量边
表示。定义
为的可靠性
的
可靠性,
构造出构件转移矩阵
M
,其中
的转移概率。根据有向图
G
,
,
表示从
成功到达
的可
能性。
Cheung
模型基本假设如下:
1)
构件间的可靠性是相互独立的;
2)
构件间的控制转
移是马尔科夫过程;
3)
构件间连接逻辑完全可靠。
Cheung
模型中,具有
p>
n
个构件的软件
系统可靠性表示为
阵,具体为
:
,
p>
其中
为第
n
个构件
的个体可靠性,
S
为
矩
11
v1.0
可编辑可修改
式中,
I
为
nxn
单位矩阵
<
Q
为转移概率矩阵
P
的变形。
Cheung
模型只能处理单输入
/
单输
出系统,没有考虑连接件的可靠性,而且把构件的可靠性假设为固定不变的参数。
(
2
)
Krishnamurthy
模型
<
/p>
Krishnamurthy
模型遵守
C
heung
模型的假设条件,属于
Markov
链软件可靠性模型。
该模型将软件中的构件视为独立节点,
将任意一个测试用例运行中经过的节点序列视为路
径。
基于
这一基本概念,
该模型认为基于构件的软件系统的可靠性可以由路径的可靠性予
以描述。
(
3
)
Yacoub
模型
Yacoub
模型属于
Markov
链软件可靠性模型。该模型用构件依赖图来描述构件间的
组装交
互关系,
构件依赖图是一个有向图,
用于描述构件的可靠性、<
/p>
连接与接口的可靠性、
构件间控制的转换及转换的概率等方面内容
。该模型认为构件间连接逻辑并非完全可靠,
并引入
进行量化,
但模型中并未对此做深入分析和讨论,而仅作为固定不变的参数值
加以使用。
(
4
)
毛晓光通用模型
毛晓光通用模型认为
软件可靠性的计算是软件中所有运行路径出现频度与该路经可
靠性乘积的累加
和
,
R
为可靠性,
为所有运行路径的集合,
分别为路径
的可靠性
和出现频度。该模型没有对连接件的可靠性进行分析,并
且没有涉及敏感度计算,不利于
对软件早期开发的指导。
(
5
)
Wang
模型
Wang
模型对
Cheung
模型进
行了改进,允许软件具有并发、异构、多输入
/
输出特性。
p>
该模型将输入和输出分别定义为
了超级初态
和超级终态
,
和
,
< br>同时增加
和
的可靠性均为
1
p>
。
Wang
模型对不同结构的软件体系结<
/p>
构分别进行可靠性分析,
在状态转移概率中考虑了连接件的可靠性
,
但这样处理的连接件
的可靠性并不符合实际。
12