软考笔记--软件可靠性设计

保障软件可靠性最有效、最经济、最重要的手段是在软件设计阶段采取措施进行可靠性控制。为了从根本上提高软件的可靠性,降低软件后期修改的成本和难度,人们提出了可靠性设计的概念。可靠性设计其实就是在常规软件设计中,应用各种方法和技术,是程序设计在兼顾用户的功能和性能需求的同时,全面满足软件的可靠性要求,即采用一些技术手段,把可靠性设计到软件中去。软件可靠性设计技术就是以提高和保障软件的可靠性为目的,在软件设计阶段运用的一种特殊的设计技术。

虽然软件可靠性设计技术与普通的软件设计技术没有明显的界限,但是软件可靠性设计仍要遵循一些自己的原则。

1软件可靠性设计是软件设计的一部分,必须在软件的总体设计框架中使用,并且不能与其他设计原则向冲突。

2.软件可靠性设计在满足提高软件质量要求的前提下,以提高和保障软件可靠性为最终目标。

3.软件可靠性设计应确定软件的可靠性目标,不能无限扩大,并且排在功能度、用户需求和开发费用之后考虑。

一般来说,一些被认可的有应用前景的软件可靠性设计技术主要有容错技术、检错设计和降低复杂度设计等技术。

一.容错设计技术

常用的容错技术主要有恢复块设计、N版本程序设计和冗余设计三种。对于软件失效后果特别严重的场合,可采用这些容错设计方法。

1.恢复块设计

程序的执行过程可以看做是由一些列操作构成的,这些操作又可以有更小的操作构成。恢复块设计就是选择一组操作作为容错单元,从而把普通的程序块变成恢复块。被选中用来构成恢复块的程序可以是模块、过程、子程序和程序段等。

一个恢复块包含若干个功能相同、设计差异的程序块文本,每一时刻有一个文本处于运行状态。一旦该文本出现故障,则用备份文本加以替换,从而构成动态冗余。软件容错的恢复块方法就是使软件包含一些列恢复块。

2.N版本程序设计

N版本程序设计的核心是通过设计出多个模块或不同版本,对于相同的初始条件和相同输入的操作结果,实行多数表决,防止其中某一软件模块/版本的故障提供错误的服务,以实现软件容错。为此此种容错技术具有良好的结果,必须注意以下两个方面:(1)使软件的需求说明具有完全性和精确性。这是保证软件设计错误不相关的前提,因为软件的需求说明是不同设计组织和人员唯一共同出发点。(2)设计全过程的不相关性。它要求各个不同的软件设计人员彼此不交流,程序设计使用不同的算法、不同的编程语言、不同的设计工具,不同的实现方法和不同的测试方法。为了彻底保证软件设计的不相关性,甚至提出设计人员应不同的受教育背景,来自不同的地域、不同国家。

3冗余设计

改善软件可靠性的一个重要技术是冗余设计。在硬件系统中,在主运行的系统之外备用额外的元件或系统,如果出现一个元件故障或系统故障,则立即更换冗余的元件或切换到冗余的系统,则该硬件系统仍可以维持运行。在软件系统中,冗余技术的运用有所区别。软件的冗余设计技术实现的原理是在一套完整的软件系统之外, 设计一种不同路径、不同算法或不同实现方法的模块或系统作为备份,在出现故障时可以使用冗余的部分进行替换,从而维持软件系统的正常运行。

二.检错技术

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

采用检错设计技术要着重考虑几个要素:检测对象,检测延时,实现方式和处理方式。

1.检测对象。包含两个层次的含义,即监测点和检测内容。在设计时应考虑把检测点放在容易出错的地方和出错对软件系统影响比较大的地方;检测内容选取那些有代表性的,易于判断的指标。

2.检测延时:从软件发生故障到被检测出来是有一定延时的,这段延时的长度对故障的处理是非常重要的。

3.实现方式。最直接的一种实现方式是判断返回结果,如果返回结构超出正常范围,则进行一场处理。计算时间也是一种常用的技术,如果某个模块或函数运行超过预期时间,可以判断出现故障。

4.处理方式。大多数检错采用“查出故障-停止软件系统运行-报警”的处理方式,但也有采用不停止或部分停止软件系统运行的情况,这一般由故障是否需要实时处理来决定。

三.降低复杂度设计

降低复杂度设计的思想就是在保证软件功能的基础上,简化软件结构,缩短程序代码长度,优化软件数据流向,降低软件复杂度,从而提高软件可靠性。

