定义(原文级背诵):软件可靠性是指在规定的时间内,软件不引起系统失效的概率。该概率是系统输入和系统使用的函数,也是软件中存在的缺陷的函数;系统输入将确定是否会遇到已存在的缺陷。
可靠性目标:用户对软件性能满意程度的期望,用可靠度、平均失效时间(MTTF)、故障强度等描述。
可靠性测试的意义 5 条:① 软件失效可能造成灾难性后果;② 软件失效在计算机系统失效中比例较高;③ 相比硬件可靠性技术,软件可靠性技术不成熟;④ 软件可靠性问题造成软件费用增长;⑤ 系统对软件依赖性强,对生产活动和社会生活影响日益增大。
广义 vs 狭义可靠性测试:广义——为最终评价可靠性,运用建模、统计、试验、分析和评价等一系列手段实施的测试;狭义——为获取可靠性数据,按预先确定的测试用例,在软件预期使用环境中实施的测试。
影响可靠性的因素 5 个:运行环境、软件规模、软件的内部结构、软件开发方法和开发环境、软件的可靠性投入。
建模方法 10 种(认得出即可):种子法、失效率类、曲线拟合类、可靠性增长、程序结构分析、输入域分类、执行路径分析、非齐次泊松过程、马尔可夫过程、贝叶斯分析。模型有预测能力与质量、假设适用性等特性——评价模型时从"模型假设的适用性、预测的能力与质量、输出值能否满足评价需求、使用的简便性"4 方面选择。
四大设计技术:容错设计技术、检错技术、降低复杂度设计、系统配置技术。
| 技术 | 内容 | 关键辨析 |
|---|---|---|
| 容错设计 | ① 恢复块设计:选择一组操作作为容错设计单元,把普通程序块变成恢复块(主块失败→后备块接管) | 恢复块=后向恢复、动态备用、接受测试;N 版本=前向恢复、多数表决、多版本并行——"表决=N 版本,接受测试=恢复块"(与 H14 容错呼应) |
| ② N 版本程序设计:多个模块/不同版本,相同初始条件与输入,对结果实行多数表决,防某一版本故障提供错误服务 | ||
| ③ 冗余设计:完整系统之外设计不同路径、不同算法或不同实现方式的模块/系统作备份,故障时替换 | ||
| 检错技术 | 自动检错报告,不能自动解决故障、需人工干预 | 代价低于容错和冗余;四要素:检测对象、检测延时、实现方式、处理方式(真题:选"检测延时") |
| 降低复杂度设计 | 保证功能基础上简化结构、缩短代码、优化数据流向 | 复杂度与可靠性负相关 |
| 系统配置技术 | 双机热备 + 服务器集群 | 双机三种模式辨析见下图;集群节点故障时应用被另一节点自动接管 |
可靠性测试流程 5 环节:可靠性目标的确定、运行剖面的开发、测试用例的设计、测试实施、测试结果分析。运行剖面=为软件的使用行为建模、开发使用模型,明确需测试内容;测试用例要能反映实际使用情况,优先测试最重要和最频繁使用的功能。
用时间定义的可靠性数据 4 类:失效时间数据、失效间隔时间数据、分组时间内的失效数、分组时间的累积失效数。
可靠性评价三步:① 选择可靠性模型;② 收集可靠性数据;③ 可靠性评估和预测。数据收集可行办法 4 条:尽可能早地确定可靠性模型、数据收集计划要有较强可操作性、重视测试数据的分析和整理、充分利用技术手段(数据库技术)完成分析统计。评估预测以可靠性模型分析为主,以失效数据的图形分析法和试探性数据分析技术等为辅。