原子标签索引:[概念×14 | 机制×3 | 流程×4 | 分类×5 | 判据×4 | 数据×3 | 案例×3] 上游:第2章(质量属性)、第7章(软件测试) 下游:第10章(架构可靠性演化操作)、第16章(可靠性设计)
标准表述
- 软件可靠性:软件产品在规定的条件下和规定的时间区间内完成规定功能的能力。
- IEEE(1983年,1989年被我国国标 GB/T-11457 采用):在规定条件下、规定时间内,软件不引起系统失效的概率;该概率是系统输入和使用的函数,也是软件中存在缺陷的函数。
- 软件可靠性的度量时间是"运行时间",包括工作与挂起(开启但空闲)的累计时间。
- 规定时间有三种:自然(日历)时间、运行时间、执行时间(CPU 时间);用执行时间度量可靠性最准确。
- 失效概率 F(t):F(0)=0,在 (0,+∞) 单调递增,F(+∞)=1(呼应"任何软件都存在缺陷")。
- 可靠度公式:R(t) = 1 - F(t)(式9-1);R(0)=1,R(+∞)=0。
- 失效强度 f(t):单位时间系统出现失效的概率,即 F(t) 对时间的导数:f(t) = dF(t)/dt(式9-2)。
- MTTF(平均失效前时间):从 t=0 到故障发生时系统持续运行时间的期望值;适用于不可修复系统。
- MTTR(平均恢复前时间):从出现故障到修复成功的时间期望,含确认失效、记录、重新投入使用的时间;MTTR 越短易恢复性越好。
- MTBF(平均故障间隔时间):对可靠度服从指数分布的系统,MTBF = MTTF + MTTR。
- 失效严重程度类:对用户具有相同程度影响的失效集合,通常按数量级划分等级。
- 可靠性目标:客户对软件性能满意程度的期望,通常用可靠度、失效强度、MTTF 描述。
- 运行剖面(ESA 标准 PSS-01-21):对系统使用条件的定义,输入值按时间分布或出现概率分布来定义。
- 广义可靠性测试:运用建模、统计、试验、分析、评价等手段评价软件可靠性的测试。
- 狭义可靠性测试(可靠性试验):为获取可靠性数据,按预先确定的测试用例,在预期使用环境中实施的面向缺陷的测试。
- 软件可靠性模型:为预计或估算软件可靠性所建立的可靠性框图和数学模型。
- 保障软件可靠性最有效、最经济、最重要的手段:在软件设计阶段采取措施进行可靠性控制。
- 软件可靠性管理:软件工程管理的一部分,以全面提高和保证软件可靠性为目标,贯穿软件生命周期。
- 计算机系统失效中约 80% 与软件有关。
- 可靠性数据(按时间定义)可分四类且可互相转化。
蒸馏笔记
概念
- 软件可靠性:规定条件+规定时间+规定功能下的完成能力;只体现在运行阶段。
- 失效概率 F(t):从运行开始到时刻 t 出现失效的概率,关于运行时间的随机函数。
- 可靠度 R(t):规定条件下规定时间内不失效的概率,R(t)=1-F(t)。
- 失效强度 f(t):单位时间出现失效的概率,f(t)=dF(t)/dt。
- MTTF:平均失效前时间(不可修复系统的平均寿命,不含老化失效)。
- MTTR:平均恢复前时间(随机变量恢复时间的期望)。
- MTBF:平均故障间隔时间,含故障时间及检测、维护设备的时间。
- 失效严重程度类:对用户具有相同程度影响的失效集合。
- 软件回合(Run):规定环境下一个基本执行过程(一组输入到对应输出的过程),是软件运行最小不可分的执行单位。
- 运行剖面:软件运行环境的描述,即测试环境、测试数据等"规定条件"的定义。
- 可靠性管理:把可靠性活动贯穿软件开发全过程的管理形式。
- 可靠性设计:常规设计中应用方法技术,把可靠性"设计"到软件中去。
- 容错设计:失效后果特别严重场合采用,故障后系统仍能提供服务。
- 检错设计:故障后及时发现并报警,提醒人工处理,代价低于容错/冗余。
- 降低复杂度设计:简化结构、缩短代码、优化数据流向以提升可靠性。
软件 vs 硬件可靠性 4 个不同点:
| 角度 | 软件 | 硬件 |
|---|---|---|
| 复杂性 | 高,设计错误是失效主因 | 相对简单 |
| 物理退化 | 不存在;正确的软件任何时刻均可靠 | 失效主要因物理退化 |
| 唯一性 | 唯一,复制不改变本身(概率方法不适用) | 无两个绝对相同(概率方法成功) |
| 版本更新 | 较快,评估难度大 | 定型后一般不更改 |
机制
- 缺陷引入 →(运行剖面触发) 缺陷发现 →(修复活动+可靠性投入) 缺陷清除。
- 复杂度超过一定界限 → 缺陷数急剧上升 → 可靠性急剧下降。
- 失效影响 = 失效发生概率 × 失效严重程度。
流程
可靠性测试主要活动:①确定可靠性目标 → ②开发运行剖面 → ③设计测试用例 → ④测试实施 → ⑤测试结果分析。
可靠性评价三方面:①选择可靠性模型 → ②收集可靠性数据 → ③可靠性评估和预测。
各阶段可靠性管理活动要点(案例题答点): 1. 需求分析:定可靠性目标、分析影响因素、定验收标准、定管理框架与文档规范、订活动计划、定数据收集规范。 2. 概要设计:定可靠性度量、定验收方案、可靠性设计、收集数据、调整计划、编文档。 3. 详细设计:可靠性设计、可靠性预测(确定度量估计值)、调整计划、收集数据、编文档。 4. 编码:可靠性测试(含于单元测试)、排错、调整计划、收集数据、编文档。 5. 测试:可靠性测试(含于集成/系统测试)、排错、可靠性建模、可靠性评价、调整计划、收集数据、编文档。 6. 实施:可靠性测试(含于验收测试)、排错、收集数据、调整模型、可靠性评价、编文档。
运行剖面开发(用马尔可夫链建模): 1. 将输入域编码为状态集,弧表示激励导致的转换,弧上分配转换概率。 2. 开发使用模型,对输入域分层:用户级分层(谁/什么激励系统)、用法级分层(系统能做什么)。 3. 分配弧上概率:最优用实际用户数据 → 次优用用户/专家预期数据 → 最差为各弧均分概率。 4. 为关键操作单独定义运行剖面;边界、跃迁和关键功能应构造专门运行剖面补充测试。
分类体系
规定时间三概念:日历时间 / 运行时间 / 执行时间(CPU),可按经验比例折算。
可靠性模型 10 大类(封闭集合,考试常考): 1. 种子法模型——播种"种子"错误,按原始错误与诱导错误比例估计残留错误。 2. 失效率类模型——Jelinski-Moranda、Schick-Wolverton、几何泊松等。 3. 曲线拟合类模型——回归分析方法,分参数/非参数法。 4. 可靠性增长模型——Duane、Weibull、Gompertz 增长曲线等。 5. 程序结构分析模型——按模块调用关系建可靠性网络(Littlewood 马尔可夫结构等)。 6. 输入域分类模型——Nelson 模型等,难点是输入域概率分布的确定。 7. 执行路径分析方法模型——Shooman 分解模型。 8. 非齐次泊松过程模型(NHPP)——Musa 指数模型、Goel-Okumoto 等。 9. 马尔可夫过程模型——线性死亡模型等。 10. 贝叶斯模型——利用失效率试验前分布+当前测试失效信息评估。
可靠性模型的组成 4 部分:模型假设、性能度量、参数估计方法、数据要求。
软件容错设计 3 种技术: 1. 恢复块设计——若干功能相同、设计差异的文本,故障时备份替换(动态冗余)。 2. N 版本程序设计——多版本对相同输入实行多数表决;要求需求说明完全且精确、设计全过程不相关(不同人员、算法、语言、编译器、工具、测试方法)。 3. 冗余设计——不同路径/算法/实现方法的备份;相同两套软件互为备份意义不大。
检错设计 4 要素:检测对象(检测点+检测内容)、检测延时、实现方式(判返回值/运行时间/状态标志位)、处理方式(查错→停机→报警 或 不停机)。
软件复杂性分类:模块复杂性(内部数据流向+程序长度)、结构复杂性(模块间关联程度)。
用时间定义的可靠性数据 4 类(可互相转化):失效时间数据、失效间隔时间数据、分组时间内的失效数、分组时间的累积失效数。
系统配置容错技术: - 双机热备 3 模式:双机热备模式(Active/Standby,备机浪费资源)、双机互备模式(两应用互为备份,对性能要求高)、双机双工模式(两机均活动,负载均衡+互备,Web/FTP 常用)。 - "心跳":主从系统按一定时间间隔互发通信信号表明运行状态。 - 服务器集群:一组独立服务器组合成单一系统模式管理,故障自动接管。
判据
好模型的 5 特性:基于可靠的假设;简单;计算有用的量;给出未来失效行为的好的映射;可广泛应用。
模型共同假设 3 条:代表性假设(测试用例代表实际运行剖面)、独立性假设(失效独立发生)、相同性假设(不区分失效严重等级)。
选择可靠性模型的 4 方面: 1. 模型假设的适用性(假设须符合软件系统现状)。 2. 预测的能力与质量(优先选成熟、应用广的模型)。 3. 模型输出值满足评价需求(当前可靠度、平均无失效时间、故障密度、达到目标的日期和成本)。 4. 模型使用的简便性(数据易收集、简单易懂、便于用工具实现)。
可靠性测试 3 目的:①发现需求/设计/编码/测试/实施等方面的缺陷;②为使用维护提供可靠性数据;③确认是否达到可靠性定量要求。
可靠性测试实施判据:受控测试;同一测试用例须用相同软件版本(新版本=新测试开始);非统计测试在可靠性测试之前完成则统计数据仍有效,之后执行会影响评估准确性;测试中可"强化输入"(比正常更恶劣的合理输入)。
数据
公式(必须一字不差): - R(t) = 1 - F(t),其中 R(0)=1,R(+∞)=0;F(0)=0,F(+∞)=1。 - f(t) = dF(t)/dt(失效强度)。 - MTBF = MTTF + MTTR(适用于可靠度服从指数分布的系统)。
表9-1 按成本影响划分严重程度类(万元):1级>100;2级(10,100];3级(1,10];4级(0.1,1];5级<0.1。
表9-3 可靠性目标参考表:
| 严重程度类 | 可靠性要求 | 失效强度 | 平均无失效时间 |
|---|---|---|---|
| 1 | 99.9999% | 10⁻⁶ | 114年 |
| 2 | 99.99% | 10⁻⁴ | 417天 |
| 3 | 99% | 10⁻² | 4天 |
| 4 | 90% | 10⁻¹ | 9小时 |
(注:docx 提取版负号大量丢失,原书排版为 10⁻⁶/10⁻⁴/10⁻²/10⁻¹。校订依据:①可靠性要求对应失效数量级——99.9999%→10⁻⁶、99.99%→10⁻⁴、99%→10⁻²、90%→10⁻¹;②失效强度≈1/平均无失效时间——114年≈10⁶h、417天≈10⁴h、4天≈96h→10⁻²、9h→10⁻¹,两条线索互相印证。)
典型测试用例 8 个组成部分(封闭集合):①测试用例标识;②被测对象;③测试环境及条件;④测试输入;⑤操作步骤;⑥预期输出;⑦判断输出结果是否符合标准;⑧测试对象的特殊需求。
案例
- 美国 Fortran 控制程序少一个逗号致宇宙飞行失败——说明软件失效可致灾难(9.1.4)。
- 某研究机构统计:计算机系统失效中 80% 与软件有关(9.1.4)。
- 飞行控制软件在正常飞行/起飞/降落/地面运动/地面等待 5 状态中,起飞降落占运行剖面比例小却占故障比例大——说明不能用简单运行剖面对待关键功能(9.5.2)。
易错点 / 边界情况
- MTBF = MTTF + MTTR,别记反;MTTF 是"失效前",MTTR 是"恢复前"。
- 可靠度与失效概率互补:R(0)=1 而 F(0)=0;R(+∞)=0 而 F(+∞)=1。
- 度量可靠性"最准确"的时间基准是执行时间(CPU 时间),不是日历时间。
- 软件无物理退化:正确的软件任何时刻均可靠;但正确的硬件可能在某时刻失效。
- 概率方法在硬件可靠性成功、软件领域不满意的原因是软件"唯一性"。
- 冗余设计备份必须是不同路径/算法/实现;相同两套软件互备份无意义。
- N 版本要求各版本设计不相关,甚至设计人员教育背景、地域、国家不同。
- 检错技术代价低于容错,但不能自动解决故障,须人工干预。
- 可靠性设计原则:目标不能无限扩大化,排在功能度、用户需求和开发费用之后考虑。
- 无失效发生≠可靠度为 1.0;此时可假设二项式分布做保守估计。
- 数据质量重要性:用不准确数据评价的误差可能比模型预测误差大一个数量级。
- 可靠性数据收集贯穿整个软件生命周期,主要在测试、实施阶段收集。
- 欧空局标准编号 PSS-01-21(1991);我国国标为 GB/T-11457(1989 年采用 IEEE 定义)。