[架构之路-181]-《软考-系统分析师》-19- 系统可靠性分析与设计 - 2-容错性: 软件容错技术

news2024/11/24 9:44:17

目录

前言:

1 9 . 4 软件容错技术

19.4.1 N 版本程序设计

1 . 与 通 常 软 件 开 发 过 程 的 区 别

2 . 其 他 需 要 注 意 的 问 题

19.4.2 恢复块方法

19.4.3 防卫式程序设计(预防性设计)=》广泛使用

1 . 错误检测

2 . 破坏估计

3 . 错误恢复


前言:

可靠的系统与系统的可靠性 (产品的质量)

  • 依从性:守规矩、遵规律的能力 =》遵守研发规律、遵守软件工程规律、遵守设计流程、遵守编码规范、项目管理。一群有素养的人,按软件开发的规律做事,做出来的产品可靠性性质量不会太差。
  • 成熟性:长期不犯错的能力 =》 软件成熟度模型、充分性测试。
  • 容错性:偶尔犯小错不误事的能力。 =》 容错设计、DEFMA
  • 易恢复性:偶尔犯大错误事后的补救能力。=》恢复性设计。

可靠性不是天然的,是设计、测试、管控出来的,是需要有成本投入的。

大公司,会有一帮人,专门在研发如何提供产品的质量,如果把不同产品线的能力抽象出组织的公共能力,并以流程的方式推广的整个公司。

1 9 . 4 软件容错技术

软件容错的基本思想是从硬件容错中引申而来,利用软件设计冗余多样化來达到屏蔽错误影响,提高系统可靠性。

软件容错的主要方法是提供足够冗余信息算法程序,使系统在实际运行时能够及时发现程序设计错误,采取补救措施,以提高系统可靠性,保证整个系统的正常运行。

软件容错技术主要有:

  • N 版本程序设计
  • 恢复块方法
  • 防卫式程序设计等。

除上述3种方法外,提高软件容错能力也可以从

  • 计算机平台环境
  • 软件工程
  • 构造异常处理模块

等不同方面达到。此外,

  • 利用高级程序设计语言本身的容错能力,采取相应的策略,也是可行的办法。例如, C++语言中的 try _ except 处理法和 try fmally 中止法等。

19.4.1 N 版本程序设计

N 版本程序设计是一种静态故障屏蔽技术,采用前向恢复的策略,如 图 19-5所示。

N 版本程序的设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中#个版本的程序必须由不同的人(小组)独立设计,使用不同的方法、不同的设计语言、不同的开发环境和工具来实现,目的是减少#个版本的程序在表决点上相关错误的概率。

备注:

类似公司的决策部门的投票,避免因为一人的错误导致整个系统的风险。

一个人的决策总会有偏差、误差和错误。

1 . 与 通 常 软 件 开 发 过 程 的 区 别

与通常软件开发过程不同的是, N 版本程序设计增加了三个新的阶段,分别是相异成分规范评审、相异性确认和背对背测试。

(1) 相异成分评审。

每个版本的工作组均接收到一份相同的 S R S需求规格说明书 。

为了保证相异性,这些工作组之间不允许进行任何形式的交流,有关 S R S 的问题只能在工作组和项目管理人员之间进行交换,这种交换是通过问题单的形式进行的。对于各工作组提出的问题,由项目管理人员组成的 S R S 评审委员会对每个问题单进行研究。若是对 S R S 理解不正确,则向有关工作组进行解释;若是 S R S 本身问题,则修改 S R S , 并通知所有工作组。

(2) 相异性确认。

相异性确认在相异成分详细设计后进行,其目的是对相异性进行评估。

(3) 背对背测试。

使用同样的测试数据对 N 版本程序进行测试,将 W 个版本程序的运行结果进行比较,用以发现版本中的软件故障

2 . 其 他 需 要 注 意 的 问 题

与通常的软件开发相比,除了开发过程不同之外, N 版本程序设计还需要注意以下问题:

(1) N 版本程序的同步。

由于各种不同版本并行执行,有时甚至在不同的计算机中执行,必须解决彼此之间的同步问题

N 版本程序的同步机制除通常的帧同步之外,还有事件同步机制,以保证输入一致性和交叉检查点的正常工作。在 N 版本程序的同步机制中,需要引入超时处理,以解决失步问题。

