系统架构设计师—系统架构设计篇—软件可靠性
文章目录
- 软件可靠性的定义
- 软件可靠性定量描述
- 可靠度
- 失效强度
- 平均失效前时间
- 平均恢复前时间
- 平均故障间隔时间
- 可靠性测试
- 广义的可靠性测试
- 狭义的可靠性测试
- 可靠性测试的目的
- 影响软件可靠性的因素
- 软件可靠性的建模方法
- 可靠性模型的组成
- 好的可靠性模型
- 可靠性模型分类
- 软件可靠性管理
- 需求分析阶段
- 概要设计阶段
- 详细设计阶段
- 编码阶段
- 测试阶段
- 实施阶段
- 容错技术
- N版本程序设计
- 恢复块设计
- 冗余设计
- 检错技术
- 系统配置技术
- 软件可靠性测试
- 软件可靠性评价
- 可靠性评价过程
- 选择可靠性模型
- 收集可靠性数据
- 可靠性评估和预测
软件可靠性的定义
软件可靠性(Software Reliability)是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。
软硬件可靠性的不同点:
- 复杂性
- 软件失效可能性大于硬件
- 物理退化
- 硬件有物理退化,软件没有
- 唯一性
- 软件唯一,硬件不唯一
- 版本更新快
- 软件更新比硬件快
软件可靠性定量描述
可靠度
软件规定的条件下、规定的时间内不发生失效的概率
失效强度
单位时间软件系统出现失效的概率
平均失效前时间
Mean Time To Failure,MTTF:从t=0时,到故障发生时,系统的持续运行时间的期望值,不包括老化失效。
平均恢复前时间
Mean TIme To Restoration,MTTR:从出现故障到修复成功的一段时间。
平均故障间隔时间
Mean Time Between Failures,MTBF:失效或维护中所需的平均时间,包括故障时间以及检测和维护设备的时间。
MTBF = MTTF + MTTR
可靠性测试
广义的可靠性测试
为了最终评价软件系统的可靠性而运用建模、统计、实验、分析和评价等一系列手段对软件系统实施的一种测试。
狭义的可靠性测试
为了获取可靠性数据,按预先确定的测试用例,在软件的预期使用环境中,对软件实施的一种测试。
可靠性测试的目的
- 发现软件系统的缺陷
- 需求分析
- 软件设计
- 系统编码
- 测试实施
- 为软件的使用和维护提供可靠性依据
- 确认软件是否达到可靠性的定量要求
影响软件可靠性的因素
- 运行环境
- 软件规模
- 软件的内部结构
- 软件的开发方法和开发环境
- 软件的可靠性投入
软件可靠性的建模方法
可靠性模型的组成
- 模型的假设
- 代表性假设
- 独立性假设
- 相同性假设
- 性能度量
- 参数估计方法
- 数据要求
好的可靠性模型
- 基于可靠的假设
- 简单
- 计算一些有用的量
- 给出未来失效行为的好的映射
- 可广泛应用
可靠性模型分类
模型 | 特点 |
---|---|
种子法模型 | 预先在程序中播种错误“种子”,根据测试找出错误以及估计残留错误数量。 |
失效率类模型 | 用来研究程序的失效率。 |
曲线拟合类模型 | 用回归分析的方法研究软件复杂性、程序中的缺陷数、失效率、失效间隔时间,包括参数方法和非参数方法两种。 |
可靠性增长模型 | 预测软件在检错过程中的可靠性改进,用增长函数来描述软件的改进过程。 |
程序结构分析模型 | 根据程序、子程序及其相互间的调用关系,形成一个可靠性分析网络。 |
输入域分类模型 | 选取软件输入域中的某些样本“点”运行程序,根据这些样本点在“实际”使用环境中的使用概率的测试运行时的成功/失效率,推断软件的使用可靠性。 |
执行路径分析方法模型 | 先计算程序各逻辑路径的执行概率和程序中错误路径的执行概率,再综合出该软件的使用可靠性。 |
非其次泊松过程模型 | 以软件测试过程中单位时间的失效次数为独立泊松随机变量,来预测在今后软件的某种使用时间点的累计失效数。 |
马尔科夫过程模型 | 用于预测未来的数据模型。 |
贝叶斯分析模型 | 利用失效率的试验前分布和当前的测试失效信息,来评估软件的可靠性。 |
软件可靠性管理
需求分析阶段
分析目标,制定框架、规范、计划。
- 确定软件的可靠性目标。
- 分析可能影响可靠性的因素。
- 确定可靠性的验收标准。
- 制定可靠性管理框架。
- 制定可靠性文档编写规范。
- 制定可靠性活动初步计划。
- 制定可靠性数据收集规范。
概要设计阶段
确定度量,制定验收方案,收集数据,调整计划。
- 确定可靠性度量
- 制定详细的可靠性验收方案
- 调整可靠性活动计划。
- 收集可靠性数据
- 明确后续阶段的可靠性活动的详细计划。
- 编制可靠性文档。
详细设计阶段
设计、预测,收集数据,调整计划。
- 可靠性设计
- 可靠性预测(确定可靠性度量估计值)
- 调整可靠性活动计划。
- 收集可靠性数据
- 明确后续阶段的可靠性活动的详细计划。
- 编制可靠性文档。
编码阶段
测试、排错,收集数据,调整计划。
- 可靠性测试(单元测试)
- 排错
- 调整可靠性活动计划。
- 收集可靠性数据
- 明确后续阶段的可靠性活动的详细计划。
- 编制可靠性文档。
测试阶段
测试、排错,建模、评价,收集数据,调整计划。
- 可靠性测试(集成测试、系统测试)
- 排错
- 可靠性建模
- 可靠性评价
- 调整可靠性活动计划。
- 收集可靠性数据
- 明确后续阶段的可靠性活动的详细计划。
- 编制可靠性文档。
实施阶段
验收、排错,收集数据,调整计划。
- 可靠性测试(验收测试)
- 排错
- 调整可靠性活动计划。
- 收集可靠性数据
- 明确后续阶段的可靠性活动的详细计划。
- 编制可靠性文档。
容错技术
- 恢复块设计
- N版本程序设计
- 冗余设计
N版本程序设计
多版本程序,相同的输入,表决结果,少数服从多数。
前向恢复:表决,选取正确结果,避免错误。
恢复块设计
主块测试不合格时,调用备用块验证,直到通过测试。
冗余设计
另起炉灶,建立一套完全不同的系统,冗余设计。
检错技术
- 检错对象
- 检错延时
- 实现方式
- 处理方式
系统配置技术
- 双机热备
- A服务器是工作状态
- B服务器是监控准备状态
- 主要应用运行于主机,备机做备用。
- 双机互备
- A服务器是工作状态A
- B服务器是工作状态B
- 部分应用运行于主机,部分应用运行于备机。
- 双机双工
- A、B服务器都是工作状态
- 两台机器同时运行应用。
软件可靠性测试
- 可靠性目标的确定
- 运行剖面的开发
- 测试用例的设计
- 测试实施
- 测试结果分析
- 进度、成本
测试报告的内容:
- 软件产品标识
- 测试环境配置(软件和硬件)
- 测试依据
- 测试问题
- 测试结果
- 测试时间
软件可靠性评价
可靠性评价过程
选择可靠性模型
- 模型假设的适用性
- 预测的能力与质量
- 模型输出值能否满足可靠性评价需求
- 模型使用的简便性
收集可靠性数据
- 尽早确定可靠性模型
- 制定数据收集计划
- 重视测试产生的数据
- 利用数据库分析
可靠性评估和预测
- 评估和预测依赖于可靠性模型