概念解读稳定性保障

什么是稳定

百度百科关于稳定的定义:

“稳恒固定;没有变动。”

很明显这里的“稳定”是相对的,通常会有参照物,例如 A 车和 B 车保持相同速度同方向行驶,达到相对平衡相对稳定的状态。

那么软件质量的稳定是指什么呢?

假设软件系统是辆车,质量预期是满足客户行驶要求,那么功能是指能正常行驶,性能是指按一定速度和油耗正常行驶,稳定是指平稳且持续的按一定速度和油耗正常行驶,这种稳定状态并不是质量本身的特性,而是质量表现的态势。

在这里插入图片描述

但在行驶中,车辆本身质量和路况不是一成不变的,轮胎磨损、刹车磨损、路面结冰、路口堵车、高峰限号等等各种状况都会影响行驶,那么此处的“平稳且持续”可以分解为质量本身的稳定及质量表现的稳定(驾驶者感受到的稳定)。

科幻电影常常可以看到这种操作:帅气的飙车中,男主车胎突然被打爆,车辆立刻变形,四胎变三胎,或者从机器触手中捞出备胎,凌空替换破损胎;一番操作炫酷丝滑,男主依然狂飙,刺激效果 upup,观众直呼给力给力。该电影场景体现了两点:产品本身质量好是硬道理(比如飙车那么久刹车依然灵敏),但是突发情况更需要有其他手段维持帅气(比如引入各种高科技手段)。

什么是稳定性

GB/T 16260 描述稳定性如下:

“软件避免由于软件修改而造成意外结果的能力。”

软考高级《系统架构设计师》描述稳定性如下:

“软件稳定性,指软件在一个运行周期内、在一定的压力条件下,软件的出错几率、性能劣化趋势等,并观察其运行环境内的应用服务器、数据库服务器等系统的稳定性。”

2022 年 6 月由中国信通院发布的《分布式系统稳定性建设指南》描述稳定性:

“系统稳定性表示系统在遭受外界扰动偏离原来的平衡状态,而在扰动消失后系统自身仍有能力恢复到原来平衡状态的一种顽性。”

百度百科描述稳定性如下:

“系统稳定性是指系统要素在外界影响下表现出的某种稳定状态。”

综合各方观点可以得到:系统稳定性关注的是系统随时间延续、软件修改、外界变化的关系,强调不受系统要素变更和外界扰动影响的能力。

这是一个比较泛的概念,那么如何提升这种能力呢?我们尝试从定义中的几个关键词入手:

系统要素

系统要素的定义:

“系统要素是构成系统的基本组成部分或基本单元。”

系统研发过程既是生产软件系统的过程,也是制造问题(缺陷)的过程,过程质量也是影响稳定性的因素之一。

2022 年 4 月 Atlassian 出现宕机事故,原因是团队之间存在“沟通鸿沟”、系统警告不足;

2022 年 8 月谷歌搜索和谷歌地图出现宕机事故,原因是软件更新出错;

系统内部风险需要尽量在软件生产过程中避免,将制造风险的过程转变为控制风险的过程。

外界扰动

外界扰动指非系统本身带来的变化,往往不受系统控制,例如城市地震、机房电缆被挖、黑客 DDOS 攻击,这种不可抗力事件虽然小概率,但世界范围内随时都在发生,我们能做的是尽量提高抵御外界扰动的能力,减少对系统稳定性的摧残。

2022 年 6 月微软出现宕机事故,原因是微软的冗余电力系统的组件产生了意外的电气瞬变,导致空气处理单元(ahu)检测到潜在的故障,因此自动关闭;

2022 年 7 月甲骨文(Oracle)出现访问延迟,原因是创纪录的夏季高温导致冷却系统出现故障,数据中心的温度攀升,计算基础设施的一部分进入保护性关闭状态;

2022 年 7 月亚马逊的 EC2 实例瘫痪,原因是亚马逊网络服务(AWS)可用区 1 (AZ1)发生停电,导致服务中断;

