夜雨聆风学习资料网

ARTICLE · 1124355

【架构】核心章节:第9章 软件可靠性基础知识 —— 知识点框架

【架构】核心章节:第9章 软件可靠性基础知识 —— 知识点框架

一、章节整体定位

项目
说明
教材章节
第9章
上午分值
3-8分
案例考查
计算题高频(串联/并联/表决系统可靠度、MTBF/MTTR/可用性)
论文考查
高可用/可靠性架构设计方向
核心程度
S级,计算题必拿分

二、知识点框架

9.1 软件可靠性基本概念

定义:软件产品在规定的条件下和规定的时间区间完成规定功能的能力。

软件与硬件的4个不同点

不同点
软件
硬件
复杂性
内部逻辑高度复杂,设计错误是失效主因
相对简单,失效主要因物理退化
物理退化
不存在物理退化现象
失效主要由物理退化所致
唯一性
软件是唯一的,复制不改变本身
任何两个硬件不可能绝对相同
版本更新
版本更新较快
更新周期通常较慢

IEEE定义(1983年):在规定的条件下,在规定的时间内,软件不引起系统失效的概率,该概率是系统输入和系统使用的函数,也是软件中存在的缺陷函数。

框架性定义4要素

要素
含义
规定的时间
运行时间(包括工作与挂起的累计时间)
规定的条件
软件运行环境(硬件平台、操作系统、数据库、中间件、输入数据格式等)
所要求的功能
规定的任务和功能,不同任务调用不同子模块
特点
用内在“缺陷”和外在“失效”关系描述可靠性;使量化评估成为可能;用概率方法描述

规定时间的3种概念

概念
含义
示例
自然时间
日历时间,年、月、周、日
一天24小时
运行时间
软件从启动到运行结束
8小时
执行时间
CPU执行程序指令所用时间总和
可能不到2小时

用执行时间来度量软件可靠性最为准确。

核心度量指标

指标
符号
含义
公式/特征
失效概率
F(t)
从运行开始到t时刻出现失效的概率
F(0)=0,单调递增,F(+∞)=1
可靠度
R(t)
规定条件下、规定时间内不发生失效的概率
R(t)=1-F(t),R(0)=1,R(+∞)=0
失效强度
f(t)
单位时间软件系统出现失效的概率
f(t)=F'(t)
平均失效前时间
MTTF
从t=0到故障发生时系统持续运行时间的期望值
MTTF=∫₀^∞ R(t)dt
平均恢复前时间
MTTR
从出现故障到修复成功中间的这段时间
MTTR越短表示易恢复性越好
平均故障间隔时间
MTBF
失效或维护中所需的平均时间,包括故障时间以及检测和维护设备的时间
MTBF=MTTF+MTTR

软件运行剖面(Operational Profile):对系统使用条件的定义,系统的输入值都用其按时间的分布或按它们在可能输入范围内的出现概率的分布来定义。

失效严重程度类:对用户具有相同程度影响的失效集合。

按对成本影响划分失效严重程度类(示例)

严重程度类
定义(人民币万元)
1
成本>100
2
10<成本≤100
3
1<成本≤10
4
0.1<成本≤1
5
成本<0.1

按对系统能力影响划分失效严重程度类(示例)

严重程度类
定义
1
系统崩溃,重要数据不可恢复
2
系统出错停止响应,重要数据可恢复
3
用户重要操作无响应,可恢复
4
部分操作无响应,但可用其他操作方式替代

可靠性目标参考表

失效严重程度类
可靠性要求/%
失效强度
平均无失效时间
1
99.9999
10⁻⁶
114年
2
99.99
10⁻⁴
417天
3
99
10⁻¹
4天
4
90
1
9小时

5个方面

  1. 软件失效可能造成灾难性后果
  2. 软件的失效在整个计算机系统失效中的比例较高(约80%与软件有关)
  3. 相比硬件可靠性技术,软件可靠性技术很不成熟
  4. 软件费用呈有增无减的势头,软件可靠性问题是造成费用增长的主要原因之一
  5. 软件对生产活动和社会生活的影响越来越大
类型
定义
广义的软件可靠性测试
为了最终评价软件系统的可靠性而运用建模、统计、试验、分析和评价等一系列手段对软件系统实施的一种测试
狭义的软件可靠性测试
为了获取可靠性数据,按预先确定的测试用例,在软件的预期使用环境中,对软件实施的一种测试,也叫“软件可靠性试验”

可靠性测试的3个目的

  1.   发现软件系统在需求、设计、编码、测试和实施等方面的各种缺陷
  2.   为软件的使用和维护提供可靠性数据
  3.   确认软件是否达到可靠性的定量要求

9.2 软件可靠性建模

技术角度的5个主要因素

