系统架构设计师教程 第9章 9.1 软件可靠性基本概念 笔记
第 9 章 软件可靠性基础知识 ★★★★☆
9.1 软件可靠性基本概念
9.1.1 软件可靠性定义
软件可靠性 (Software Reliability) 是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。
规定的条件是指直接与软件运行相关的使用该软件的计算机系统的状态和软件的输入条件,或统称为软件运行时的外部输入条件;
规定的时间区间是指软件的实际运行时间区间;
规定功能是指为提供给定的服务,软件产品所必须具备的功能。
4个不同点。
(1)复杂性。软件内部逻辑高度复杂,硬件相对简单。
(2)物理退化。软件不存在物理退化现象,硬件失效主要是物理退化所致。软件正确性与软件可靠性密切相关。
(3)唯一性。软件是唯一的,软件复制不改变软件本身,而任何两个硬件不可能绝对相同。
(4)版本更新较快。硬件更新周期通常较慢,定型后一般不会更改,而软件产品通常受需求变更、软件缺陷修复的影响,软件版本更新较快,这给软件可靠性评估带来较大的难度。
对于软件可靠性,国家标准GB/T-11457采用的定义:在规定的条件下,在规定的时间内,软件不引起系统失效的概率。
软件可靠性的框架性定义
(1)规定的时间。
软件可靠性体现在运行阶段,所以将“运行时间”作为“规定的时间”的度量。“运行时间”包括软件系统运行后工作与挂起(开启但空闲)的累计时间。由于软件运行的环境与程序路径选取的随机性,软件的失效为随机事件,所以运行时间属于随机变量。
(2)规定的条件。
规定的条件主要指软件的运行环境,涉及软件系统运行时所需的各种支持要素,如支持硬件平台(服务器、台式机和网络平台等)、操作系统、数据库管理系统、中间件,以及其他支 持软件、输入数据格式和范围及操作规程等。具体地说,规定的环境条件主要是描述软件系统运行时计算机的配置情况及对输入数据的要求,并假定其他一切因素都是理想的。
(3)所要求的功能。
软件可靠性还与规定的任务和功能有关。由于要完成的任务不同,调用的子模块就不同(包括程序选择路径不同),其可靠性也就可能不同。要准确度量软件系统的可靠性,必须先明确它的任务和功能。
(4)“软件可靠性”定义具有以下特点。
①用内在的“缺陷”和外在的“失效”关系来描述可靠性,更能深刻地体现软件的本质特点。
②定义使人们对软件可靠性进行量化评估成为可能。依据这个定义,可以通过分析影响可靠性的因素, 用函数的形式,按照不同的目的建立各种数学模型去分析软件可靠性。
③用概率的方法去描述可靠性是比较科学的。定义用规定时间内其操作不出现软件失效的概率来描述可靠性,用概率来描述随机事件,是比较合理的,也是可行的。
9.1.2 软件可靠性的定量描述
软件的可靠性可以基于使用条件、规定时间、系统输入、 系统使用和软件缺陷等变量构建的数学表达式。
1.规定时间
对于“规定时间”有3种概念:
自然时间,也就是日历时间,指日常计时用的 年、月、周、日等自然流逝的时间段;
运行时间,指软件从启动开始,到运行结束的时间段;
执行时间,指软件运行过程中,中央处理器 (CPU) 执行程序指令所用的时间总和。
使用执行时间来度量软件的可靠性最为准确,效果最好
2.失效概率
从软件运行开始,到某一时刻 t 为止,出现失效的概率可以看作是关于软件运行时间的一个随机函数,用F ( t ) 表示。
3.可靠度
根据可靠性的定义,可靠度就是软件系 统在规定的条件下、规定的时间内不发生失效的概率。如果用F ( t ) 来表示到t 时刻止,软件不出现失效的概率,则可靠度的公式为R(t)=1 -F(t)
4.失效强度
失效强度 (Failure Intensity) 的是单位时间软件系统出现失效的概率。
5.平均失效前时间
可靠度为R(t) 的系统平均失效前时间 (Mean Time To Failure,MTTF) 定义为从t=0 时到故障发生时系统的持续运行时间的期望值
6.平均恢复前时间
平均恢复前时间 (Mean Time To Restoration,MTTR) 是随机变量恢复时间的期望值,是从出现故障到修复成功中间的这段时间。MTTR越短表示易恢复性越好。
7.平均故障间隔时间
MTBF(Mean Time Between Failures, 平均故障间隔时间)定义为:失效或维护中所需的平均时间,包括故障时间以及检测和维护设备的时间。
MTBF = MTTF + MTTR
9.1.3 可靠性目标
失效严重程度类 (Failure Severity Class)就是对用户具有相同程度影响的失效集合。可以按不同标准进行分级,常见的是按对成本影响、对系统能力的影响等标准划分软件失效的严重程度类,常用数量级去表示等级,数值越小越严重。
可靠性目标是指客户对软件性能满意程度的期望。通常用可靠度、故障强度和平均失效时 间 (MTTF) 等指标来描述,根据不同项目的不同需要而定。为了定义系统的可靠性指标,必须确定系统的运行模式,定义 故障的严重性等级,确定故障强度目标。
9.1.4 可靠性测试的意义
(1)软件失效可能造成灾难性的后果。
(2)软件的失效在整个计算机系统失效中的比例较高。
(3)软件可靠性技术很不成熟。
(4)软件费用呈有增无减的势头,而软件可靠性问题是造成费用增长的主要原因之一。
(5)软件对生产活动和社会生活的影响越来越大,增加了软件可靠性问题在软件工程领域乃至整个计算机工程领域的重要性。
9.1.5 广义的可靠性测试与狭义的可靠性测试
广义的软件可靠性测试是指为了最终评价软件系统的可靠性,运用建模、统计、试验、分析和评价等一系列手段对软件系统实施的一种测试。
狭义的软件可靠性测试是指为了获取可靠性数据,按预先确定的测试用例,在软件的预期使用环境中,对软件实施的一种测试。狭义的软件可靠性测试也叫“软件可靠性试验” (Software Reliability Test), 它是面向缺陷的测试,以用户的角度来测试软件。
可靠性测试的目的可归纳为以下3个方面。
(1)发现软件系统在需求、设计、编码、测试和实施等方面的各种缺陷。
(2)为软件的使用和维护提供可靠性数据。
(3)确认软件是否达到可靠性的定量要求。