最小化研发过程质量管理,质量与效率之间的平衡

前言

是不是流程约束越多,效率越低?不然,如果因为缺了流程约束,而搞砸了质量,那么一切都将归零。

所以找到一套适合自身的研发过程质量管理方式,在质量与效率之间趋向平衡是每个研发团队所必须要考虑的事情,本文是基于中小规模的企业环境中,研发团队不过百人而总结出来的一套最小化研发过程质量管理,以供有意者参加。

一、总体概要图

在这里插入图片描述

二、需求设计阶段

技术方案评审

在这里插入图片描述

需求设计阶段最关键的就是技术方案评审,关于评审重点要放在以下几个内容上:

1. 评审参与人员

首先一定要有需求承接团队的架构师或者技术负责人在场,这并不是因为他们的技术怎么样,而是因为他们看问题的视角不一样,他们更关注技术方案是否有最佳实践可参考,领域边界划分是否合理,非功能性是否有考虑等等。
除此之外必要参与评审的人员还应包括,研发、测试、产品,如果涉及到上下游系统支持时,还需要上下游系统的相关人员一起参加,不同的角色看问题会有不同的角度,这也是这些人参会的必要原因之一。

2. 评审方式

评审时要以提问为主,建议在评审开始之前,先将设计文档发出来,让参与评审的人员先过一遍,参与评审的人员要带着问题来评审,提问人与回答问题的人都要清楚自己的目的是什么,提问的人不要挑刺,提出类似于过度设计的场景,回答问题的不要反感,要抱着学习的心态。

3. 评审内容

一图胜千言:设计文档中在有复杂处理逻辑时应有相关流程图,在有多系统交互时应有相关时序图,在有多状态变更时应有相关状态图。

认知统一:明确边界模糊地带设计,达成架构清晰,职责明确。

接口协议:接口设计时除了基本出参入参之外,还应考虑到接口权限,参数合法性校验,幂等,限流,熔断,降级,敏感数据等。

数据存储:数据表设计时关注了表结构(可以参考基本范式),字段类型,索引以及数据预期增长量。

中间件:其他的如有涉及到中间件,如Redis、MQ、ElasticSearch等等需说明具体使用场景以及如何使用。

分布式问题:分布式事务、分布式锁、分布式存储。
在这里插入图片描述

4. 非功能性设计

非功能性本身当然也是评审的内容,但因比较特殊,所以单独拉出来聊。
非功能性需求一般包括:性能、安全、隔离、兼容、灰度等方面。
性能:性能不必多说,但凡链路过长,QPS过高,数据量过大等情况就一定存在性能问题。

安全:安全一方面是业务问题上的安全,一方面是系统问题上的安全。

隔离:隔离也有很多层面,例如业务分核心与非核心,在线,离线,近实时;环境和数据分正式与非正式,多业务,多租户;资源分软件硬件,读写,连接池,线程池,队列,分区等。
在这里插入图片描述

兼容:兼容也是常常容易被忽略的地方,主要是涉及到协议时考虑向前、向后的兼容,向前兼容就是老服务兼容新协议,向后兼容就是新服务兼容老协议。
在这里插入图片描述

灰度:最后一点就是灰度,非严格意义上来看灰度也可以包括ABTest的范围,这通常是业务上的述求,而研发所要求的灰度更倾向于服务稳定性上的考虑,谁也无法保证上线不出问题,既然无法避免,那就只能尽量减少影响范围,而灰度策略就是一种简单又有效的方式。

三、开发阶段

在这里插入图片描述

开发计划

凡事预则立,不预则废,充分准备就是成功的关键,也是以结果为导向的关键。做项目就是要得到结果,有结果,过程怎么样都是有道理的,没有结果,有再多原因那也都是在找理由。不过,要想得到结果,过程还是非常重要的,而制定计划,按计划执行就是避免在过程中遗漏对关键目标跟踪的有效方式。