因素
含义
运行剖面(环境)
一样的软件在不同的运行剖面下,可靠性表现不一样
软件规模
软件越大,包含缺陷数可能越多
软件内部结构
内部结构越复杂,缺陷数可能越多
软件的开发方法和开发环境
结构化方法可明显减少缺陷数
软件的可靠性投入
包括人力、资金、资源和时间等

模型4个组成部分

  1. 模型假设
  2. 性能度量
  3. 参数估计方法
  4. 数据要求

3个共同假设

假设
含义
代表性假设
软件测试用例的选取代表软件实际的运行剖面
独立性假设
软件失效独立发生于不同时刻,一个软件失效的发生不影响另一个
相同性假设
所有软件失效的后果(等级)相同

好的软件可靠性模型应具有的重要特性

  1.   基于可靠的假设
  2.   简单
  3.   计算一些有用的量
  4.   给出未来失效行为的好的映射
  5.   可广泛应用

10类模型

序号
模型类别
核心内容
1
种子法模型
利用捕获—再捕获抽样技术估计程序中的错误数
2
失效率类型模型
研究程序的失效率
3
曲线拟合类模型
用回归分析研究软件复杂性、缺陷数、失效率、失效间隔时间
4
可靠性增长模型
预测软件在检错过程中的可靠性改进,用增长函数描述改进过程
5
程序结构分析模型
根据程序、子程序及其相互间的调用关系,形成可靠性分析网络
6
输入域分类模型
选取软件输入域中的某些样本“点”运行程序,推断软件的使用可靠性
7
执行路径分析方法模型
先计算程序各逻辑路径的执行概率和错误路径的执行概率,再综合出使用可靠性
8
非齐次泊松过程模型(NHPP)
以软件测试过程中单位时间的失效次数为独立泊松随机变量,预测累计失效数
9
马尔可夫过程模型
完全改错的线性死亡模型、不完全改错的线性死亡模型等
10
贝叶斯模型
利用失效率的试验前分布和当前的测试失效信息,评估软件可靠性

Musa和Okumoto的分类

分类维度
内容
时间域
自然或日历时间与执行(CPU)时间
失效数类
有限失效数与无限失效数
失效数分布
泊松分布型和二项分布型
有限类
用时间表示的失效强度的函数形式
无限类
用经验期望失效数表示的失效强度的函数形式

9.3 软件可靠性管理

定义:软件工程管理的一部分,以全面提高和保证软件可靠性为目标,以软件可靠性活动为主要对象,是把现代管理理论用于软件生命周期中的可靠性保障活动的一种管理形式。

各阶段可靠性活动

阶段
主要可靠性活动
需求分析阶段
确定可靠性目标、分析影响可靠性的因素、确定验收标准、制定管理框架、制定文档规范、制订初步计划、确定数据收集规范
概要设计阶段
确定可靠性度量、制定详细验收方案、可靠性设计、收集数据、调整计划、明确后续计划、编制文档
详细设计阶段
可靠性设计、可靠性预测、调整计划、收集数据、明确后续计划、编制文档
编码阶段
可靠性测试(含于单元测试)、排错、调整计划、收集数据、明确后续计划、编制文档
测试阶段
可靠性测试(含于集成测试、系统测试)、排错、可靠性建模、可靠性评价、调整计划、收集数据、明确后续计划、编制文档
实施阶段
可靠性测试(含于验收测试)、排错、收集数据、调整模型、可靠性评价、编制文档

9.4 软件可靠性设计

设计原则

  1.   软件可靠性设计是软件设计的一部分,必须在软件的总体设计框架中使用,不能与其他设计原则相冲突
  2.   在满足提高软件质量要求的前提下,以提高和保障软件可靠性为最终目标
  3.   应确定软件的可靠性目标,不能无限扩大化,排在功能度、用户需求和开发费用之后考虑

主要技术

技术
子技术
核心内容
容错设计
恢复块设计
选择一组操作作为容错设计单元,把普通程序块变成恢复块,包含若干功能相同、设计差异的程序块文本,一旦故障则用备份文本替换
容错设计
N版本程序设计
设计出多个模块或不同版本,对相同初始条件和相同输入的操作结果实行多数表决,防止某一模块/版本故障提供错误服务
容错设计
冗余设计
在一套完整软件系统之外,设计不同路径、不同算法或不同实现方法的模块或系统作为备份,出现故障时替换
检错设计
—
在软件出现故障后能及时发现并报警,提醒维护人员处理。考虑4要素:检测对象、检测延时、实现方式、处理方式
降低复杂度设计
—
在保证实现软件功能的基础上,简化软件结构,缩短程序代码长度,优化软件数据流向,降低软件复杂度
系统配置技术
双机热备技术
两台服务器系统和一个外接共享磁盘阵列柜和相应的双机热备份软件组成;采用“心跳”方法保证主系统与备用系统的联系
系统配置技术
服务器集群技术
一组相互独立的服务器在网络中组合成为单一的系统工作,并以单一系统的模式加以管理

