第十三章 系统的可靠性
13.1 软件可靠性
目前,硬件可靠性测试技术和评估手段日趋成熟,已经得到了业界的认可。
软件可靠性模型的研究多集中在 开发阶段、测试阶段、评估阶段 的可靠性模型。
13.1.2 软件可靠性的定义
可靠性(Reliability)是指产品在 规定的条件下 和 规定的时间内 完成规定功能 的 能力。
按照产品可靠性的形成,分为 固有可靠性、使用可靠性。
固有可靠性是通过 设计、制造 赋予产品的 可靠性。
使用可靠性 既受设计、制造 的 影响,又受使用条件的影响。
软件与硬件 从可靠性角度来看,主要有4个不同点:
1、复杂性,软件内部的逻辑高度复杂,硬件则相对简单。
2、物理退化,一个正确的软件任何时刻均可靠,一个正确的硬件、元器件、系统 则可能在某个时刻失效。
3、唯一性,软件是唯一的,软件复制不改变软件本身,硬件不可能完全相同,概率方法在硬件可靠性领域取得巨大成功。
4、版本更新快,软件版本更新较快,也给软件可靠性评估带来较大的难度。
1983年,美国IEEE 对“软件可靠性”做出了更明确的定义。
1989年,我国国家标准 GB/T-11457也采用了这个定义。
定义:在规定的条件下,在规定的时间内,软件不引起系统失效的概率。
依然沿用了“产品可靠性”的定义。
1、规定的时间
由于软件运行的环境与程序路径选取的随机性,软件的失效为随机事件,所以运行时间属于随机变量。
2、规定的条件
不同的环境条件下的可靠性是不同的,计算机的配置情况、对输入的要求。
有了明确规定的环境条件,还可以有效地判断软件失效的责任在用户方还是开发放。
3、所要求的功能
软件可靠性还与规定的任务和功能有关。
要准确度量软件系统的可靠性,必须先明确它的任务和功能。
4、“软件可靠性”定义具有如下特点:
1. 用内在的“缺陷” 和 外在的“失效”关系来描述可靠性。
2. 定义使人们对软件可靠性进行量化评估成为可能。
3. 用概率的方法描述可靠性是比较科学的。
13.1.3 软件可靠性的定量描述
软件的可靠性可以基于 使用条件、规定时间、系统输入、系统使用、软件缺陷 等变量构建的数学表达式。
1、规定时间:自然时间、运行时间、执行时间。
使用执行时间来度量软件的可靠性最为准确。
2、失效率:把软件从运行开始,到某一时刻t 为止,出现失效的概率用 F(t)表示。
F(0)=0,即软件运行初始时刻失效概率为0。
F(t)在时间域(0,+无穷大)上是单调递增的。
F(+无穷大)=1,即失效概率在运行时间不断增长时 趋向于1,这也意味着任何软件都存在缺陷。
3、可靠度:在规定的条件下,规定的时间内 不发生失效的概率。
公式略。
4、失效强度(Failure Intensity)单位时间 软件系统出现失效的概率。
公式略。
5、失效率(Failure Rate)又称 风险函数(Hazard Function),也可以称为条件失效强度。
就是当软件在 0~t 时刻内 没有发生失效的条件下,t时刻 软件系统的失效强度。
公式略。
6、可靠度 与 失效率 之间的换算。
略。
7、平均失效时间(Mean Time to Failure,MTTF)就是软件运行后,到下一次出现失效的平均时间。更直观地表明一个软件的可靠度。
公式略。
需要对 软件可靠度 这个反映软件可靠性的肚量指标作下列补充说明:
1. 需指明它与其他软件的界限。
2. 软件失效必须明确定义。
3. 必须假设硬件无故障(失效)和软件有关变量输入正确。
5. 必须指明时间基准:自然时间(日历时间)、运行时间、执行时间(CPU 时间)、其他时间基准。
6. 通常以概率度量,也可以模糊数学中的可能性加以度量。
7. 在时间域上进行,是一种动态度量,也可以是在数据域上,表示成功执行一个回合的概率。
软件回合是软件运行最小的、不可分的执行单位。
8. 有时将软件运行环境简单地理解为软件运行剖面(Operational Profile)。
运行剖面定义了关于软件可靠性描述中的“规定条件”,测试环境、测试数据 等一系列问题。
13.1.4 可靠性目标
使用 失效强度 表示软件缺陷对软件运行的影响程度。
不仅取决于软件失效发生的概率,还和软件失效的严重程度有很大关系。引出另外一个概念——失效严重程度类(Failure Severity Class)。
失效严重程度类 就是对用户具有相同程度影响的失效集合。
对失效严重程度的分级 可以按照不同的标准进行,对成本影响、对系统能力的影响 等。
对成本的影响 可能包括失效引起的 额外运行成本、修复和恢复成本、现有潜在的业务机会的损失 等。
对系统能力的影响 常常表现为 关键数据的损失、系统异常退出、系统崩溃、导致用户操作无效 等。
可靠性目标 是指客户对软件性能满意程度的期望。通常用 可靠度、故障强度、平均失效时间(MTTF)等指标来描述。
建立定量的可靠性指标 需要对 可靠性、交付时间、成本 进行平衡。
13.1.5 可靠性测试的意义
1、软件失效可能造成灾难性的后果。
2、软件的失效在整个计算机系统失效中的比例较高。
80%和软件有关。
结构太复杂了,一个较简单的程序,其所有路径数量可能是一个天文数字。
3、相比硬件可靠性技术,软件可靠性技术很不成熟。
4、软件可靠性问题是造成费用增长的主要原因之一。
5、系统对于软件的依赖性越来越强。
13.1.6 广义的可靠性测试与侠义的可靠性测试
广义的软件可靠性测试 是指 为了最终评价软件系统的可靠性而运用 建模、统计、试验、分析、和评价 等一系列手段对软件系统实施的一种测试。
侠义的软件可靠性测试 是指 为了获取可靠性数据,按预先确定的测试用例,在软件的预期使用环境中,对软件实施的一种测试。
也叫“软件可靠性试验(Software Reliability Test)”,它是面向缺陷的测试,以用户将要使用的方式来测试软件,所获得的测试数据与软件的实际运行数据比较接近。
可靠性测试是对软件产品的可靠性 进行调查、分析、评价 的一种手段。
对检测出来的 失效的分布、原因、后果 进行分析,并给出纠正建议。
总的来说,可靠性测试的目的可归纳为以下三个方面:
1、发现软件系统在 需求、设计、编码、测试、实施 等方面的 各种缺陷。
2、为软件的 使用、维护 提供可靠性数据。
3、确认软件是否达到可靠性的定量要求。