【2024软考架构师自学笔记】8.软件可靠性基础知识

文章目录

  • 8.1 软件可靠性基本概念
    • 8.1.1软件可靠性定义
    • 8.1.2软件可靠性的定量描述
    • 8.1.3可靠性目标
    • 8.1.4可靠性测试的意义
    • 8.1.5广义的可靠性测试与狭义的可靠性测试
  • 8.2 软件可靠性建模
    • 8.2.1影响软件可靠性的因素
    • 8.2.2软件可靠性的建模方法
    • 8.2.3软件的可靠性模型分类
  • 8.3 软件可靠性管理
  • 8.4 软件可靠性设计
    • 8.4.1容错设计技术
    • 8.4.2检错技术
    • 8.4.3降低复杂度设计
    • 8.4.4系统配置技术
  • 8.5 软件可靠性测试
    • 8.5.1软件可靠性测试概述
    • 8.5.2定义软件运行剖面
    • 8.5.3可靠性测试用例设计
    • 8.5.4可靠性测试的实施
  • 8.6 软件可靠性评价
    • 8.6.1软件可靠性评价概述
    • 8.6.2怎样选择可靠性模型
    • 8.6.3可靠性数据的收集
    • 8.6.4软件可靠性的评估和预测


8.1 软件可靠性基本概念

8.1.1软件可靠性定义

软件可靠性 (Software Reliability) 是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。

8.1.2软件可靠性的定量描述

1.规定时间
自然时间、运行时间、执行时间
2.失效概率
3.可靠度
4.失效强度
5.平均失效前时间 MTTF(Mean Time To Failure)
6.平均恢复前时间 MTTR(Mean Time To Restoration)
7.平均故障间隔时间 MTBF(Mean Time Between Failures)
MTBF=MTTF+MTTR

8.1.3可靠性目标

8.1.4可靠性测试的意义

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

8.1.5广义的可靠性测试与狭义的可靠性测试

广义的软件可靠性测试是指为了最终评价软件系统的可靠性而运用建模、统计、试验、分析和评价等一系列手段对软件系统实施的一种测试。
狭义的软件可靠性测试是指为了获取可靠性数据,按预先确定的测试用例,在软件的预期使用环境中,对软件实施的一种测试。

8.2 软件可靠性建模

8.2.1影响软件可靠性的因素

(1)运行剖面(环境)
(2)软件规模
(3)软件内部结构
(4)软件的开发方法和开发环境
(5)软件的可靠性投入

8.2.2软件可靠性的建模方法

(1)模型假设:代表性假设、独立性假设、相同性假设
(2)性能度量
(3)参数估计方法
(4)数据要求

一个好的软件可靠性模型应该具有如下重要特性。
(1)基于可靠的假设。
(2)简单。
(3)计算一些有用的量。
(4)给出未来失效行为的好的映射。
(5)可广泛应用。

8.2.3软件的可靠性模型分类

● 种子法模型。
● 失效率类模型。
● 曲线拟合类模型。
● 可靠性增长模型。
● 程序结构分析模型。
● 输入域分类模型。
● 执行路径分析方法模型。
● 非齐次泊松过程模型。
● 马尔可夫过程模型。
● 贝叶斯分析模型。

8.3 软件可靠性管理

软件可靠性管理的内容包括软件工程各个阶段的可靠性活动的目标、计划、进度、任务和修正措施等。

8.4 软件可靠性设计

  • 软件可靠性设计要遵循一些原则:
    (1)软件可靠性设计是软件设计的一部分,必须在软件的总体设计框架中使用,并且不能与其他设计原则相冲突。
    (2)软件可靠性设计在满足提高软件质量要求的前提下,以提高和保障软件可靠性为最终目标。
    (3)软件可靠性设计应确定软件的可靠性目标,不能无限扩大化,并且排在功能度、用户需求和开发费用之后考虑。
  • 可靠性设计技术主要有:
    容错设计、检错设计、降低复杂度设计

8.4.1容错设计技术