稳定状态

上文提到稳定是一种相对的状态,因此更关注基于预期的结果对比和基于质量基线的趋势对比。

1)确定基线

最新版的国家标准 GB/T 25000.10-2016 将软件系统的使用质量拆分为以下影响途径:

在这里插入图片描述

每个阶段的质量都有对应的测量指标,例如产品质量的 8 个特性如下:

在这里插入图片描述

目前业内较为常见的 SLA/SLO 系列指标属于使用质量的评估维度,体现软件系统对其利益相关方的影响;MTTR 是产品质量可靠性的重要评估指标,体现软件系统恢复到正常情况所花费的全部时间。

通过质量指标的拆解也可以看出为什么我们常说的是稳定性质量保障,而不是可用性质量保障、可靠性质量保障等等,显然稳定性视角覆盖到的是更全面的维度。

2)确定预期

不同产品/系统/组件的质量指标预期值可能各有不同,没有标准答案,但“用户期望什么样的质量水平”一定是所有产品都重点考虑的必要标准。

什么是质量保障

质量: 产品/服务固有特性满足用户要求的程度。

质量保障: Quality assurance,官方译为“质量保证”,日常更多称“质量保障”,缩写是 QA。

质量保障、质量控制、测试的区别

质量保障(Quality Assurance): 指为使人们确信产品/服务能满足质量要求而在质量管理体系中实施并根据需要进行证实的全部有计划和有系统的活动;

质量控制(Quality Control):

为使产品或服务达到质量要求而采取的技术措施和管理措施方面的活动;

测试(Testing): 在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程;

这三种活动过程的目的都是交付符合质量的软件,在项目中的实施范围从大到小是质量保障>质量控制>测试。

与质量控制和测试相比,质量保障更关注“预防”,通常通过“测试左移”和“测试右移”将测试活动构建于整个业务流程过程中,预防为主,防治结合。

质量控制关注产品结果本身,验证其是否达到预期要求并给出改进建议,包括需求确认、产品测试等操作。质量控制的概念早于 QA 形成至少 10 年以上。测试是质量控制的最后一道关卡,是验证质量的手段。

为什么要做质量保障

质量控制和测试对产品结果的验证,但是实际项目中,只重视产品结果往往为时过晚,想要修复产品初期的问题,需要投入更多的时间和人力成本。

那么控制问题的产生、控制问题带来的影响,是产品研发效能提升的关键。质量保障应运而生。

什么是质量保障体系

体系: 泛指一定范围内或同类的事物按照一定的秩序和内部联系组合而成的整体,是不同系统组成的系统。

质量保障体系(质量保证体系): 通过一定的制度、规章、方法、程序和机构等把质量保障活动加以系统化、标准化及制度化。

质量保证体系的运行应以质量计划为主线,以过程管理为重心,按 PDCA 循环进行,通过计划(Plan)—实施(Do)—检查(Check)—处理(Action)的管理循环步骤展开控制,提高保证水平。

体系不是一天两天建成的,更不建议为了建设而建设,一定是先有质量需求,开展了质量保障活动,逐步完善活动过程形成体系并逐步优化。

例如 google 定义的 SRE,SRE 不仅仅是职位的名称,更是一套迭代了接近 20 年的体系,覆盖了延迟优化、性能优化、效率优化、变更管理,监控、应急响应、容量规划与管理等等多个方面,非常值得借鉴和学习。但任何外来体系在本土化的过程中都需要经过筛选、调整、消化,如果直接生搬硬套,大概率会水土不服、事倍功半。

稳定性质量保障建设方向

通过前几章的概念拆解,我们对“稳定性质量保障“说法的由来有了一定了解,那么稳定性质量保障活动在产品项目中如何开展呢?此处仅从上文概念拆解的角度来看,整体围绕以下几个方向:

自身健壮-Design for failure
1)提高自身稳定