各阶段时间表,主要节点就是开发时间、测试时间、验收时间以及发布时间,这里面开发时间又包括需求设计时间,独立开发时间,开发联调时间(内、外部),尤其是涉及到多方人员参与时这个时间一定要事先确认好,并以相对正式的方式进行公示。如果是灰度上线方式,也需要提前做好灰度时间的计划。

项目状况跟踪

理想的状态是到了开发阶段,就能根据前一阶段的开发设计一鼓作气的完成开发,但实际情况肯定会遇到些问题是在之前设计时没有识别出来的,另一方面因人的因素(千万不要以为只要排了计划,所有人就会到点交结果。),事的因素所引起的问题也无法保证能够完全按照项目计划来进行。

所以无论处于什么阶段,只要没有结束就应当保持对项目状况的持续跟踪,包括每天的工作情况,是否有遇到什么困难,外部参与人员能否按计划完成约定的事项等等。

对于识别出来的新问题,无论是需要变更需求,还是需要变更设计,都必须及时的给与响应,并以相对正式的方式确保通知到所有干系人,并让其评估是否还会带来其他影响。
在这里插入图片描述

沟通形式

根据项目实际情况决定按照每日站会的方式进行追踪,不需要很长时间,主要以信息反馈为主,需要进一步沟通的可以等到会后,如果项目中还有外部人员参与的,至少也需要安排每周进行一次沟通反馈。

项目信息的反馈方式一定要显得正式一点,并以文字加口头表达的形式传递给项目相关人员。

研发质量

关于软件架构、设计原则这种“道”层面上面的内容就不在这里阐述了,本文的研发质量管理主要是针对“术”。

1. 编码规范

符合编码规范要求(代码编写规范、日志打印规范、RPC调用规范、服务依赖规范、sonar扫描等等),大众熟知的如阿里的Java开发手册,对于这些规范要求,我一直强调要先搞清楚为什么要这样规定,在搞清楚目的的前提下,再结合自己公司的实际情况结合使用才能达到较好的效果。

2. 关于接口

接口要满足防御性功能,记住下面三个原则:

  1. 凡是上下游依赖保持不信任。
  2. 凡是第三方依赖都有降级、熔断方案。
  3. 墨菲定律,凡是可能出错的地方就一定会出错,做好处理。
    在这里插入图片描述

3. 代码自测

研发自测时如果能保证覆盖率和边界值这两个关键点,基本上就能避免大多数问题遗留到测试阶段了,覆盖率指的是有多少分支逻辑被验证到了,边界条件例如超范围,非法参数等特殊值验证。

4. 代码Review

代码Review总是容易被忽视的一步,长期放任不管不但会给研发过程但来困难,也会造成研发质量的降低。

  1. 关注点:代码评审一方面是看编码规范、一方面是看性能,处理逻辑的细节建议熟悉的开发之间互相把控。
    在这里插入图片描述

  2. 一次性Review的量:不要一次性提交太多Review的代码。
    在这里插入图片描述

  3. 互相学习:review是互相学习的过程,学习别人的处理方式的同时也可以向别人展示你的知识积累。

四、测试阶段

在这里插入图片描述

测试用例评审
应当是同技术方案评审差不多的要求。

冒烟测试要求
开发人员要对提测质量负责,除了自己完成之外,也要满足冒烟测试用例通过,这样才算是符合提测要求。

测试质量结果
测试阶段需要关注:冒烟通过率,自动化case通过率,缺陷日清率,缺陷引入率。

五、发布阶段

虽然在前面几个阶段已经做了很多为防止系统发布后出现问题的事情,但有意思的是,大多数的系统的问题仍旧是因为新的发布所导致的,就如墨菲定律所描述的一样,因此,我们得清楚认识到上线是最后可能造成系统故障的时候,我们无法追求系统永远不出问题,我们追求的是将故障所造成的影响时间、范围尽量缩短。
在这里插入图片描述

