1、软件可靠性模型综述可靠性是衡量所有软件系统最重要的特征之一。不可靠的软件会让用户付出更多的时间和金钱, 也会使开发人员名誉扫地。IEEE 把软件可靠性定义为在规定条件下, 在规定时间内, 软件不发生失效的概率。该概率是软件输入和系统输出的函数, 也是软件中存在故障的函数, 输入将确定是否会遇到所存在的故障。软件可靠性模型,对于软件可靠性的评估起着核心作用,从而对软件质量的保证有着重要的意义。一般说来,一个好的软件可靠性模型可以增加关于开发项目的效率,并对了解软件开发过程提供了一个共同的工作基础,同时也增加了管理的透明度。因此,对于如今发展迅速的软件产业,在开发项目中应用一个好的软件可靠性模型作
2、出必要的预测,花费极少的项目资源产生好的效益,对于企业的发展有一定的意义。1 软件失效过程1.1 软件失效的定义及机理 当软件发生失效时,说明该软件不可靠,发生的失效数越多,发生失效的时间间隔越短,则该软件越不可靠。软件失效的机理如下图所示:1)软件错误(Software error):指在开发人员在软件开发过程中出现的失误,疏忽和错误,包括启动错、输入范围错、算法错和边界错等。 2)软件缺陷(Software defect):指代码中存在能引起软件故障的编码,软件缺陷是静态存在的,只要不修改程序就一直留在程序当中。如不正确的功能需求,遗漏的性能需求等。3)软件故障(Software faul
3、t):指软件在运行期间发生的一种不可接受的内部状态,是软件缺陷被激活后的动态表现形式。 4)软件失效(Software failure):指程序的运行偏离了需求,软件执行遇到软件中缺陷可能导致软件的失效。如死机、错误的输出结果、没有在规定的时间内响应等。从软件可靠性的定义可以知道,软件可靠性是用概率度量的,那么软件失效的发生是一个随机的过程。在使用一个程序时,在其他条件保持一致的前提下,有时候相同的输入数据会得到不同的输出结果。因此,在实际运行软件时,何时遇到程序中的缺陷导致软件失效呈现出随机性和不稳定性。所有的软件失效都是由于软件中的故障引起的,而软件故障是一种人为的错误,是软件缺陷在不断的
4、测试和使用后才表现出来的,如果这些故障不能得到及时有效的处理,便不可避免的会造成软件失效。而一个软件中存在的软件错误和缺陷总数是无法确定的,也不可能被完全排除掉,有时候排除掉一个故障甚至会引起更多的故障。 所以在软件开发周期中,软件错误是不可避免的,但可以通过学习改进,不断吸取经验教训,尽量减少程序中的错误特别是重大错误的数量。在测试阶段,测试人员应尽可能多的检测并排除掉软件中的故障,从而减少软件失效强度,提高软件的可靠性和质量。1.2 提高软件可靠性的途径 软件中的故障会导致软件功能不能正常实现,降低了软件的可靠度。软件故障一般是软件开发各阶段人为造成的,大概包括需求分析定义错误、设计错误、
5、编码错误、测试错误和文档错误等。 因此要想获得高可靠性的软件,就要和软件中的故障做斗争。有以下三种直接的方式来减少软件故障,提高软件可靠性: 1)软件故障预防 软件故障预防是指预防或者避免错误的发生或引入,从而减少故障检测和排除造成的花费。加强软件开发员的教育和培训可以对减少故障起到一定的作用,另外在软件开发中可以利用下面几个故障预防技术:软件开发方法,软件配置管理,软件可靠性安全性设计和自动化故障预防等。2)软件故障的检测和排除 故障检测和故障排除是指从数量上和严重程度上减少软件中的故障。这在软件测试中用得最多,测试人员要在限定的时间和费用内发现并排除掉尽可能多的故障,这是提高软件可靠性的主
6、要途径。故障检测和排除技术可以分为静态方法和动态方法。 静态方法是在不实际运行软件的条件下检测软件的故障并进行排除,包括软件人工审查技术,软件静态分析技术和软件可靠性分析技术。 动态方法主要是通过运行软件来观测软件的失效,从而消除故障。动态测试技术主要包括:白盒测试技术,黑盒测试技术与软件可靠性测试技术。 3)软件故障的遏制 软件故障遏制也称容错技术,是指在错误存在的情况下,不导致软件失效,并仍能完成系统功能的能力。主要的软件容错技术主要包括恢复块技术和 N 版本编程技术。2 软件可靠性模型的概述软件可靠性工程使用的模型有两大类型:2.1 可靠性结构模型靠性结构模型是指用于反映系统结构逻辑关系
7、的数学方程。借助这类模型,在掌握软件单元可靠性特征的基础上,可以对系统的可靠性特征及其发展变化规律做出评价。软件可靠性结构模型包括串联系统模型、并联系统模型,以及硬-软件复合系统模型等。软件可靠性结构模型是软件系统可靠性分析的重要工具,既可以用于软件系统的可靠性综合,也可用于软件系统的可靠性分解。 2.2 可靠性预计模型可靠性预计模型本质上是一些描述软件失效与软件错误的关系,描述软件失效与运行剖面的关系的数学方程。借助这类模型,可以对软件的可靠性特征做出定量的预计或评估。例如,可以预计开发过程中的可靠性增长,预计或评估软件在预定工作时间的可靠度,预计软件在任意时刻发生的失效数的平均值、软件在规
8、定的时间间隔内发生失效次数的平均值、软件在任意时刻的失效率、软件失效时间间隔的概率分布和软件预期的交付时间等。评估和预计是两个有区别又有联系的概念。评估是指对软件现有的可靠性水平做出评价。预计是指对软件未来的可靠性特征进行预计。必须指出,在使用数学模型进行预计时,蕴含的假定是,事物发展规律在未来的一段时间内保持不变。对于短期预测这个假设是合理的。但是,随着预测期的延长,其近似性减弱。用可靠性模型进行预计时,为了得到较准确的结果,如果发现软件的失效规律有明显改变,应该对参数加以修正或重新收集失效数据,重新确定模型参数。 一般所说的软件可靠性模型均指软件可靠性预计模型。本文中,软件可靠性模型均是指
9、软件可靠性预计模型。 3 软件可靠性模型的特点 (1)与使用的程序设计语言无关。软件可靠性的应用与选用什么程序设计语言来编写软件之间没有什么直接关系。但对于根据同一个规格说明书,不管你用什么程序设计语言软件来编写软件,同一个软件可靠性模型应给出同样的估测结果。 (2)与具体用到的软件开发方法无关。软件开发是一个十分复杂的过程,涉及到许多的人为因素,从而使得对软件的质量难以进行预测。为了保证预测的精度,不妨假设待估测的软件系统是用最坏的软件开发方法开发出来的。 (3)测试方法的选择问题。实际上是无法通过彻底的测试来获得完全可靠的软件,所以不得不采用有限的测试,那么目标就是用最少的测试以求最大限度
10、的软件可靠性。可以用例如边界值测试法、分类测试法、路径测试法等方法来达到。几乎所有的软件可靠性模型都假定测试环境就是将来软件的运行环境,这限制了高可靠性估计情况下的这些模型的可用性。 (4)改错过程。实际上改正老的错误时往往会引人新的错误。 (5)模型要表述的内容。模型应该指出测试的输入是否已足够地覆盖了输入域,测试的条件和数据是否已准确地模拟了操作系统、是否已足以查出那些类似的错误等。软件可靠性模型假定测试的条件和数据与操作环境有着同样的分布,也就简捷地假设了上述要表述的内容。 (6)输入的分布问题。可靠性估计紧密地依赖于模型假设的输入分布。作为一个极端的情况,如果输入是一个常数(比如说只用
11、到一个输入) ,软件将或者出错或者成功的执行,于是就给出可靠性相应地为 0 或为 1。 (7)关于软件复杂性问题。大多数现有的软件可靠性模型都没有考虑这个问题。实际上,复杂的软件应该比简单的软件要求更多的测试。 (8)模型的验证问题。常常由于缺乏实际可用的足够数据,使得对模型的验证无法进行,且在整个软件寿命周期内,软件几乎呈常数倍数地增加,导致可靠性也相应地变化,软件可靠性的验证工作也就更加复杂化。 (9)关于时间问题。在软件可靠性量测与硬件可靠性量测综合起来对一定的系统环境进行考核时,将 CPU 时间作为时间单位是必要的。 (10)考虑模型所要求的数据是否容易收集。否则,由于数据问题,将会限
12、制软件可靠性的应用范围。 4 软件可靠性模型的分类 到目前为止,软件可靠性模型的研究已有 40 多年的历史,国内外已发表的软件可靠性模型有近百种,但由于对软件可靠性模型的研究还处在一个初步阶段,目前并没有一个完整、系统的科学分类方法。但是为了研究这些模型,又需要作些必要的分类。所以,不少专家学者提出了许多不同的分类。总的来说,模型可以按照它们的假设、测试空间、软件结构、处理的方式方法等进行分类,或者根据模型本身的数学结构及使用的参数估计方法进行分类。 一些常见的分类方法有: 按随机分类法:根据随机过程的假设,如过程的确定性和非确定性、马氏过程、泊松过程等进行分类。 按软件出现的故障数进行分类:
13、主要有错误计数模型和非计数模型,可数性或不可数(无穷)模型。 按模型参数的估计方法进行分类:主要有 Bayes 方法或非 Bayes 方法,最大似然估计或最小二乘法,另外还有线性模型等。 按模型使用的时间方式分类:主要有日历时间和执行时间模型。 按修复过程分类:主要指对软件系统修复过程的一类模型,如完全修复型和不完全修复型,完全排错型和不完全排错型。 按对软件的内部结构是否了解进行分类:可分为黑箱模型和白箱模型。对它们的分类主要根据对软件的内部结构的了解程度以及对它们的结构能加以利用的程度来区分。 根据 Shanthikumar 的观点,与软件可靠性有关的模型可分为四类: 第一类是软件可靠性模
14、型。 第二类是软件释放时间模型。用于确定软件何时可以释放,交付用户使用。软件可靠性是其考虑因素之一。 第三类是软件可用性模型。用于确定软件处于正常状态的机会大小,模型不仅考虑软件可靠性,还要考虑软件维护性。 第四类是硬件/软件模型。用于确定混合硬件- 软件系统的可靠性行为。 软件可靠性模型通常遵循以下四条准则之一进行分类,目的在于系统、深刻的理解软件可靠性模型。(1)建模对象 建模对象指软件可靠性数据及软件其他有关信息,譬如与时间有关的信息(数据) ,与时间无关的信息(数据)等。依据建模对象软件可靠性模型总的来说分为两大类:静态模型和动态模型。 (2)模型建设 可假定软件原有软件缺陷为一确定的
15、有限值,也可假定它是服从 Poisson 分布的随机变量,甚至假定它为无限量,这样可得到不同类型的模型。(3)模型适用性 适用于测试阶段的模型称为增长模型,适用于确认阶段的模型称为确认模型。 (4)数学方法 采用概率方法的模型称为概率模型。采用模糊方法的模型称为模糊模型。另外还有 Bayes 模型与非 Bayes 模型等。 软件可靠性模型的分类方法很多,这里我们采用综合模型的假设、测试环境以及数理统计的分类方法,将模型大致分为:随机过程类模型和非随机过程类模型。具体分类如图:软件可靠性模型随机过程模型非随机过程模型型马尔可夫过程二项模型(以 JM 模型为代表)非齐次泊松过程模型(以 GO 模型
16、为代表)Musa 执行时间模型运用贝叶斯估计的模型(以 LV 模型为代表)Seeding 模型基于输入域的模型(以 Nerson 模型为代表)非参数分析结构化模型(以 T.Downs 模型为代表)表)Cox 比例风险函数模型表)其它方法T.Downs 模型为代表)表)时间序列分析理论5 软件可靠性模型的建模过程为了满足软件可靠性指标要求,需要对软件进行测试-可靠性分析 - 再测试 - 再分析 -修改的循环过程。软件可靠性建模的目标是为了对软件中失效趋势和可靠性进行有效预测,来判断软件是否达到发布要求。软件可靠性模型的建模过程如下图6 参考文献孙勇 软件可靠性理论分析与计算D. 东南大学学位论文
17、, 2004.赵靖,王延斌 软件可靠性工程 西安工业大学出版社定义失效停止测试键入文档的引述或关注点的摘要。您可将文本框放置在文档中的任何位置。请使用“绘图工具” 选项卡更改引言文本框的格式。生成测试用例收集软件失效数据获得拟合模型对失效数据进行趋势分析模型参数估计基于拟合的模型进行可靠性预测选择一个恰当的可靠性拟合精度是否满足要求可靠性是否满足要求YYNN陈光宇,黄锡滋 .软件可靠性发展现状与展望J电子科技大学学报徐仁佐.软件可靠性模型及应用M.清华大学出版社,广西科学技术出版社,1994邹丰钟, 刘海青 , 王林. 软件可靠性综合模型 J. 武汉大学学报Software Product Evaluation-Quality Characteristic and Guidelines for Their UseS. 2001.