除了容错设计、检错设计和降低复杂度设计技术之外,人们尝试着把硬件可靠性设计中比较成熟的技术,如故障树分析 (FTA)、 失效模式与效应分析 (FMEA) 等运用到软件可靠性设计领域,这些技术大多是运用一些分析、预测技术,在软件设计时就充分考虑影响软件可靠性的因素,并采取一些措施进行优化。

四.系统配置技术

通常在系统配置中可以采用相应的容错技术,通过系统的整体来提供相应的可靠性,主要有双击热备技术和服务器集群技术。

1.双机热备技术

双机热备技术是一种软硬件结合的较高的容错应用方案,该方案是由两台服务器系统和一个外接共享磁盘阵列柜和相应的双机热备份软件组成。在这个容错方案中,操作系统和应用程序安装在两台服务器的本地系统盘上,整个网络系 统的数据是通过磁盘阵列集中管理和数据备份的。用户的数据存放在外接共享磁盘阵列中,在一台服务器出现故障时,备机主动替代主机工作,保证网络服务不间断。 双机热备系统采用“心跳”方法保证主系统与备用系统的联系。

双机热备方案中,根据两台服务器的工作方式可以有3种不同的工作模式,即:双机热备模式、双机互备模式和双机双工模式。

(1)双机热备模式,即通常所说的 Active/Standby方式, Active 服务器处于工作状态;而

Standby服务器处于监控准备状态,服务器数据包括数据库数据同时往两台或多台服务器写入

(通常各服务器采用 RAID磁盘阵列卡),保证数据的即时同步。当 Active 服务器出现故障的时

候,通过软件诊测或手工方式将 Standby机器激活,保证应用在短时间内完全恢复正常使用。

(2)双机互备模式,是两个相对独立的应用在两台机器同时运行,但彼此均设为备机,当

某一台服务器出现故障时,另一台服务器可以在短时间内将故障服务器的应用接管过来,从而保证了应用的持续性,但对服务器的性能要求比较高。

(3)双机双工模式是集群的一种形式,两台服务器均处于活动状态,同时运行相同的应用, 以保证整体系统的性能,也实现了负载均衡和互为备份,通常使用磁盘柜存储技术。 Web服务 器或FTP服务器等用此种方式比较多。

2.服务器集群技术

集群技术是指一组相互独立的服务器在网络中组合成为单一的系统工作,并以单一系统的

模式加以管理。此单一系统为客户工作站提供高可靠性的服务。大多数情况下,集群中所有

计算机拥有一个共同的名称,集群内任一系统上运行的服务可被所有的网络客户所使用。

集群内各结点服务器通过内部局域网相互通信,当某结点服务器发生故障时,这台服务器

上所运行的应用程序将在另一结点服务器上被自动接管。当一个应用服务发生故障时,应用服 务将被重新启动或被另一台服务器接管。当以上的任一故障发生时,客户都将能很快连接到其他应用服务器上。

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

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

相关文章

蓝桥杯倒计时 36天-DFS练习

文章目录 飞机降落仙境诅咒小怂爱水洼串变换 飞机降落 思路&#xff1a;贪心暴搜。 #include<bits/stdc.h>using namespace std; const int N 10; int t,n; //这题 N 比较小&#xff0c;可以用暴力搜搜复杂度是 TN*N! struct plane{int t,d,l; }p[N]; bool vis[N];//用…

基于springboot实现大学外卖管理系统项目【项目源码+论文说明】

基于springboot实现大学外卖管理系统演示 摘要 如今&#xff0c;信息化不断的高速发展&#xff0c;社会也跟着不断进步&#xff0c;现今的社会&#xff0c;各种工作都离不开信息化技术&#xff0c;更离不开电脑的管理。信息化技术也越来越渗透到各小型的企业和公司中&#xff…

C/C++蓝桥杯之REPEAT程序(较难)

问题描述&#xff1a; 附件prog.txt中是一个用某种语言编写的程序。 其中REPEAT k 表示一个次数为k的循环。循环控制的范围通过缩进表达&#xff0c;从次行开始连续的缩进比该行多的&#xff08;前面空白更长的&#xff09;为循环包含的内容。 例如&#xff1a; REPEAT 2; …

Java8 CompletableFuture异步编程-进阶篇

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前言 我们在前面文章讲解了CompletableFuture这个异步编程类的基本用法&#xff0c;…

Web Worker:JavaScript的后台任务解决方案

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Linux练习

作业要求&#xff1a; 自己安装linux环境&#xff0c;在每一个题目下贴执行命令和结果的截图 一、文件创建 1. 创建一个文件夹命名为mydir 2. 进入文件夹&#xff0c;创建一个文件&#xff0c;命名为myfile 3. 查看mydir文件夹下有哪些文件 答案获取&#xff1a; https:/…