(2) N 版本程序之间的通信。

由于 N 版本程序设计的独立性,不同版本的数据表示可能是不同的,因此,在N个版本程序之间进行数据通信时,必须进行数据变换。可将N个版本通信接 n 处的数据规定为一种独立于各个版本的统一的数据格式,任一版本发送数据时,需将该版本的内部数据表示转换为统一的数据表示;当任一版本接收其他版本的数据时,滯将统一的数据表示变换为内部所需的数据表示。

( 3 ) 表决算法。

在 N 版本程序设计中,通常有三种表决算法:

  • 全等表决(主要适用于布尔量的表决)、
  • 非精确表决(允许设置一个偏差,主要适用于数值量的表决)和
  • Cosmetie 表 决 (适用于字符串的表决)。 

(4 ) 一致比较问题。

在进行有限精度运算的情况下,计算的结果与所使用的特定算法和计算的顺序有关,在进行计算量比较时(例如,将某计算量与一常量进行比较),虽然这些计算量能满足 S R S 要求,但比较结果可以全然不同,最终导致在 N 版本表决时不能得出正确的结果。对于这个问题,比较好的解决方法是将需要进行比较的计算量进行一•次交叉表决,其缺点是降低了 N 版本程序的相异性,并使系统的实时性变差。

( 5 ) 数据相异性。

软件的故障往往仅在数据空间的个別点发生,当对这些个别点进行修正后,则软件仍可正常工作。这是由于实际情况对数据空间的任一点,往往允许有一定的误差,只要数据点在允许的误差范围内,则可看作是逻辑上等效的。因此,当软件在某个输入数据; c 上存在故障,输出不正确时,可选用适当的数据重新表示算法,计算 出 与 逻 辑 等 效 的 输 入 数 据 然 后 对 >;进行计算,从而得到正确的输出。

19.4.2 恢复块方法

N版本:并行、同时、对等

恢复块:串行、菊花链、优先级

19.4.3 防卫式程序设计(预防性设计)=》广泛使用

N 版本程序设汁和恢复块方法都是基于设计冗余(增加资源)思想,这给程序员和处理机都增
加了许多工作,而且它们的结构本身又带来了一些问题和困难,例如,多版本程序设计中的相关性错误问题和恢复块方法中的验证测试的设计等。

防卫式程序设计是一种不采用任何传统的容错技术就能实现软件容错的方法,对于程序中存在的错误和不一致性,防卫式程序设计的基本思想是通过在程序屮包含错误检査代码错误恢复代码,使得一旦发生错误,程序就能撤销错误状态恢复到一个已知的正确状态中去

其实现策略包括错误检测破坏估计错误恢复三个方面:

1 . 错误检测

在程序中插入状态断言,所谓状态断言,就是包含状态变 M 的逻辑谓词。

这些断言可插入到一些重要的赋值语句之前,使得那些可能导致错误的赋值在变量状态发生变化
之前被检测出来。例如,实型变量 G r a d e 表示一个学生的成绩, C 为一个整型变量,那
么,可以在赋值语句“ Grade = C ”之前插入断言“{0=0.0 and C <=100.0}”,以保证对G r a d e 赋值的正确性。

插入断言法主要适用于抽象数据类型,因为在抽象数据类型中,断言检查代码只需定义一次,就可对该类型变量的操作进行检査。在程序中普遍采用状态断言检査占用大量空间,折中的办法是在重要操作处进行检查,发现非法状态,再进行破坏估计和错误恢复。

2 . 破坏估计

插入断言法是试图在变量状态改变之前对可能引起错误的操作予以避免,

而破坏估计的任务是在变量条件可能已经遭到破坏的情况下,判断破坏是否已发生,以及状态空间的哪些部分受到了错误的影响。例如,在抽象数据类型中,可以设置一个破坏指示器,通过询问破坏指示器来估计破坏发生的情况。

3 . 错误恢复

在防卫式程序设计中,既可使用前向恢复策略,也可使用后向恢复策略,其中后向恢复是一种更易于实现的技术,可以保持(缓存)一个先前的安全状态的细节,发生错误时再对该状态进行恢复。

