这类模型的分析方法与上面的模型相似,先计算程序各逻辑路径的执行概率和程序中错误路径的执行概率,再综合出该软件的使用可靠性。
Shooman分解模型属于此类
NHPP
NHPP,即非齐次Poisson过程模型是以软件测试过程中单位时间的失效次数为独立Poisson随机变量,来预测在今后软件的某使用时间点的累计失效数。有:
1)Musa的指数模型
2)Goel和Okumoto的NHPP模型
3)S-型可靠性增长模型
4)超指数增长模型
5)Pham改进的NHPP模型
Markov模型
这类模型有:
1)完全改错的线性死亡模型
2)不完全改错的线性死亡模型
3)完全改错的非静态线性死亡模型
Bayesian类
这是利用失效率的验前分布和当前的测试失效信息来评估软件的可靠性。这是一类当软件可靠性工程师对软件的开发过程有充分的了解,软件的继承性比较好时具有良好效果的可靠性分析模型。
连续时间的离散型Markov链
Shock模型
此外,Musa和Okumoto依据模型的如下特征对模型进行分类:
(1)时间域:有两种:a.时钟时间;b.CPU时间。
(2)失效数类:在有限时间间隔内设定软件的失效数为有限还是无限。
(3)相对于时间系统失效数的统计分布形式。主要的两类是:Poisson分布型和二项分布型。
(4)对有限失效数而言,用时间表示的失效强度的函数形式。
(5)对有限失效数而言,用经验期望失效数表示的失效强度的函数形式。
4.软件可靠性模型研究的
五个方向
以上归类介绍了的几十个软件可靠性模型,其中有的已被西方某些可靠性公司制成标准的工具软件出售[4],如Musa-Okumoto模型、Jelinski-Moranda模型、NHPP模型、S-shaped模型、Duane模型、Little-Verral模型等。而且还有新的模型发表。这些模型的应用都有局限性,要根据具体软件的规模、开发和使用环境、开发人员的素质、开发方法进行妥善选择,读者可参考[5]中的有关模型选用的章节。
由于软件缺陷的特殊性,至今尚没有一种软件可靠性的通用统计分析模型。其主要原因是这些模型对系统所做的假设固定不变,而软件在其开发过程中受各种因素影响,使得软件的故障行为千差万别;在进行模型的参数估计时又难以实时获得充分的统计数据,无法在各种模型之间作识别,导致估计结果与实际情况的不一致,即产生模型的不适配问题。
为了使对软件可靠性的分析、预计更加精确,除了应用标准的软件可靠性模型的传统方法外,目前软件可靠性研究的内容有:
1)对传统模型的分析结果用U-结构图进行校正,以减少评价模型的偏差。
2)将两个或多个传统模型用加权的方法进行线性组合,或者在软件寿命周期的不同阶段使用不同的评价模型。
3)在传统模型中引入软件复杂性和测试类型、开发方法类型影响因子,以增强可靠性评价的准确性。
4)软件可靠性仿真技术(以后将专门介绍)。
5)神经网络分析技术
人工神经网络是基于现代科学对生物神经系统的认识,得出的一种抽象的新型数学模型,借助于计算机技术,使它具有人工智能、自适应能力和学习功能。它不事先确定模型,而是按实例研究的原则运行,是一种非参数软件可靠性估计,克服了模型的实配问题,通用性好(缺点是模型复杂)。从八十年代末和九十年代初期以来和工具,研究保证软件可靠性的开发方法和可靠性管理措施是软件可靠性工程师的责任。软件规模、复杂程度的大幅度提高,大型系统对软件的严重依赖,国际上开展了神经网络技术在软件可靠性工程中的应用研究,取得了一些成果,其工程应用亦在试验之中。我们中心正在开展这一技术的理论研究,并着手开发相应的通用软件工具,相信会有良好的工程应用前景。
5.软件工程化与软件可靠性
在近可能短的开发周期内向用户提供高可靠软件是软件工程师的艰巨任务。提供有效的软件可靠性评测方法,要求软件的开发从“自编、自导、自演”的初级模式向工程化方向转化。
软件工程是一项新兴的系统工程,软件的工程化提出了一些软件开发的基本原则和要求。其中,为保证大型软件的可靠性,必须遵循的原则包括:
1)软件的设计(design)、编码(coding)、测试(testing)由不同的人员完成,独立的验证/确认(IV&V)、象硬件那样设计、生产、检验分开;
2)软件开发和使用过程具有可追溯性,象硬件有设计图纸、生产记录、检验结果那样有各种文档;
3)像硬件那样尽可能使用标准件(标准子程序/模块)和成熟技术(经过验证的开发过程和算法)。
软件工程、软件可靠性工程研究与应用的共性技术包括:
1)软件故障树分析(S-FTA)
2)软件故障模式和影响分析(S-FMEA)
3)危险性分析
4)软件潜在通路分析
5)安全性分析(Petri Net等)。
6)软件的避错(fault avoidance)、排错(fault removal)、容错(fault tolerance)、预错(fault forcasting)等。
软件可靠性的提高依赖于软件工程化的步伐。
文章来源于领测软件测试网 https://www.ltesting.net/