双机热备3种工作模式

模式
说明
双机热备模式
Active/Standby方式,Active服务器工作,Standby服务器监控准备
双机互备模式
两个相对独立的应用在两台机器同时运行,彼此均设为备机
双机双工模式
两台服务器均处于活动状态,同时运行相同的应用,实现负载均衡和互为备份

9.5 软件可靠性测试

主要活动:可靠性目标的确定、运行剖面的开发、测试用例的设计、测试实施、测试结果的分析。

  • 为软件的使用行为建模,建模可以采用马尔可夫链来完成
  • 开发使用模型涉及将输入域分层,有两种类型:用户级分层和用法级分层
  • 定义使用概率的最佳方法是使用实际的用户数据

典型测试用例应包含

  1.   测试用例标识
  2.   被测对象
  3.   测试环境及条件
  4.   测试输入
  5.   操作步骤
  6.   预期输出
  7.   判断输出结果是否符合标准
  8.   测试对象的特殊需求

可靠性测试用例设计时重点考虑的特殊情况

序号
测试目的
描述
1
屏蔽用户操作错误
考虑对用户常见的误操作的提示和屏蔽情况
2
错误提示的准确性
对用户的错误提示准确描述
3
错误是否导致系统异常退出
有无操作错误引起系统异常退出的情况
4
数据可靠性
系统应对输入的数据进行有效性检查,对冗余的数据进行过滤、校验和清洗
5
异常情况的影响
考察数据和系统的受影响程度,若受损,是否提供补救工具

4类可靠性数据

类型
含义
失效时间数据
记录发生一次失效所累积经历的时间
失效间隔时间数据
记录本次失效与上一次失效间的间隔时间
分组时间内的失效数
记录某个时间区内发生了多少次失效
分组时间的累积失效数
记录到某个区间的累积失效数

测试记录必须包含的信息

  1.   测试时间
  2.   含有测试用例的测试说明或标识
  3.   所有与测试有关的测试结果,包括失效数据
  4.   测试人员

9.6 软件可靠性评价

3个方面

  1.   选择可靠性模型
  2.   收集可靠性数据
  3.   可靠性评估和预测
考虑方面
内容
模型假设的适用性
模型假设要符合软件系统的现有状况,或与假设冲突的因素在软件系统中应该是可忽略的
预测的能力与质量
模型根据现在和历史的可靠性数据,预测将来的可靠性和失效概率的能力,以及预测结果的准确程度
模型输出值能否满足可靠性评价需求
最重要的几个需要精确估计的可靠性定量指标:当前可靠度、平均无失效时间、故障密度、期望达到规定可靠性目标的日期、达到规定可靠性目标的成本要求
模型使用的简便性
模型需要的数据易于收集、简单易懂、便于使用

5个有待解决的问题

  1.   可靠性数据的规范不统一
  2.   数据收集工作的连续性不能保证
  3.   缺乏有效的数据收集手段
  4.   数据的完整性不能保证
  5.   数据质量和准确性不能保证

可行办法

  1.   及早确定所采用的可靠性模型,以确定需要收集的可靠性数据
  2.   制订可实施性较强的可靠性数据收集计划,指定专人负责
  3.   重视软件测试特别是可靠性测试产生的测试数据的整理和分析
  4.   充分利用数据库来完成可靠性数据的存储和统计分析

主要目的:评估软件系统的可靠性状况和预测将来一段时间的可靠性水平。

常见需要解答的问题

  1.   判断是否达到了可靠性目标,是否达到了软件付诸使用的条件,是否达到了中止测试的条件
  2.   如未能达到,要再投入多少时间、人力和资金才能达到可靠性目标或投入使用
  3.   在软件系统投入实际运行一年或若干时间后,经过维护、升级和修改,软件能否达到交付或部分交付用户使用的可靠性水平

辅助方法

方法
内容
失效数据的图形分析法
累积失效个数图形、单位时间段内的失效数的图形、失效间隔时间图形
试探性数据分析技术(EDA)
循环相关、短期内失效数的急剧上升、失效数集中的时间段

三、考试重点速查表

考点
上午
案例
论文
重要程度
软件可靠性定义及4个不同点
★★
★
★
中
MTTF/MTTR/MTBF计算公式
★★★★
★★★★★
★★★
极高
可靠度R(t)=1-F(t)
★★★
★★★★
★★
高
串联/并联/表决系统可靠度计算
★★★
★★★★★
★★
极高
失效严重程度类划分
★★
★
★
中
可靠性测试的3个目的
★★
★
★
中
10类可靠性模型
★★
★
★
中
容错设计(恢复块/N版本/冗余)
★★★
★★★
★★★
高
双机热备3种模式
★★★
★★
★★
中高
服务器集群技术
★★
★★
★★
中
可靠性测试用例设计
★★
★★
★
中
可靠性评价3个方面
★★
★
★
中

相关学习资料