因此首先我们至少需要明确本次发布需要准备哪些事项(Checklist),这些事项至少要包括如下几点:
发布内容:包括发布时间,发布的服务(服务发布顺序),发布的脚本(是否存在大表操作,脚本执行时间),配置中心修改项等。

发布影响评估:业务影响,应用影响,系统影响等。

回滚方案:搞清楚什么时候需要回滚?通常我们如果我们发现服务核心功能不可用了,就应该立即回滚,如果非这种情况,则一般结合日志,监控等观察工具,如有明显异常数增长,则也应立即采取回滚避险方式。
回滚内容就是发布的内容,服务回滚,脚本回滚,配置项回滚等,最后观察回滚后是否如预期一样恢复正常。

发布后验证:系统运行是否正常?业务功能是否正常?新上线的内容是否满足预期?

三板斧
在这里插入图片描述

阿里有个安全生产三板斧的概念:可观测、可灰度、可回滚。

可观测就是一系列系统与业务指标的问题,最后在避免漏报与无效告警之间平衡。

可灰度前面提到过除了业务本身的灰度要求之外,技术从系统稳定性上考虑也会有灰度的要求,比如按机器维度,按流量维度,按用户维度等等。

最后就是可回滚,通常是通过代码开关控制或直接服务部署回滚,在设计时考虑好兼容性即可,这点在设计阶段也已经提到过。

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

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

相关文章

Adobe Premiere Pro(Pr)安装包软件下载

一、简介 Adobe Premiere Pro(简称Pr)是由Adobe公司开发的一款功能强大的视频编辑软件。它支持多平台使用,包括Windows和Mac系统,并且拥有良好的兼容性和高效的性能。Premiere Pro不仅提供了视频剪辑、特效添加、音频处理等基本功…

go语言Gin框架的学习路线(七)

GORM入门(基于七米老师) 目录 GORM入门 安装 连接数据库 连接MySQL 连接PostgreSQL 连接Sqlite3 连接SQL Server 我们搞一个连接MySQL的例子 创建数据库 GORM操作MySQL GORM是一个流行的Go语言ORM(对象关系映射)库,它提供了一种方…

Haproxy服务

目录 一.haproxy介绍 1.主要特点和功能 2.haproxy 调度算法 3.haproxy 与nginx 和lvs的区别 二.安装 haproxy 服务 1. yum安装 2.第三方rpm 安装 3.编译安装haproxy 三.配置文件详解 1.官方地址配置文件官方帮助文档 2.HAProxy 的配置文件haproxy.cfg由两大部分组成&…

IAR环境下STM32+IAP方案的实现

--基于STM32F103ZET6的UART通讯实现 一、什么是IAP,为什么要IAP IAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了,如果在设备使…

【C++】 string类的模拟实现

目录 一、我们先创建三个文件分别为 String.h(声明)、String.cpp(定义)、teat.cpp(测试) 二、成员函数 构造函数与析构函数 🌟string() 🌟string(const char* str) &#x1f…

YOLO 模型基础入门及官方示例演示

文章目录 Github官网简介模式数据集Python 环境Conda 环境Docker 环境部署 CPU 版本官方 CLI 示例官方 Python 示例 任务目标检测姿势估计图像分类 Ultralytics HUB视频流示例 Github https://github.com/ultralytics/ultralytics 官网 https://docs.ultralytics.com/zhhttp…

python-网络并发模型

3. 网络并发模型 3.1 网络并发模型概述 什么是网络并发 在实际工作中,一个服务端程序往往要应对多个客户端同时发起访问的情况。如果让服务端程序能够更好的同时满足更多客户端网络请求的情形,这就是并发网络模型。 循环网络模型问题 循环网络模型只能…

跨平台WPF音乐商店应用程序

目录 一 简介 二 设计思路 三 源码 一 简介 支持在线检索音乐,支持实时浏览当前收藏的音乐及音乐数据的持久化。 二 设计思路 采用MVVM架构,前后端分离,子界面弹出始终位于主界面的中心。 三 源码 视窗引导启动源码: namesp…

