系统架构设计师【第9章】: 软件可靠性基础知识 (核心总结)
文章目录
- 9.1 软件可靠性基本概念
- 9.1.1 软件可靠性定义
- 9.1.2 软件可靠性的定量描述
- 9.1.3 可靠性目标
- 9.1.4 可靠性测试的意义
- 9.1.5 广义的可靠性测试与狭义的可靠性测试
- 9.2 软件可靠性建模
- 9.2.1 影响软件可靠性的因素
- 9.2.2 软件可靠性的建模方法
- 9.2.3 软件的可靠性模型分类
- 9.3 软件可靠性管理
- 9.4 软件可靠性设计
- 9.4.1 容错设计技术
- 9.4.2 检错技术
- 9.4.3 降低复杂度设计
- 9.4.4 系统配置技术
- 9.5 软件可靠性测试
- 9.5.1 软件可靠性测试概述
- 9.5.2 定义软件运行剖面
- 9.5.3 可靠性测试用例设计
- 9.5.4 可靠性测试的实施
- 9.6 软件可靠性评价
- 9.6.1 软件可靠性评价概述
- 9.6.2 怎样选择可靠性模型
- 9.6.3 可靠性数据的收集
- 9.6.4 软件可靠性的评估和预测
9.1 软件可靠性基本概念
9.1.1 软件可靠性定义
软件可靠性 (Software Reliability)
是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。即软件不引起系统失效的概率。该概率是系统输入和系统使用的函数,也是软件中存在的缺陷函数; 系统输入将确定是否会遇到已存在的缺陷。
9.1.2 软件可靠性的定量描述
软件的可靠性是在软件使用条件、在规定时间内、系统的输入/输出、系统使用等变量构成的数学表达式,如图:
9.1.3 可靠性目标
软件可靠性
是指用户对所使用的软件的性能满意程度的期望。可以用可靠度、平均失效时间和故障强度等来描述。
9.1.4 可靠性测试的意义
可靠性测试的意义是:
- (1)软件失效可能造成灾难性的后果。
- (2)软件的失效在整个计算机系统失效中的比例较高。
- (3)相比硬件可靠性技术,软件可靠性技术不成熟。
- (4)软件可靠性问题会造成软件费用增长。
- (5)系统对软件的依赖性强,对生产活动和社会生活影响日益增大。
可靠性测试的目的如图:
9.1.5 广义的可靠性测试与狭义的可靠性测试
(1)广义的可靠性测试
是为了最终评价软件系统的可靠性而运用建模、统计、试验、分析和评价等一系列手段对软件系统实施的一种测试。
(2)狭义的可靠性测试
指为了获取可靠性数据,按预先确定好的测试用例,在软件预期使用环境中,对软件实施的一种测试。
9.2 软件可靠性建模
9.2.1 影响软件可靠性的因素
软件可靠性模型 (Software Reliability Model)
是指为预计或估算软件的可靠性所建立的可靠性框图和数学模型。 建立可靠性模型是为了将复杂系统的可靠性逐级分解为简单系统的可靠性,以便于定量预计、 分配、估算和评价复杂系统的可靠性。
(1)影响软件可靠性的因素包括:运行环境、软件规模、软件的内部结构、软件的开发方法和开发环境、软件的可靠性投入。
(2)软件可靠性模型的组成和特性,如图:
9.2.2 软件可靠性的建模方法
一个软件可靠性模型通常(但不是绝对)由以下几部分组成。
- (1)
模型假设
。 - (2)
性能度量
。 - (3)
参数估计方法
。 - (4)
数据要求
。
9.2.3 软件的可靠性模型分类
软件的可靠性模型大致可分为如下10类:
- 种子法、
- 失效率类、
- 曲线拟合类、
- 可靠性增长、
- 程序结构分析、
- 输入域分类、
- 执行路径分析方法、
- 非齐次泊松过程、
- 马尔可夫过程、
- 贝叶斯分析。
9.3 软件可靠性管理
软件可靠性管理的各阶段,如图:
9.4 软件可靠性设计
软件可靠性设计技术有: 容错设计技术、检错技术、降低复杂度设计、系统配置技术。
9.4.1 容错设计技术
容错设计技术: 恢复块设计、N 版本程序设计、冗余设计。
- 1 )
恢复块设计
: 选择一组操作作为容错设计单元,把普通的程序块变成恢复块。 - 2 )
N 版本程序设计
: 通过设计多个模块或不同版本,对相同初始条件和相同输入的操作结果,实行多数表决,防止其中某一软件模块/版本的故障提供错误的服务。
3 )冗余设计
: 在一套完整的软件系统之外,设计一种不同路径、不同算法或不同实现方式方法的模块或系统作为备份,在出现故障时可使用冗余部分进行替换。
9.4.2 检错技术
1)检错技术代价低于容错技术和冗余技术,但是不能自动解决故障,需要人工干预。
2)检错技术着重考虑 检测对象、检测延时、实现方式、处理方式 四个要素。
9.4.3 降低复杂度设计
降低复杂度设计
思想是: 在保证实现软件功能基础上,简化软件结构、缩短程序代码长度、优化
软件数据流向、降低软件复杂度、提高软件可靠性。
9.4.4 系统配置技术
系统配置技术: 可以分为 双机热备技术和服务器集群技术。
1)双机热备技术
。
- 采用“心跳”方法保证主系统与备用系统的联系。
- 根据两台服务器的工作方式分为双机热备模式(一台工作,一台后备)、双机互备模式(两台运行相对独立应用,互为后备)、双机双工模式(两台同时运行相同应用,互为后备)。
2)服务器集群技术
。 集群内各节点服务器通过内部局域网相互通信,若某节点服务器发生故障,这台服务器运行的应用被另一节点服务器自动接管。
9.5 软件可靠性测试
9.5.1 软件可靠性测试概述
软件可靠性测试包括: 可靠性目标的确定、运行剖面的开发、测试用例的设计、测试实施、测试结果分析等。
9.5.2 定义软件运行剖面
为软件的使用行为建模,开发使用模型,明确需测试内容。
9.5.3 可靠性测试用例设计
测试用例要能够反映实际的使用情况,优先测试最重要的和最频繁使用的功能。设计测试用例,针对组合功能或特定功能,编写成相关文档。测试用例组成如下图:
9.5.4 可靠性测试的实施
用时间定义的软件可靠性数据分为4 类: 失效时间数据、失效间隔时间数据、分组时间内的失效数、分组时间的累积失效数。测试记录与测试报告的组成如图 :
9.6 软件可靠性评价
9.6.1 软件可靠性评价概述
评估和预测软件可靠性过程包括:
- (1) 选择可靠性模型。
- (2) 收集可靠性数据。
- (3) 可靠性评估和预测。
9.6.2 怎样选择可靠性模型
可以从以下几方面选择可靠性模型:
- (1) 模型假设的适用性。
- (2) 预测的能力与质量。
- (3) 模型输出值能否满足可靠性的评价需求。
- (4) 模型使用的简便性。
9.6.3 可靠性数据的收集
数据收集可行的办法有:
- (1) 尽可能早地确定可靠性模型。
- (2) 数据收集计划要有较强的可操作性。
- (3) 重视测试数据的分析和整理。
- (4) 充分利用技术手段(数据库技术)来完成分析和统计。
9.6.4 软件可靠性的评估和预测
(1)软件可靠性的评估和预测的目的是: 评估软件系统的可靠性状况和预测将来一段时间的可靠性水平。
(2)软件可靠性的评估和预测以 软件可靠性模型分析为主,以失效数据的图形分析法和试探性数据分析技术等为辅。
相关文章:

系统架构设计师【第9章】: 软件可靠性基础知识 (核心总结)
文章目录 9.1 软件可靠性基本概念9.1.1 软件可靠性定义9.1.2 软件可靠性的定量描述9.1.3 可靠性目标9.1.4 可靠性测试的意义9.1.5 广义的可靠性测试与狭义的可靠性测试 9.2 软件可靠性建模9.2.1 影响软件可靠性的因素9.2.2 软件可靠性的建模方法9.2.3 软件的可靠性模…...

x264 参考帧管理原理:i_poc_type 变量
x264 参考帧管理 x264 是一个开源的 H.264 视频编码软件,它提供了许多高级特性,包括对参考帧的高效管理。参考帧管理是视频编码中的一个重要部分,它涉及到如何存储、更新和使用已经编码的帧以提高编码效率。 x264 参考帧管理的一些关键点总结如下: 参考帧的初始化和重排序:…...

高级Web Lab2
高级Web Lab2 12 1 按照“Lab 2 基础学习文档”文档完成实验步骤 实验截图: 2 添加了Web3D场景选择按钮,可以选择目标课程或者学习房间。...

Linux网络-使用Tcp协议进行网络通信并通过网络接口实现远端翻译
文章目录 Tcp协议Tcp协议常见API接口1. int socket(int domain, int type, int protocol);2. int bind(int socket, const struct sockaddr *address, socklen_t address_len);struct sockaddr 3. int listen(int socket, int backlog);4. int accept(int socket, struct socka…...

实时数据传输:Django 与 MQTT 的完美结合
文章目录 准备工作创建 Django 项目与应用设置 MQTT 服务器编写 Django 视图编写前端模板发布 MQTT 消息运行 Django 项目 在当今互联网应用中,实时数据传输已经成为许多项目的核心需求。无论是社交媒体平台、在线游戏、金融交易还是物联网设备,都需要及…...

创建Django项目及应用
1 创建Project 1个Project可以对应多个app django-admin startproject myproject 2 创建App python manage.py startapp app01 INSTALLED_APPS [# ...app01,app02,# ... ] 如果要让这个应用在项目中起作用,需要在项目的 settings.py 文件的 INSTALLED_APPS 配置…...

Flutter课程分享 -(系统课程 基础 -> 进阶 -> 实战 仿京东商城)
前言 在移动应用开发的世界中,Flutter 作为一款由 Google 推出的开源 UI 软件开发工具包,正迅速赢得开发者们的青睐。其跨平台、高性能、丰富的组件库以及易于学习的特性,使得 Flutter 成为许多开发者的不二选择。然而,对于初学者…...

IDEA 中导入脚手架后该如何处理?
MySQL数据库创建啥的,没啥要说的!自行配置即可! 1.pom.xml文件,右键,add Maven Project …………(将其添加为Maven)【下述截图没有add Maven Project 是因为目前已经是Maven了!&…...

thinkphp6 queue队列的maxTries自定义
前景需求:在我们用队列的时候发现maxtries的个数时255次,这个太影响其他队列任务 我目前使用的thinkphp版本是6.1 第一部定义一个新的类 CustomDataBase(我用的mysql数据库存放的队列) 重写__make 和createPlainPayload方法 …...

【PHP项目实战训练】——laravel框架的实战项目中可以做模板的增删查改功能(2)
👨💻个人主页:开发者-曼亿点 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...

Kotlin 对象
文章目录 对象表达式(匿名对象)对象的声明 对象表达式(匿名对象) 在 Kotlin 中可以使用object {}声明一个匿名的对象,我们无需声明这个对象的类: fun main() {val any object {fun greet() print("…...

力扣 142题 环形链表Ⅱ 记录
题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内…...

乐观锁 or 悲观锁 你怎么选?
你有没有听过这样一句话:悲观者正确,乐观者成功。那么今天我来分享下什么是乐观锁和悲观锁。 乐观锁和悲观锁有什么区别,它们什么场景会用 乐观锁 乐观锁基于这样的假设:多个事务在同一时间对同一数据对象进行操作的可能性很…...

《庆余年算法番外篇》:范闲通过最短路径算法在阻止黑骑截杀林相
剧情背景 在《庆余年 2》22集中,林相跟大宝交代完为人处世的人生哲理之后,就要跟大宝告别了 在《庆余年 2》23集中,林相在告老还乡的路上与婉儿和大宝告别后 范闲也在与婉儿的对话中知道黑骑调动是绝密,并把最近一次告老还乡梅…...

大一C语言课设 服装销售系统 代码实现与项目总结
问题分析 服装信息管理及销售管理系统。方便对库存服装的信息管理和添加新服装数据,同时兼具库存数量管理功能。 功能实现 1、建立服装信息库,包括:服装代码、型号、规格、面料、颜色、单价、数量; 2、建立销售信息库ÿ…...

从新手到专家:深入探索JVM垃圾回收--开端篇
引言: 在Java的世界里,垃圾回收(Garbage Collection, GC)机制扮演着至关重要的角色,它决定了Java应用的性能、稳定性和扩展性。本系列文章旨在深入探讨JVM中的垃圾回收技术,从基础的概念讲起,直…...

R可视化:另类的柱状图
介绍 方格状态的柱状图 加载R包 knitr::opts_chunk$set(echo TRUE, message FALSE, warning FALSE) library(patternplot) library(png) library(ggplot2) library(gridExtra)rm(list ls()) options(stringsAsFactors F)导入数据 data <- read.csv(system.file(&qu…...

Docker的数据管理(数据卷+数据卷容器)
文章目录 一、Docker的数据管理1、概述2、主要的技术(三种数据挂载方式)2.1、数据卷(Volumes)2.2、绑定挂载(Bind mounts)2.3、tmpfs挂载(Tmpfs mounts)2.4、之间的关系(…...
字符串-至多包含K种字符的子串中最长子串(mid)
一、题目描述 二、解题思路 借鉴以下题目思想,使用双指针,外层循环右侧指针移动,内存循环左侧指针移动 字符串-最长不含重复字符的子字符串(mid)-CSDN博客文章浏览阅读622次,点赞17次,收藏4次。java刷题:…...

Docker从安装开始精通
从虚拟机到容器 1.环境配置的难题 软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来? 用户必须保证两件事:操作系统的设置,各种库和组件的安装…...

MFC:初步理解序列化与反序列化(含代码实现)
序列化与反序列化是MFC将对象数据以二进制数据流的形式进行存储和读取的机制,读、写的效率很高。通过序列化与反序列化,可以将程序中对象在内存中数据保存到文件 (磁盘) 或者从文件 (磁盘) 中读取到内存以恢复对象数据,从而实现程序对数据的持…...

python程序控制结构
文章目录 一、python程序控制结构介绍二、顺序结构2.1、print()函数2.2、end参数2.3、input()函数 三、选择结构3.1选择结构的用途 四、循环结构4.1循环结构的构造4.1.1、循环结构的三个要素4.1.2、循环结构的一个要求4.1.3、循环结构的一个关系 4.2、循环语句4.2.1、while语句…...

【GD32】04 - Timer定时器
GD32中的定时器 GD32E230中有七个定时器,六种类型,其中通用的L4版本有两个,其他类型的各一个。 那我们就以通用L4这个类型来敲代码,其他流程是通用的。 通用L4 虽然每种类型的定时器都有自己的结构框图,但是其实大差…...

Golang | Leetcode Golang题解之第123题买卖股票的最佳时机III
题目: 题解: func maxProfit(prices []int) int {buy1, sell1 : -prices[0], 0buy2, sell2 : -prices[0], 0for i : 1; i < len(prices); i {buy1 max(buy1, -prices[i])sell1 max(sell1, buy1prices[i])buy2 max(buy2, sell1-prices[i])sell2 m…...

Leetcode2028. 找出缺失的观测数据
Every day a Leetcode 题目来源:2028. 找出缺失的观测数据 解法1:模拟 统计当前 m 个元素的总和 curSum sum(rolls),总共 mn 个元素和为 total (m n) * mean。 排除 2 种情况: total - curSum > 6 * n:n 个…...

如何在CentOS中合理划分磁盘空间以优化系统性能
目录 前言 理想的分区方案 为什么需要单独分区 安全性 性能 管理和维护 稳定性和可靠性 升级和兼容性 结论 前言 在进行CentOS系统的安装和配置时,合理划分磁盘空间是确保系统性能、安全性和易于管理的关键步骤。本文将探讨如何根据系统的硬件配置和预期用途…...

算法(十一)贪婪算法
文章目录 算法简介算法概念算法举例 经典问题 -背包问题 算法简介 算法概念 贪婪算法(Greedy)是一种在每一步都采取当前状态下最好的或者最优的选择,从而希望导致结果也是全局最好或者最优的算法。贪婪算法是当下局部的最优判断,…...

Rust之函数式语言特性:迭代器和闭包(一):概述
开发环境 Windows 11Rust 1.78.0 VS Code 1.89.1 项目工程 这次创建了新的工程minigrep. 函数式语言特性:迭代器和闭包 Rust的设计从许多现有语言和技术中获得了灵感,其中一个重要影响是函数式编程。函数式编程通常包括通过在参数中传递函数、从其他函数返回函数、…...

配置资源管理
一 Secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。 1 有三种类型: kubernetes.io/service…...

unity2020打包webGL时卡进程问题
我使用的2020.3.0f1c1,打包发布WEB版的时候会一直卡到asm2wasm.exe这个进程里,而且CPU占用率90%以上。 即使是打包一个新建项目的空场景也是同样的问题,我尝试过一直卡在这里会如何,结果还真打包成功了。只是打包一个空场景需要20…...