常用的软件容错技术主要有:
1)恢复块设计
选择一组操作作为容错设计单元,从而把普通的程序块变成恢复块。
2)N版本程序设计
通过设计出多个模块或不同版本,对于相同初始条件和相同输入的操作结果,实行多数表决,防止其中某一软件模块/版本的故障提供错误的服务,以实现软件容错。
3)冗余设计

8.4.2检错技术

在软件系统中,对无须在线容错的地方或不能采用冗余设计技术的部分,如果对可靠性要求较高,故障有可能导致严重的后果。一般采用检错技术,在软件出现故障后能及时发现并报警,提醒维护人员进行处理。检错技术实现的代价一般低于容错技术和冗余技术,但它有一个明显的缺点,就是不能自动解决故障,出现故障后如果不进行人工干预,将最终导致软件系统不能正常运行。
采用检错设计技术要着重考虑几个要素:检测对象、检测延时、实现方式和处理方式。

8.4.3降低复杂度设计

8.4.4系统配置技术

1)双机热备技术
(1)双机热备模式,即通常所说的 Active/Standby方式。
(2)双机互备模式,是两个相对独立的应用在两台机器同时运行,但彼此均设为备机。
(3)双机双工模式是集群的一种形式,两台服务器均处于活动状态,同时运行相同的应用,以保证整体系统的性能,也实现了负载均衡和互为备份,通常使用磁盘柜存储技术。 Web服务器或FTP服务器等用此种方式比较多。
2)服务器集群技术
集群技术是指一组相互独立的服务器在网络中组合成为单一的系统工作,并以单一系统的模式加以管理。

8.5 软件可靠性测试

8.5.1软件可靠性测试概述

  • 软件可靠性测试方法:
    1)按行为或结构来划分输入域的:划分测试。
    2)纯粹随机选择输入的:随机测试。
    3)基于功能、路径、数据流或控制流的:覆盖测试。
  • 软件可靠性测试的主要活动:
    1)可靠性目标的确定
    2)运行剖面的开发
    3)测试用例的设计
    4)测试实施、测试结果的分析

8.5.2定义软件运行剖面

定义运行剖面首先需要为软件的使用行为建模,建模可以采用马尔可夫链来完成。

  • 用马尔可夫链
    1)将输入域编码为一个代表用户观点的软件使用的状态集。
    2)弧用来连接状态并表示由各种激励导致的转换,这些激励可能由硬件、人机接口或其他软件等产生。
    3)将转换概率分配给每个弧,用来代表一个典型用户最有可能施加给系统的激励。
    4)这种类型的马尔可夫链是一个离散的有限状态集,这类模型可以用有向图或转换矩阵表示。
    弧上的概率估计主要是基于如下几个方面:
    (1)从现有系统收集到的数据。
    (2)与用户的交谈或对用户进行观察获得的信息。
    (3)原型使用与测试分析的结果。
    (4)相关领域专家的意见。

8.5.3可靠性测试用例设计

一个典型的测试用例应该包括下列组成部分。
(1)测试用例标识。
(2)被测对象。
(3)测试环境及条件。
(4)测试输入。
(5)操作步骤。
(6)预期输出。
(7)判断输出结果是否符合标准。
(8)测试对象的特殊需求。

8.5.4可靠性测试的实施

软件可靠性测试同样依赖于软件的可测试性。可靠性测试的难点就在于判断测试用例的运行是成功还是失败。

8.6 软件可靠性评价

8.6.1软件可靠性评价概述

软件可靠性评价是软件可靠性活动的重要组成部分,既适用于软件开发过程,也可针对最终软件系统。
评估和预测软件可靠性的过程包含如下3个方面。
(1)选择可靠性模型。
(2)收集可靠性数据。
(3)可靠性评估和预测。

8.6.2怎样选择可靠性模型

从以下几个方面进行比较和选择:
1.模型假设的适用性
2.预测的能力与质量
3.模型输出值能否满足可靠性评价需求
4.模型使用的简便性

8.6.3可靠性数据的收集

可靠性数据主要是指软件失效数据,是软件可靠性评价的基础,主要是在软件测试、实施阶段收集的。

8.6.4软件可靠性的评估和预测

你可能感兴趣的:(笔记)