APP下载

软件可靠性模型的研究与进展*

2019-01-02车金庆周凌翱

计算机与数字工程 2018年12期
关键词:可靠性分类软件

车金庆 周凌翱

(1.常州工程职业技术学院智能装备与信息工程学院 常州 213016)(2.常州信息职业技术学院软件学院 常州 213016)

1 引言

随着计算机和信息处理的广泛应用,计算机系统的可靠性问题越来越得到人们的关注。而软件体系规模的日益增大及其复杂性的日益增强,使软件的可靠性问题更为突出。据有关资料统计,软件故障约占整个计算机系统故障的65%[1]。所谓软件可靠性是指软件系统在规定环境下、给定时间内无故障运行的概率,是软件质量的一个重要组成部分。软件可靠性与硬件可靠性相比体现出了不同的特点:1)软件错误主要是由设计错误造成的,使用和维护对软件可靠性的影响不大;2)软件错误不随使用时间的延长而增加[2];3)软件修理就是通过再设计排除原有错误;4)软件可靠性增长与软件使用的时间无关,与检测并改正错误的努力有关;5)软件寿命期内无老化与耗损现象;6)正确的软件不因使用环境的变化而改变其正确性;7)同一软件的冗余技术不能提高软件的可靠性;8)采用高可靠性的标准件-系统软件所提供的各种库函数,未必能提高整体软件的可靠性。

软件可靠性模型是软件可靠性评估与预测的核心,目前,公开发表的软件可靠性模型已经有一百多种,但是,由于它们假设不同,性能各异,因此,即使用它们估测同一软件也可能得到存在巨大差异的预测结果,至今仍然没有一个既简单又广泛适用的软件可靠性模型。本文正是针对这一问题,期望通过对软件可靠性模型进行系统梳理得到一些有益的启示。

2 软件可靠性模型概述

建立软件可靠性模型旨在根据软件可靠性相关测试数据,运用统计方法得出软件可靠性的预测值或估计值[3]。软件可靠性模型对于预防软件故障,预估软件性能都有积极意义。图1给出了软件可靠性建模的基本思想。

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

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

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

软件可靠性建模需要考虑以下基本问题[5]。1)模型建立

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

2)模型比较

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

3)模型应用

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

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

2.2 软件可靠性模型特点

软件可靠性模型主要有以下特点[7]。

1)与软件开发语言无关。软件可靠性模型的应用与程序开发时选用的设计语言应该是没有关系的。按照同一规格说明开发的软件,对于不同的程序开发语言,相同模型应该给出同样的预测结果。

2)与软件开发方法无关。虽然一个好的程序设计方法开发出来的软件可靠性更高,但是这样的影响是很难描述的,因为软件开发过程十分复杂、涉及诸多人为因素,从而使得对软件可靠性的预测非常困难。在软件可靠性预测中,一般假设软件系统采用最坏的开发方法。

3)测试方法选择。理论上,通过完全充分的测试,软件可靠度能达到百分之百。但是,真实情况是人们只能实施有限的测试,使得在可靠性估计精度要求高的情况下,这些模型的可用性受到了限制。

4)错误排除过程。早期的许多软件可靠性模型都基于完全改错假设,但实际上,在排错的过程中,往往会引入新的错误。

5)模型表达内容。通常,模型应该指出软件已被测试的程度,测试数据和条件是否能准确地模拟软件运行环境,是否足以检测出类似的故障等。软件可靠性模型假设软件测试的数据和条件与操作环境有着相同的分布。

6)输入的分布情况。软件可靠性模型基于的输入分布是非常重要的,因为可靠性估计与其紧密相关。例如,考虑一种极端的情况,软件只用到一个输入为常数,软件将或者成功或者失败的执行,于是模型给出的可靠性估计相应的为1或0。

7)软件复杂性。原则上,复杂的软件比相对简单的软件要求更多的测试。但是,现有软件可靠性模型大多没有对此进行考虑。