知名在线市场 Etsy 允许在其平台上销售 AI 艺术品,但有条件限制|TodayAI

近日,以手工和复古商品著称的在线市场 Etsy 宣布,将允许在其平台上销售 AI 生成的艺术品。这一举措引发了广泛关注和争议。尽管 Etsy 正在接受 AI 艺术的潮流,但平台对这一类商品的销售设置了一些限制。 根据 Etsy 新发布的政策,…

51单片机(STC8H8K64U/STC8051U34K64)_RA8889驱动TFT大屏_I2C_HW参考代码(v1.3) 硬件I2C方式

本篇介绍单片机使用硬件I2C方式控制RA8889驱动彩屏。 提供STC8H8K64U和STC8051U34K64的参考代码。 【硬件部份】STC8H8K64U/STC8051U34K64 RA8889开发板 7寸TFT 800x480 1. 实物连接图:STC8H8K64URA8889开发板,使用P2口I2C接口: 2.实物连…

【QT】信号与槽(概述、使用、自定义、连接方式、其他说明)

一、信号和槽概述 在 Qt 中,用户和控件的每次交互过程称为一个事件。比如 “用户点击按钮” 是一个事件,“用户关闭窗口” 也是一个事件。每个事件都会发出一个信号,例如用户点击按钮会发出 “按钮被点击” 的信号,用户关闭窗口…

windows edge自带的pdf分割工具(功能)

WPS分割pdf得会员,要充值!网上一顿乱找,发现最简单,最好用,免费的还是回到Windows。 Windows上直接在edge浏览器打开PDF,点击 打印 按钮,页面下选择对应页数 打印机 选择 另存为PDF,然后保存就…

记录一下在Hyper-v中动态磁盘在Ubuntu中不完全用到的问题(扩展根目录)

在之前给hyper虚拟机的Ubuntu分配磁盘有20G; 后来在Ubuntu中查看磁盘发现有一个分区没用到: 贴的图片是完成扩展后的 之前这里是10G,然后有个dev/sda4的分区,也是10G,Type是Microsoft Basic Data; …

【LeetCode】填充每个节点的下一个右侧节点指针 II

目录 一、题目二、解法完整代码 一、题目 给定一个二叉树: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NUL…

spring security源码追踪理解(一)

一、前言 近期看了spring security相关的介绍,再加上项目所用若依框架的底层安全模块也是spring security,所以想从源码的角度加深下对该安全模块的理解(看源码之前,我们要先有个意识,那就是spring security安全模块主…

【面试题】Redo log和Undo log

Redo log 介绍Redo log之前我们需要了解一下,mysql数据操作的流程: 上述就是数据操作的流程图,可以发现sql语句并不是直接操作的磁盘而是通过操作内存,然后进行内存到磁盘的一个同步。这里我们必须要了解一些区域: 缓…

c++基础(类和对象中)(类的默认成员函数)

目录 一.构造函数(类似初始化) 1.概念 2.构造函数的特点 二.析构函数(类似 销毁对象/空间) 三.拷贝构造函数(类似复制粘贴的一种 初始化 ) 1.概念: 2.拷贝构造的特点: 四.赋值运算符重载&#xff08…

IDEA的工程与模块管理

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …

STM32的ADC详解

目录 一、ADC简介 二、ADC的时钟 三、ADC特性 四、ADC功能说明 五、规则通道和注入通道 1.规则通道 2.注入通道 3.区别 六、数据寄存器 1.右对齐 2.左对齐 七、转换模式 1.单次转换模式 2.续转换模式 3.扫描模式 4.区别 八、程序实现 1.需求 2.ADC初始化 3.A…

ipv6 基础学习(一)

IPv6 为什么要有IPV6? IPv4地址空间有限:IPv4使用32位地址,最多可提供约43亿个地址。随着互联网设备数量的爆炸式增长,这些地址已经几乎耗尽。 IPv6地址空间庞大:IPv6使用128位地址,可以提供大约3.410^3…