基本概念
- 软件产品在规定的条件下和规定的时间区间完成规定功能的能力
- 软件可靠性与硬件可靠性的区别
- 软件复杂性比硬件高
- 软件不存在物理退化
- 软件是唯一的
- 硬件更新较慢,软件较快
- 软件可靠性的定量描述
- 规定时间
- 失效概率
- 可靠度
- 失效强度
- 平均失效时间 MTTF:发生故障前正常运行的时间
- 平均恢复前时间 MTTR:发生故障后的修复时间
- 平均故障间隔时间 MTBF = MTTF + MTTR,失效或维护中所需的平均时间
- 串并联系统的可靠性
- 假设每个设备的可靠性是 R1、R2 … Rn
- 串联系统:R = R1*R2*…*Rn
- 并联系统:R=1-(1-R1)*(1-R2)*…*(1-Rn)
- 意义
- 失效会造成灾难性后果
- 失效在整个计算机系统失效中比例较高
- 软件可靠性技术很不成熟
- 软件可靠性问题是造成费用增长的主要原因之一
- 软件对生产活动和社会生活的影响越来越大
- 广义的软件可靠性测试:运用建模、统计、试验、分析和评价等一系列手段对软件系统实施的一种测试
- 狭义的软件可靠性测试:获取可靠性数据,按预先确定的测试用例,在软件的预期使用环境中,对软件实施的一种测试
软件可靠性建模
- 为预计或估算软件的可靠性所建立的可靠性框图和数学模型
- 影响软件可靠性的主要因素包括:运行环境、软件规模、软件内部结构、软件的开发方法和开发环境、软件的可靠性投入
- 软件的可靠性模型组成
- 模型假设
- 性能度量
- 参数估计方法
- 数据要求
- 绝大多数模型包含三个共同假设
- 代表性假设
- 独立性假设
- 相同性假设
软件可靠性管理
- 目标:全面提高和保证软件可靠性
- 主要对象:软件可靠性活动
- 内容:软件工程的各个阶段的可靠性活动的目标、计划、进度、任务和修正措施
软件可靠性设计
- 保障软件可靠性最好的方法:软件设计阶段采取措施
- 可靠性设计即在常规的软件设计中,满足软件的可靠性要求
- 原则:
- 是软件设计的一部分
- 以提高和保障软件可靠性为最终目标
- 应确定软件的可靠性目标
- 主要技术:容错设计、检错设计和降低复杂度设计
- 技术可分为避错技术和容错技术
- 避错:通过技术评审、系统测试和正确性证明等技术,在正式运行之前避免、发现和改正错误
- 容错:运行过程中发生一定的硬件故障或软件错误时,仍能保持正常工作而不影响正确结果,主要采用冗余方法
- 冗余是容错技术的基础
- 主要方法是提供足够的冗余信息和算法程序,使系统在实际运行时能够及时发现程序设计错误,采取补救措施
- 软件容错技术有 N 版本程序设计、恢复块方法和防卫式程序设计等
- N 版本程序设计:N 个具有相同功能的程序同时执行一项计算,多数表决来选择结果。N 个版本的程序由不同的人独立设计、使用不同的方法、设计语言、开发环境和工具来实现
- 恢复块设计(动态冗余):多重模块待机储备,当出现错误时,用一个备用的模块来代替并重新运行,各备用模块在待机时可一样工作、也可以不工作
- 防卫式程序设计:不采取任何传统的容错技术就能实现软件,在程序中包含错误检查代码和错误恢复代码,使得一旦发生错误,程序就能撤销错误状态,恢复到一个已知的正确状态中去
- 双机容错技术:软硬件结合,两台服务器和一个外接共享磁盘阵列以及相应的双机软件组成
- 心跳方法保证联系,按照一定的时间间隔发送通信信号
- 工作模式:双机热备模式、双机互备模式、双机双工模式
- 集群技术:多台计算机组织起来协同工作,每台计算机承担部分计算任务和容错任务,通过计算机的负载转嫁机制完成新的负载分担
- 负载均衡:集群系统中的一项重要技术,目的是加快集群系统的响应速度,提高客户端访问的成功概率,最大特征是多个节点的并行和共同工作,如何让所有节点承受的负荷平衡,主要技术
- 基于特定软件的负载均衡(应用层):重定向
- 基于 DNS 的负载均衡属于传输层负载均衡
- 基于 NAT 的负载均衡
- 反向代理负载均衡
- 混合型负载均衡
软件可靠性测试与评价
- 由以下活动组成
- 可靠性目标的确定
- 运行剖面的开发
- 测试用例的设计
- 测试实施
- 测试结果的分析
- 运行步骤:定义软件运行的剖面 —— 设计可靠性测试用例 —— 实施可靠性测试
- 可靠性评价的三个过程:选择可靠性模式、收集可靠性数据、可靠性评估和预测
- 可靠性数据的收集:收集软件失效数据
- 可靠性评估和预测:判断是否达到了可靠性目标