通常有两种处理办法,一种是数据状态的变换先不写入,等到处理全部完毕而没有出现错误时,才写入变换后的状态,这种处理多用于数据库系统中;

另一种是在一定时间间隔的检査点制作安全状态的拷贝,当发生错误时,恢复最近检查点的状态。

防卫式程序设计是一种较易实现的方法,比较灵活,尤其适用于小程序局部程序容错

尽管防卫式程序设计不能处理算法中存在的逻辑错误,但对程序运行过程中出现的硬件故障偶然事件引起的错误能起到屏蔽的作用,并且由于其执行效率高、占用空间小、易于设计和实现,因此,是对恢复块方法和多版本程序设计技术的一个补充。

备注:

所谓前向(未来)恢复是指使当前的计算继续下去,把系统恢复成连贯的正确状态, 弥补当前状态不连贯情况,这需有错误的详细说明。

所谓后向(过去)恢复是指系统恢复到前一个正确状态,继续执行。这种方法显然不适合实时处理场合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/481043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++初阶】类与对象:6个默认成员函数-----构造函数和析构函数

我们在写代码的时候经常会忘记初始化和销毁&#xff0c;C的构造函数和析构函数就能避免这个问题。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生成的成员函数称为默认成员函数。 一.构造函数 A.概念 1.构造函数是一个特殊的成员函数&#xff1b; 2.名字与…

React框架的第八课 语法基础课《第二课React框架中的事件》

React框架的第八课 语法基础课《第二课React框架中的事件》 React中的事件是指通过React建立的应用程序中处理用户交互的响应。React事件处理程序只是在组件上调用的JavaScript函数&#xff0c;以响应某些类型的操作或事件&#xff0c;例如点击、触摸、滚动等。 React组件可以使…

【P3】HTTP 接口设计

一、简答 HTTP 接口设计 HTTP请求默认值&#xff1a; 配置 http 请求的默认值&#xff0c;比如协议、主机、端口 HTTP信息头管理器&#xff1a; 配置 http 请求的头部参数 HTTP请求&#xff1a; 用于和业务交互 查看结果树&#xff1a; 用于结果展示 二、准备工作 慕慕生…

希尔排序详解(Shell Sort)

本文已收录于专栏 《算法合集》 一、简单释义 1、算法概念 希尔排序是插入排序的一种又称“缩小增量排序”&#xff0c;是直接插入排序算法的一种更高效的改进版本。希尔排序是把记录按下标的一定增量分组&#xff0c;对每组使用直接插入排序算法排序&#xff1b;随着增量逐渐…

【复杂网络建模】——Pytmnet进行多层网络分析与可视化

目录 一、Pymnet介绍 二、安装步骤 三、多层网络的构建 1、单层网络的构建 2、双层随机网络的构建和可视化 3、多路复用网络图的可视化 四、总结 一、Pymnet介绍 官网&#xff1a; Pymnet是一个用于网络分析和建模的Python库。它提供了各种网络分析工具&#xff0c;例…

shell的基础学习一

文章目录 一、shell的简介二、 Shell 变量三、Shell 传递参数总结 一、shell的简介 Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供…

百胜中国:未来将实现强劲增长

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 收入分析与未来展望 在过去的三年里&#xff0c;百胜中国&#xff08;YUMC&#xff09;的收入一直受到疫情导致的旅行限制和封锁的影响。为了应对疫情造成的业务中断&#xff0c;该公司开始专注于外卖业务&#xff0c;并将…

中通快递财报预测:中通快递2023年收入和利润将大幅下降

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 市场对中通快递2023年的预测 卖方虽然预测中通快递&#xff08;ZTO&#xff09;在2023年的表现会很不错&#xff0c;但他们也预计中通快递今年的财务业绩将不会像去年那样好。 根据S&P Capital IQ的数据&#xff0c;卖…

【软考备战·希赛网每日一练】2023年5月1日

文章目录 一、今日成绩二、错题总结第一题第二题 三、知识查缺 题目及解析来源&#xff1a;2023年05月01日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; 了解即可。 第二题 解析&#xff1a; 在序列基本有序时&#xff0c;快速排序基准元素起不到分…

第16章 变更管理

