软件可靠性建模1模型概述1.1软件可靠性的定义1983年美国IEEE计算机学会对“软件可靠性”作出了明确定义,此后该定义被美国标准化研究所接受为国家标准,1989年我国也接受该定义为国家标准。
该定义包括两方面的含义:(1)在规定的条件下,在规定的时间内,软件不引起系统失效的概率;(2)在规定的时间周期内,在所述条件下程序执行所要求的功能的能力;其中的概率是系统输入和系统使用的函数,也是软件中存在的故障的函数,系统输入将确定是否会遇到已存在的故障(如果故障存在的话)。
软件失效的根本原因在于程序中存在着缺陷和错误,软件失效的产生与软件本身特性、人为因素、软件工程管理都密切相关。
影响软件可靠性的主要因素有软件自身特性、人为因素、软件工程管理等,这些因素具体还可分为环境因素、软件是否严密、软件复杂程度、软件是否易于用户理解、软件测试、软件的排错与纠正以及软件可靠性工程技术研究水平与应用能力等诸多方面。
1.2软件可靠性建模思想建立软件可靠性模型旨在根据软件可靠性相关测试数据,运用统计方法得出软件可靠性的预测值或估计值,下图给出了软件可靠性建模的基本思想。
v1.0 可编辑可修改图软件可靠性建模基本思想从图中可以看出软件失效总体来说随着故障的检出和排除而逐渐降低,在任意给定的时间,能够观测到软件失效的历史。
软件可靠性建模的目标如下:(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)非齐次泊松过程模型这类模型把时间划分为时间间隔,每个间隔内发现的失效数是泊松随机变量,代表性的模型有 G-O 模型。
(3)Musa 执行时间模型这类模型以 CPU 时间为标准描述软件系统的可靠性,建立 CPU 时间与日历时间,程序的可靠性特征与测试过程资源消耗的关系。
2、非随机过程模型(1)贝叶斯类模型这类模型中有代表性的是 L-V 模型。
(2)种子法模型其思想是事先在软件中植入一定数量的缺陷植,收集到的缺陷包含植入的和软件本身的,用它们之间数量关系估算软件系统的缺陷数,即动态模型中的缺陷播种模型。
(3)基于数据域的模型这类模型的代表是 1973 年提出的 Nelson 模型。
(4)其他方法其他的模型还有非参数分析、时间序列分析模型等模型。
(三)根据故障过程的特性分类Amrit 将模型分为 4 类:1、故障间隔时间模型这类模型研究的是故障的间隔时间。
最常用的方法是假设第i-1个和第i个故障之间的时间服从某种分布,从观测到的间隔时间来估计参数,进而估计软件可靠性和故障间隔时间 MTBF (Mean Time Between Failure)等软件性能度量。
2、故障计数模型这类模型关注的是一定时间间隔内发生故障的次数,假定故障计数服从一种已知的随机过程。
可以通过观测的故障数或失效时间估计失效率参数,NHPP 类软件可靠性增长模型属于这类模型。
3、故障播种模型这类模型类似于种子法模型。
4、基于输入域模型根据程序的使用情况从输入情况的分布生成一组测试用例。
由于获得这个分布比较困难,所以一般把输入域划分为几个有代表性的等价类,每个等价类都与一个程序路径有关。
从执行这些从输入域抽取的测试用例,观测软件故障数,从而估计软件可靠性。
(四)Trivedi 分类及其他分类Kishor 划分模型方法如图所示图 2图 Trivedi分类软件可靠性模型其他常用的软件可靠性模型分类方法还有 Musa 和 Okumoto 给出的基于模型五种不同属性的模型分类方法和 Hoang Pham 给出的分类体系。
2常见的软件可靠性建模模型软件可靠性解析模型软件可靠性解析模型主要通过对软件失效数据行为进行假设,并在该假设的基础上依靠数学解析方法对软件可靠性进行建模。
该类模型可分为指数模型、对数模型、Littlewood-Verrall模型、数据域模型、Markov链模型、随机Petri网模型等。
2.1.1指数模型(1)J-M模型J-M软件可靠性模型于1972年由Jelinski和Moranda创建,属于二项分布有限错误模型。
其基本假设如下:1) 测试未运行时软件失效为0;当测试进行时,软件错误将被检出,其失效率函数与软件当前的残留故障数成正比;同时,软件中存在的总故障数是固定的;2) 失效率在每个失效间隔内是常数,其数值正比于残留的错误数;3) 软件错误引发的故障是相互独立的;4) 每次只修正一个错误,且当软件故障出现时,引发故障的错误将被立即排除,并不会引入新的错误。
J-M 模型中软件第 i 次失效强度函数为=,其中为软件中错误总数,为失效率。
J-M模型软件可靠性函数为:=J-M模型以一种较为简单的方式,将软件故障视为测试时间的函数,主要缺点在于假设条件过于理想,实际情况中很难满足。
(2)G-O模型Goel-Okumoto软件可靠性模型(G-O模型)于1979年由Goel和Okumoto提出,属于NHPP有限错误模型,其基本假设如下:1) 测试未运行时的软件失效为0;当测试进行时,软件失效服从均值为的泊松分布;2) 当时,测试时间内产生的失效与软件残留错误成正比;3) 对于任一组有限时间点,在对应时间段分别发生的失效次数相互独立;4) 每次只修正一个错误,当软件故障出现时,引发故障的错误被立即排除,并不会引入新的错误。
G-O模型在测试区间内的累计失效数期望函数为,为软件累计测试时间。
可靠性函数为:=(3)Musa基本执行时间模型Musa基本执行时间软件可靠性模型 (Musa模型)中,软件测试时间使用了更为精确的CPU占用时间作为度量基础,并给出了CPU时间与日历时间的转换关系,但软件由于运行环境的差异导致CPU执行时间可能大不相同。
(4)超指数增长模型超指数增长模型对经典指数模型进行了扩展,属于NHPP有限错误模型。
由于编程人员的差异、新旧代码的差异、实现语言的差异等因素导致了软件不同部分的失效率各有不同,因此软件的不同部分将分配不同的失效率。
超指数增长模型可用于拥有新模块和重用模块的复杂系统中。
超指数增长模型在测试区间内的累计失效数期望函数为:式中,表示具有相似特征模块构成的簇数量;表示在第个簇中存在的错误总数;表示在第个簇的失效率。