8)对模型的验证。在整个软件生命周期内,软件规模几乎成倍的增长,软件可靠性必然发生相应的变化,加之缺乏实际可用的验证数据,使得对软件可靠性模型的验证非常复杂。

9)模型要求数据。模型进行估测所要求的数据应该是易于收集的,因为数据问题往往限制了软件可靠性模型的应用范围。

2.3 软件可靠性模型分类

软件可靠性模型经过几十年的发展,已有将近二百多种可靠性模型发表。但是,并没有发现一种科学、系统的分类方法。为了更好地整理和研究这些模型,许多不同的分类方法被相继提出。现在常用的一些分类方法主要有随机性分类、按参数的估计方法分类、按系统出现的失效数分类、按修复过程分类、按时间的适用方式分类等等[8]。

按照软件可靠性相关,将其分成四类,分别是可靠性模型、释放时间模型、可用性模型、硬件-软件混合模型[9]。

根据Ramamoorthy和Bastani的观点,根据模型的应用阶段来分类[9]:

软件开发阶段:JM模型、Littlewood-Verral模型、Shooman模型、Musa模型等。软件验证阶段:Nelson模型等。

软件操作运行阶段:马尔可夫过程模型等。

软件测试阶段:Mills模型、Seeding模型等。

综合测试环境、模型假设和数理统计学的分类方法,将模型分为随机过程类模型和非随机过程类模型[10],如图2所示。

图2 软件可靠性模型分类

到目前为止,软件可靠性模型的研究还处于较为初级的阶段,尚未形成固定的分类方法。也有不少学者提出了他们的分类方法,诸如按照随机性分类、按照故障修复过程分类、按照软件中发现的故障数分类、按照模型参数估计方法分类、按照模型采用时间方式分类等[11]。

综合模型假设、测试环境以及数理统计的方法,可以将模型大致分为随机过程类模型,如马尔可夫过程模型、非齐次泊松过程模型等,及非随机过程类模型[12]。

在软件测试过程中,一旦软件故障被发现,都要进行改正。因此,随着测试工作的进行,软件中的故障不断被排除减少,软件的可靠性就不断得到提高。所以说,现有的软件可靠性模型都是软件可靠性增长模型。

综合模型假设、测试环境以及数理统计的方法,我们将模型大致分为随机过程类模型和非随机过程类模型。

本文主要研究随机过程类软件可靠性模型。

3 随机过程类模型

随机过程类软件可靠性模型主要包括马尔可夫过程模型和非齐次泊松过程模型。一般如果假定故障出现率在软件无变化的区间之内为一固定常数,并且随着故障数的减少而下降,这类模型为马尔可夫过程模型;另外,t时刻检测到的累计错误数[N(t),t≥ 0]为时间的函数,并且在一定的条件下,[N(t),t≥ 0]可近似的为一个非齐次泊松过程,这类模型则属于非齐次泊松过程模型[13~14]。

马尔可夫过程模型的典型代表是Jelinski-Moranda模型,非齐次泊松过程模型的典型代表是Goel-Okumoto模型。

3.1 Jelinski-Moranda模型

Jelinski-Moranda模型[15],简称JM模型,是由Z.Jelinski和P.Moranda于1972年提出的。

3.1.1 JM模型基于的基本假设

1)软件初始固有错误数是一个未知固定常数,记为W0;

2)任意时刻的故障检测率都与软件中残留故障数成正比,比例系数记为λ;

3)测试过程发现的故障均可以一次完全排除,且不引入新的故障,每一次排错后W0减1;

4)软件中的故障相互独立,每个故障对整个软件系统的影响是相同的,各故障发生的时间间隔也是相互独立的。

3.1.2 数学描述

JM模型认为,以第i-1次失效为起点的第i次失效时间,是服从以λ(W0-i+1)为参数的指数分布的随机变量,其概率密度 f(t)为

由假设(4)可知ti-1时刻之后软件平均失效时间MTTF为

3.1.3 模型参数估计

模型中含有W0和λ两个未知参数,用最大似然法分别求解W0和 λ的估计值的推导Ŵ0和 λ̂过程如下:

由式(1),得到似然函数为

其中n为样本大小,即到当前时刻已排除的故障数。

对式(5)取对数,可得对数似然函数为

对式(6)分别求关于W0和λ的偏导数,并令结果为0:

3.2 Goel-Okumoto模型

G-O模型是Goel-Okumoto提出的用非齐次泊松过程描述的软件可靠性模型,是最为典型的非齐次泊松过程类模型。

3.2.1 G-O模型基于的基本假设

1)软件的运行条件与预期的操作环境相同;

2)在任意的时间间隔内发现的软件故障数互相独立;

3)检测到每个故障对于软件系统的危害严重性相同;

4)每个故障被检测到的可能性大致一样;

5)t时刻检测到的累计错误数 [N(t),t≥0]是一个独立增量过程,设N(t)的期望为w(t),则N(t)服从w(t)的泊松分布。在(t,t+Δt)时间区间中检测到的故障数的期望值与t时刻程序中残留故障数的期望值成正比;

6)t时刻检测到累计故障数N(t)的期望函数w(t)是一个有界的单调递增函数,满足:

其中a为可能被检测到的软件故障总数。

3.2.2 数学描述

根据基本假设(5),在任意一个足够小的时间间隔 (t,t+Δt)内,有

γ为一比例常数,代表错误检测率。

用初始边界条件w(0)=0,解出:

根据基本假设(5),若t时刻累积故障数为k,则N(t)概率密度函数为

失效强度函数用g(t)来表示,有

t时刻软件残留故障数用Nr(t)表示,有

Nr(t)的数学期望为

第n次失效发生以后,软件的可靠性函数为

给定程序在tn时刻发生第n次失效,则此时程序的MTTF为

3.2.3 模型参数估计

在使用G-O模型进行软件可靠性分析时,首先需要确定模型未知参数的a和γ的值,使用最大似然法进行参数估计。

在时刻ti(i=1,2,…,m)发现的累积故障数为si,则由式(18),可得出参数的最大似然函数为

对上式等号两边分别取对数,得到对数似然函数,然后对对数似然函数分别求关于a和γ的偏导数,得到以下两个方程式:

通过数值计算方法求解由式(25)和式(26)联立的方程组,得出a和γ的值,即可获得它们的点估计值̂和̂。

4 结语

随着计算机技术日新月异的发展,软件产品已经进入到社会生产、人们生活的各个角落,与此同时,软件失效的情况时有发生,给人们带来不同程度的损失,软件的可靠性问题受到了越来越多的重视。在软件可靠性预测中,软件可靠性模型发挥着核心作用,使用模型对软件进行估测时,需要选择那些与软件实际开发过程最接近模型,这样才能保证预测的客观性和准确性。

本文在G-O模型的基础上做了改进,基于更为合理的假设,提出了考虑两类相关故障的软件可靠性模型。具体包括如下内容:

1)整理与研究国内外相关文献资料,阐述了本文的选题背景与国内外研究现状;总结了软件可靠性的基本特点、影响因素、性能度量指标及其与硬件可靠性的区别;介绍了软件可靠性分析用到的数学准备知识;归纳了软件可靠性模型的分类、基本特点、评价标准及评价技术。

2)研究了几个经典的可靠性模型,对两个经典随机过程类模型(JM模型、G-O模型)的基本假设、公式推导及参数估计做了详细介绍。

深入研究已发表的经典软件可靠性模型之后,本文指出了传统软件可靠性模型的局限性,并以G-O模型为基础,提出更接近实际情形的假设,即将两类软件相关故障考虑在内,建立了数学模型。

猜你喜欢

可靠性分类软件
基于AK-IS法的航空齿轮泵滑动轴承可靠性分析
禅宗软件
讨论如何提高建筑电气设计的可靠性和经济性
软件对对碰
合理使用及正确测试以提升DC/DC变换器可靠性
按需分类
GO-FLOW法在飞机EHA可靠性分析中的应用
教你一招:数的分类
说说分类那些事
即时通讯软件WhatsApp