文章目录 16.1.2 项目变更的分类 50416.1.3 项目变更产生的原因 50516.2 变更管理的基本原则 50516.3 变更管理角色职责与工作程序 50616.3.1 角色职责 50716.3.2 工作程序 50716.4.1 变更管理操作要点 511 16.1 项目变更的基本概念 504 项目变更是指在信息系统项目的实施过程中…

【蓝桥杯】Python基础:经济基础决定上层建筑!

前言&#xff1a;今年4月第一次参加蓝桥杯比赛&#xff0c;选择的Python 研究生组赛道。在备赛过程中&#xff0c;发现经常会用到一些编程小技巧&#xff0c;因此笔者整理了一些蓝桥杯Python组编程基础常用的内容&#xff0c;以便日后备用。如果有小伙伴也觉得实用&#xff0c;…

1 对数器,二分查找,

文章目录 对数器二分查找**1. 有序序列二分查找****2. 在一个有序数组中&#xff0c;找<某个数最右侧的位置****3. 在一个有序数组中&#xff0c;找>某个数最左侧的位置****4. 无序序列二分查找 &#xff0c;求局部最小值** 对数器 对数器用于在自己的本地平台验证算法正…

百度、谷歌等搜索引擎高效搜索方法 —— 更快速搜索到你想要内容

一、常用搜索方法 1、限定标题 intitle 又被称为去广告搜索法&#xff0c;intitle命令&#xff0c;即in title&#xff08;在标题里&#xff09;返回的的结果是网页的标题包含该关键词。一般情况下搜索的关键词都会在标题里出现&#xff0c;使用intitle命令一般是在特殊需求下…

极乐迪斯科(风格) | Disco Elysium – Style LoRA

目录 What is this ❓How to use / 使用方法 &#x1f4dd;其他信息与参数: 模型演示&#xff08;多图预警&#xff09; 正面tag 负面tag What is this LoRA版本的极乐迪斯科风格模型, 使用共计15张图片, 分辨率为1024*1024, 用Anything v4.5训练. 其他模型没有经过测试,…

Linux之【多线程】生产者与消费者模型BlockQueue(阻塞队列)

生产者与消费者模型 一、了解生产者消费者模型二、生产者与消费者模型的几种关系及特点三、BlockQueue&#xff08;阻塞队列&#xff09;3.1 基础版阻塞队列3.2 基于任务版的阻塞队列3.3 进阶版生产消费模型--生产、消费、保存 四、小结 一、了解生产者消费者模型 举个例子&am…

计算机组成原理第五章(3)DMA处理

三种控制方式&#xff1a;程序查询程序中断DMA方式 回顾一下 之前的中断控制方式&#xff0c;如果是输入命令&#xff0c;先启动命令&#xff0c;通过地址总线选择相应的接口&#xff0c;通过地址译码之后的到选择电路&#xff0c;这个接口准备开始工作。 启动外部设备&#…

网络编程总结一:

一、网络基础&#xff1a; 概念&#xff1a;1> 网络编程的本质就是进程间的通信&#xff0c;只不过进程分布在不同的主机上 2>在跨主机传输过程中&#xff0c;需要确定通信协议后&#xff0c;才可以通信 1. OSI体系结构&#xff08;重点&#xff09; 定义7层模型&…

类和对象(上篇)【C++】

C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事拆分成不同的对象&#xff0c;靠对象之间的交互完成。 目录 一、类的定义 二、访问限定符…

【小样本分割 2020 TPAMI 】PFENet

文章目录 【小样本分割 2020 TPAMI 】PFENet1. 简介1.1 问题1) 高级特征误用造成的泛化损失2) 查询样本和空间样本之间的空间不一致 1.2 方法 2. 网络2.1 整体架构2.2 先验掩膜生成2.3 FEM模块 3. 代码 【小样本分割 2020 TPAMI 】PFENet 论文题目&#xff1a;Prior Guided Fea…

flinkCDC相当于Delta.io中的什么 delta.io之CDF

类似flink CDC databricks 官方文档: How to Simplify CDC With Delta Lakes Change Data Feed - The Databricks Blog delta.io 官方文档: Change data feed — Delta Lake Documentation 概述 更改数据馈送 (CDF) 功能允许 Delta 表跟踪 Delta 表版本之间的行级更改 在…