闫雪谭鑫
(中国人民解放军91439部队 大连 116041)
软件可靠性工程是一门虽然得到普遍承认,但还处于不成熟的正在发展确立阶段的新兴工程学科[1]。国外从20世纪60年代后期开始加强软件可靠性的研究工作,经过20年左右的研究推出了各种可靠性模型和预测方法,于1990年前后形成较为系统的软件可靠性工程体系[2]。同时,从20世纪80年代中期开始,西方各主要工业强国均确立了专门的研究计划和课题,如英国的AIVEY(软件可靠性和度量标准)计划、欧洲的ESPRIT(欧洲信息技术研究与发展战略)计划、SPMMS(软件生产和维护管理保障)课题、Eureka(尤里卡)计划等。每年,都有大量人力物力投入软件可靠性研究项目,并取得一定成果。
国内对于软件可靠性的研究工作起步较晚,在软件可靠性量化理论、度量标准(指标体系)、建模技术、设计方法、测试技术等方面与国外差距较大[3]。国内多数软件的生产方式还处于计算机时代的早期阶段,缺点很明显,多数所谓的“软件测试”仅仅对几个预先指定的用例进行一下表演就算通过。由于目前国内外对于软件可靠性模型的研究多集中在软件的研制阶段,且很少有涉及测试与评估阶段的可靠性模型,所以从事软件可靠性测试与评估研究是一个有理论价值和实际意义、并且存在一定难度的课题。
软件可靠性是指软件产品在规定的条件下和规定的时间内完成规定功能的能力,即在规定的环境和规定的时间不引起系统失效的概率。它是软件系统的固有特性之一,表明了一个软件系统按照用户的要求和设计的目标,执行其功能的正确程度。对于武器系统软件,可靠性被描述为在to时系统正常的条件下,系统在时间区间[0,t](t>0)内正常运行的概率。可靠性函数定义为[4]
式中:λ(s)为系统的故障率。
系统软件是由子系统组合而成的,子系统间相互作用,协调完成系统功能。同时,每一个子系统本身具有相对独立的功能。为了降低分析工作的复杂程度,本文的系统可靠性是建立在对子系统X1,X2,…,Xn分别讨论的基础上。
考虑到子系统的独立性及其调用状况,系统故障率等于各子系统故障率与其调用系数乘积的累加,即
式中:πi为子系统 Xi(i=1,2,…,k)的调用系数。系统可靠性函数可表示为
πi值的求解可以采用系统Xi的执行时间占整个系统运行时间的比例来表示,于是有
由以上分析可知,只要得到了子系统的故障率λi,整个系统的可靠性即可计算出来。
潜艇战术应用软件是武器系统软件的核心部分,在武器系统试验和参与作战的过程中,起到至关重要的作用。潜艇战术应用软件可靠性评估,原则上可借鉴一般软件可靠性的考核评估方法,通过软件分解、可靠性模型的分析与选择、可靠性模型计算等方法和步骤进行。
根据软件测试与评估的重点,只需把软件分解到功能模块的级别,不必再向下分解。进行软件分解的依据主要是软件的自然结构和功能特性。
以某型潜艇战术应用软件为例,软件包含水声决策模块、攻防决策模块、鱼雷攻击模块、导弹攻击模块、防御决策模块等功能模块,而各功能模块又由相应的子模块组成,如鱼雷攻击模块由线导鱼雷攻击模块、声自导鱼雷攻击模块及直航鱼雷攻击模块等子模块组成[5],见图1。只要通过软件可靠性等效模型计算出各个模块的失效率,整个软件系统的可靠性即可计算出来。
图1 潜艇战术应用软件模块结构示意图
3.2.1 常用模型及分类
软件的可靠性模型是指为预计或估算软件的可靠性所建立的数学模型。建立可靠性模型是为了将复杂系统的可靠性逐级分解为简单系统的可靠性,以便于定量估算和评价复杂系统的可靠性。
在实际应用中,由于许多模型作了不同程度的假设,结果与软件测试的实际结果有较大出入,所以在实际应用中必须仔细选择。图2是常用软件的可靠性模型分类。
图2 常用软件可靠性模型分类
3.2.2 软件可靠性评估模型的选择
一般软件的可靠性评估由于所要求的精度不高,测试过程中会产生较多的失效数据,使得测试数据与模型的拟合效果较好。但是,对于潜艇战术应用软件来说,由于其可靠性要求较高,软件设计时采取了一定的技术手段并结合使用进行了多次修改,使得测试数据失效率较低且离散性较强。同时由于受武器系统的试验条件限制,不可能进行过多的使用试验,因此潜艇战术应用软件的考核只能结合作战系统等其他武器系统的考核进行,导致难以采集到高质量的失效数据,致使战术应用软件的可靠性评估难度加大,软件的质量尤其是可靠性难以保证[6]。
在国内外常用的软件可靠性分析和评估模型中,已公布的不下百种[7],常用的有概率类模型、模糊神经网络方法、Bayes方法等。其中广泛使用的是概率类模型,但为了保证模型的可解性,规定了一些假设条件,在实际情况下很难满足;模糊神经网络方法虽然比概率类模型进了一步,但存在结构选取的随意性和输入数据不完整,无法有效实施;Bayes模型理论,则把用概率表示的科学严格性和用专家经验表示的先验信息有机结合,能够很好地处理许多不确定问题。
Bayes软件可靠性评估模型以Bayes函数为基础,采用先验分布和后验分布等技术手段,可以有效地表达失效数据(即故障率)的变化特征,解决了试验次数少,失效数据不足且数据离散性强等问题。
运用Bayes模型进行软件可靠性估计时,当软件测试数据的验前信息满足试验要求的情况下,可使用先验分布模型进行评估;当没有完整有效的验前信息样本时,应采用后验分布模型进行评估。在使用Bayes模型时,根据软件运行特点和错误发生的基本情况,应符合如下假设条件:
1)每次测试都满足贝努利试验的统计独立性,子系统Xi产生故障的概率服从二项分布;
2)子系统之间相互独立,各子系统Xi有各自独立的可靠度Ri与故障率λi;
3)程序中检测到的错误立刻被排除,不引入新的错误。
根据Raifa.H和Schlaifer.R提出的先验分布f(λi)应取样本的共扼分布的原则[9],选取二项分布的共扼分布——Beta(a,b)分布作为参数λi的先验分布,密度函数为
B(a,b)表示测试人员在看见具体测试结果之前关于软件可靠性的一种主观信任度。测试人员可以根据软件系统及其开发过程的信息,确定出适当的a,b值。
在实际的潜艇战术软件考核中,我们使用的是第三方测试软件,在难以得到完整有用的先验信息的情况下,可取a=b=1,并使用后验分布函数进行可靠性估计计算[10]。
如果子系统Xi执行了Ni次测试用例,其中有ri次产生故障,则根据Bayes估计,参数λi的后验分布应该服从Beta(a+ri,b+Ni-ri)分布。
当无先验信息时,a=b=1,则参数 λi的后验分布函数式为
一旦获得了后验分布,有两种方法来估计参数的值[11]:一是用后验分布最大时参数的值,作为参数的估计值,称为最大后验分布估计;二是采用后验分布的数学期望作为对参数的估计值,称为条件期望估计。对于完整的实例数据,常常使用条件期望估计。当实例数据不完整时,一般采用近似计算——最大后验分布估计法。
在战术软件的测试过程中,由于整个测试过程均有完整的故障测试记录,因此如果没有先验信息或先验信息不全需要采用后验信息进行可靠性评估计算时,我们可采用条件期望作为故障率λi的估计值,其表达式为
当 a=b=1,B(a,b)就是(0,1)上的均匀分布,相应的估计值为
通过以上的Bayes推理过程及数理统计计算,根据随机测试样本的大小(也就是测试用例的个数)和其中发现软件故障的测试用例的个数,给出了软件的可靠性估计式(10)。以此为依据,便可以算出软件的可靠性。
武器系统应用软件的可靠性评估是作战系统鉴定试验的重要环节,评估软件的可靠性受到许多客观条件限制,其中最大的限制就是可靠性信息不足的问题[12]。本文借鉴目前较为成熟的Bayes模型,对潜艇战术应用软件进行可靠性分析与评估,实现了在较少的试验样本及失效数据的条件下完成战术软件的可靠性评估工作,对软件鉴定科学化、规范化提供了指导作用。