SpringBoot项目没有启动按键

问题一&#xff1a; pom文件正常&#xff0c;但是springboot包报红&#xff0c;同时Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found报红 解决办法&#xff1a; 无法识别使用哪个版本的 spring-boot-maven-plugin 包 <build><plugins>&…

javase day01笔记

第一天课堂笔记 Java第三代高级语言中的面向对象的语言 b/s 浏览器/服务器c/s 客户端/服务端 1991年詹姆斯高斯林在sun公司开发的Java 常用的dos命令 磁盘操作系统&#xff1a;dos win &#xff0b; r -》 cmd dos命令 切换盘符&#xff1a;直接输入对应盘符目录操作&#x…

【排序算法】四个排序算法理论基础+Python代码:冒泡、插入、选择、快速排序

排序算法 排序算法可以分为内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 常见的内部排序算法有&#xff1a;插入排序、希尔排序…

【C++进阶】哈希的应用 --- 布隆过滤器

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

面试准备不充分,被Java守护线程干懵了,面试官主打一个东西没用但你得会

写在开头 面试官&#xff1a;小伙子请聊一聊Java中的精灵线程&#xff1f; 我&#xff1a;什么&#xff1f;精灵线程&#xff1f;啥时候精灵线程&#xff1f; 面试官&#xff1a;精灵线程没听过&#xff1f;那守护线程呢&#xff1f; 我&#xff1a;守护线程知道&#xff0c;就…

计算机软件文档编制规范GB_T 8567-2006

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 计算机软件文档编制规范概述 计算机软件文档编制规范&#xff08;Specification for computer software documentation&#xff09; 由TC28&#xff08;全国信息技术标准化技…

面试 Java 并发编程八股文十问十答第二期

面试 Java 并发编程八股文十问十答第二期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;形成死锁的四个必要…

《HTTPS协议》

文章目录 一、什么是HTTPS协议二、理解关键字三、为什么要加密四、常见的加密方式1.对称加密2.非对称加密 五、如何进行加密&#xff1f;1.只使用对称加密2.只使用非对称加密3.双方都使用非对称加密4.使用对称加密非对称加密5.对称加密非对称加密CA证书认证5.1数据摘要&#xf…

GPT-4-turbo还是大家心中第一!Claude 3竞技场人类投票成绩出炉:仅居第三

Claude 3的竞技场排名终于揭晓了&#xff1a; 在仅仅3天的时间里&#xff0c;20000张投票使得排名的流量达到了前所未有的高度。 最后&#xff0c;Claude 3的"大杯"模型Opus以1233的分数赢得了胜利&#xff0c;成为了第一个能和GPT-4-Turbo匹敌的选手。 "中杯…

Flink 资源管理

文章目录 前言ResourceManager详解Slot 管理器SlotProviderSlot资源池Slot共享Slot共享的优点Slot 共享组与 Slot 共享管理器Slot资源申请 总结 前言 在Flink中&#xff0c;资源管理是一个核心组件&#xff0c;它负责分配和管理计算资源&#xff0c;以确保任务能够高效、稳定地…

Python使用Beautiful Soup及解析html获取元素并提取内容值

Python使用Beautiful Soup及解析html获取元素并提取内容值 1. 包括解析获取标题2. 根据标签及id获取所有元素3. 根据标签及class获取所有元素4. 获取元素下的标签的值5. 获取元素下的parent及child的元素的值参考 1. 包括解析获取标题 2. 根据标签及id获取所有元素 3. 根据标…

QGridLayout网格布局和QVBoxLayout垂直布局有着非常大的差别

QGridLayout网格布局&#xff1a;1.把这块控件划分成一个个的 单元格 2.把你的控件填充进入 单元格 3.这些有关限制大小的函数接口统统失效 setMaximumWidth&#xff08;&#xff09; setMinimumWidth() setPolicySize()图示&#xff1a;我是用的网格布局&#xff0c;左边放QT…

C# WinForm AndtUI第三方库 Table控件使用记录

环境搭建 1.在NuGet中搜索AndtUI并下载至C# .NetFramework WinForm项目。 2.添加Table控件至窗体。 使用方法集合 1.单元格点击事件 获取被点击记录特定列内容 private void dgv_CellClick(object sender, MouseEventArgs args, object record, int rowIndex, int columnIn…

观察者模式:Java 中的一对多依赖关系解决方案

观察者模式是一种行为设计模式&#xff0c;用于定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于解耦发布者和订阅者&#xff0c;使得系统更易于扩展和维护。 使用条件 观察…