关注所有与软件生命周期有关的因素,包括但不限于:

  • 人: 如何规避人为因素产生的负面影响;
  • 流程: 如何规避流程缺失或腐化的负面影响;
  • 技术: 如何规避技术缺陷引起的风险;
  • 组件/系统: 如何规避内部组件关系,或系统架构的潜在风险;
  • 变更: 如何规避以上所有因素的变更带来的风险;
2)防御外界扰动

常见的外界影响包括:基础设施问题、外部依赖问题、用户异常操作等。需要针对不同的外部影响、影响范围、影响阶段制定不同的策略。

及时发现-Multiplex monitor
1)质量影响途径维度

质量影响途径维度更多关注质量内的健康状态。从第二章的质量途径图示中可以看到使用质量依赖软件生命周期中的过程质量和产品质量,过程质量的监控和评价有利于产品质量改进,产品质量的监控和评价有利于改进使用质量;同样,评价使用质量可以为改进产品提供反馈,而评价产品可以为改进过程提供反馈。

GB/T 25000 系列已对各维度的质量评价指标做了详细说明,例如可靠性最常见的评估指标 MTBF/MTTR,本文不再赘述。

2)用户访问链路维度

用户访问链路维度更多关注系统组成要素在生产环境中的健康状态,经典的监控体系分层包括:

用户体验层:

页面响应时间、渲染时间、业务指标等;

应用服务层:

服务可用性包括服务状态、Four Golden Signals(错误、流量、延迟、饱和度)、调用链路等;

组件层:

系统软件、中间件、数据库等;

主机层:

硬件、虚拟机、容器等;

基础设施层:

机房、网络等;

快速解决-Emergency response

在任何生产或质量保障活动中成本都是必须考虑的事情,权衡取舍之后,永不失败、100% 稳定可靠的服务不可能存在,那么问题出现后如何快速解决是提高用户使用质量的关键。

Things break; that’s life。

快速定位: 精准定位故障点;

快速决策: 精准选择解决方案;

快速执行: 快速并有效执行;

这三个方向主要做了两件事:降低问题发生概率和降低问题发生后的影响,对标信通院总结的稳定性建设目标是“降发生“和”降影响“,对标 GB/T25000 质量指标是提高 MTBF、减低 MTTR。

在这里插入图片描述

云商稳定性保障建设历程

稳定性质量保障在云商落地的过程中经历了如下几个阶段:

在这里插入图片描述

阶段1:质量控制

重心在测试执行,通过在测试阶段的活动发现软件问题推动质量改进。

阶段2:质量内建

重心在通过流程卡点、架构改造等一系列优化动作提高 MTBF,该阶段的思路已逐渐向质量保障靠拢,但缺乏“质量右移“视角 。

阶段3:风险防控

该阶段从软件生命周期维度将“风险”到“故障”的过程划分为风险产生的阶段、问题暴露阶段和故障损失阶段,并认为不管故障有没有带来具体的用户损失,只要在生产环境中被发现都属于损失。

重心在多维度巡检和报警,但缺少有效的跟进和管理手段。

在这里插入图片描述

阶段4:故障管理

该阶段的思路是从故障闭环角度入手,从时间维度分故障前、故障中、故障后,粗力度划分如下,细分项较多,此处不再展开。
在这里插入图片描述

因前几个阶段在预防、发现、复盘方面发力,已基本满足“自身健壮”和“及时发现”,第四阶段的建设重心在补齐“快速解决”的短板,提高故障定位和故障恢复的速度,降低 MTTR。

按时间顺序,MTTR 一般拆分为四个指标:

MTTI(Mean time to identify ): 定义为识别服务或组件问题所需的平均时间,有时被称为平均检测时间或 MTTD;

MTTK(Mean Time To Know): 定义为找出问题发生原因所需的平均时间;

MTTF(Mean Time To Fix): 定义为解决问题所需的平均时间;

MTTV(Mean Time To Verify): 定义为验证问题所需的平均时间;

在实际故障中发现,MTTK 和 MTTF 占用 MTTR 的更多时间消耗。

在这里插入图片描述

MTTK-故障定位

通过“工具赋能”提高问题聚焦能力,通过“人员能力提升”补齐工具覆盖不到的路径。

1)工具赋能: 借助健全的运维系统能力提高效率,包括指标监控平台、日志平台、分布式追踪平台等,重心在可观测性平台的建设;

在这里插入图片描述

2)人员能力提升: 工具能定位到的路径之外,需要人工能力补齐,重心在通过实操演练等途径提升人员排查定位故障的能力;

MTTF-故障恢复

通过提前预案、快恢平台、应急流程的建设,助力恢复操作迅速、有序地开展,控制和防止故障进一步恶化。

1)应急预案: 针对可能发生的事故预先制定的行动方案,并周期性演练验证保鲜;

2)快恢平台: 将预案执行手段沉淀到平台中,缩短执行路径,并结合可观测平台做自动决策、自动执行,实现故障快速自愈;

3)应急流程: 故障恢复过程中免不了多人、多部门的协作,将流程规范化并达成共识,助力大家紧密协作,有条不紊地推进故障恢复;

经过几年建设和迭代,云商稳定性质量保障建设体系已基本成型,下面是体系建设全景图,供读者参考。

在这里插入图片描述

结语

本文尝试从概念诠释的角度解读稳定性质量保障的由来以及建设方向,未对具体的落地措施做展开描述,如有进一步了解的需求,欢迎交流。

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

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

相关文章

小白必看的Ubuntu20.04安装教程(图文讲解)

总的来说,安装Ubantu包含以下三个步骤: 一、安装虚拟机 二、Ubuntu镜像下载 三、虚拟机配置 一、安装虚拟机 选择安装VMware Workstation,登录其官网下载安装包,安装点这里。 下载后运行安装向导,一直Next即可。最…

2024腾讯一道笔试题--大小写字母移动

题目🍗 有一个字符数组,其中只有大写字母和小写字母,将小写字母移到前面, 大写字符移到后面,保持小写字母本身的顺序不变,大写字母本身的顺序不变, 注意,不要分配新的数组.(如:wCelOlME,变为wellCOME). 思路分析🍗 类似于冒泡排序,两两比较…

ssm055基于spring框架的中小企业人力资源管理系统的设计及实现+jsp

中小企业人力资源管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本中小企业人力资源管理系统就是在这样的大环境下诞生,其可…

[lesson39]逗号操作符的分析

逗号操作符的分析 逗号操作符 逗号操作符(,)可以构成逗号表达式 逗号表达式用于将多个子表达式连接成为一个表达式逗号表达式的值为最后一个子表达式的值逗号表达式中的前N-1个子表达式可以没有返回值逗号表达式按照从左向右的顺序计算每个子表达式的值 重载逗号操作符 在C…

OPC-UA是这样在食品和饮料中应用的

什么是 OPC-UA OPC Unified Architecture,即 OPC-UA,是一种基于 TCP/IP 的协议,用于自动化工程师实时、高可靠性、高效性地在控制系统级别共享数据。 OPC-UA 的特点 安全通信: OPC-UA 使用先进的加密方法和严格的访问控制,确保数…

CV每日论文--2024.4.15

1、Connecting NeRFs, Images, and Text 中文标题:连接 NeRF、图像和文本 简介:神经辐射场(NeRFs)已经成为表示3D场景和物体的标准框架,引入了一种新的数据类型用于信息交换和存储。与此同时,多模态表示学…

Excel文件解析(Java)

一、概述 在应用程序的开发过程中,经常需要使用 Excel文件来进行数据的导入或导出。所以,在通过Java语言实现此类需求的时候,往往会面临着Excel文件的解析(导入)或生成(导出)。 在Java技术生态圈中&#xff0c…

<计算机网络自顶向下> 多路复用与解复用

多路复用/解复用 端口号区分进程到进程多路解复用工作原理 解复用作用:TCP或者UDP实体采用哪些信息,将报文段的数据部分交给正确的socket,从而交给正确的进程主机收到IP数据报 每个数据报有源IP地址和目标地址每个数据报承载一个传输层报文段…

(算法版)基于二值图像数字矩阵的距离变换算法

Hi,大家好,我是半亩花海。本项目展示了欧氏距离、城市街区距离和棋盘距离变换的实现方法。通过定义一个距离变换类,对输入图像进行距离变换操作,并生成对应的距离矩阵。在示例中,展示了在一个480x480的全黑背景图像上设…

App Inventor 2 块拓展之:最大值、创建多项列表

什么是块拓展? App Inventor 2 引入了一项新功能,允许某些块扩展、收缩甚至更改其功能。 顶部具有蓝色框白色齿轮的代码块都是可拓展块。 块拓展用法 块扩展可以改变形状,通过单击蓝色图标,用户可以将较小的块拖到较大的块中&am…

雨伞-浅色脚本

渲染参考:明亮/干净/高级 静帧参考 解说 镜头时长 效果参考 中景画面展示3把竖着的浅色的伞 1s / 特写展示伞把手 1s 中景展示雨伞全貌 2s 微观镜头 缝线动画 3s 镜头旋转至伞面微观材质镜头,展现其多层结构 10s 微观镜头 水珠滑动在伞…

gpt4和chatgpt的区别

模型规模和性能:GPT-4比GPT-3.5更大、更强大。GPT-4拥有更多的参数和更大的训练数据集,因此在各种任务上表现更出色,如语言理解、问题解答和推理能力等。多模态能力:GPT-4支持处理图像等多模态信息,而GPT-3.5主要处理文…

服务器raid卡,守护数据安全,赋能新质生产力

RAID卡,全称为独立冗余磁盘阵列卡,在数据中心、服务器、网络存储等领域得到广泛应用,RAID卡通过不同的RAID级别实现数据容错和冗余。例如,RAID 0主要适用于需要高速数据传输但对数据安全要求不高的场景,如数据的缓存&a…

基于改进遗传算法的配电网故障定位(matlab代码)

1 主要内容 该程序复现文章《基于改进遗传算法的配电网故障定位》,将改进的遗传算法应用于配电网故障定位中, 并引入分级处理思想, 利用配电网呈辐射状的特点, 首先把整个配电网划分为主干支路和若干独立区域, 再利用该算法分别对各独立区域进行故障定位, 然后进行…

Node Version Manager(nvm):轻松管理 Node.js 版本的利器

文章目录 前言一、名词解释1、node.js是什么?2、nvm是什么? 二、安装1.在 Linux/macOS 上安装2.在 Windows 上安装 二、使用1.查看可安装的node版本2.安装node3. 查看已安装node4.切换node版本5.其它 总结 前言 Node.js 是现代 Web 开发中不可或缺的一部…

java的转换流,打印流,数据流

InputStreamReader(字符输入转换流) 解决不同编码,字符流读取文本内容乱码的问题 public InputStreamReader(InputStream in, String charsetName) throws UnsupportedEncodingException Creates an InputStreamReader that uses the named charset. 把原始的字节…

【华为笔试题汇总】2024-04-17-华为春招笔试题-三语言题解(Python/Java/Cpp)

🍭 大家好这里是KK爱Coding ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为近期的春秋招笔试题汇总~ 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢&#x1f…

腾讯云优惠券介绍及领取教程详解

腾讯云是腾讯集团倾力打造的云计算品牌,提供全球领先的云计算、大数据、人工智能等技术产品与服务,以卓越的科技能力打造丰富的行业解决方案,构建开放共赢的云端生态,推动产业互联网建设,助力各行各业实现数字化升级。…

Python景区票务人脸识别系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

LeetCode236:二叉树的最近公共祖先

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是…