从防范到防御异常场景处理机制终于闭环了

news2024/9/21 4:33:56
  • 前言

  • 为什么要做异常场景自动化监控?

  • 怎么做?

  • 做这件事情的意义!

前言

QA在异常场景的处理上,之前更多地侧重于防范,通过风险评估、异常测试等手段降低异常发生的概率。异常场景数据的自动化监控更多地侧重于防御,在异常发生时,可以迅速响应、及时处理减少损失。在异常处理机制中二者缺一不可,相互协同形成闭环。本篇文章以门店异常数据自动化监控机制为例,重点聊下异常防御方面正在做的一些事情及意义。

为什么要做异常场景自动化监控?

QA在日常中的事情大概包括需求评审过程中提出遗漏点,技术评审时指出开发设计方案的不合理点,多与开发产品沟通评估回归范围,在测试过程中确保测试场景覆盖面,多考虑异常情况等。在做到以上事情以外,可能还是会在一定程度上不可避免地漏掉一些场景,那么我们如何在上线完成后及时发现这些漏掉的问题呢?门店目前已有的问题发现形式主要有以下几种方式:

(1)店员反馈给运营,运营排查完后再反馈给产品,最终由产品反馈给技术,技术进行问题排查并解决;

(2)线上online问题反馈;

(3)开发业务报警代码,企业微信群中发业务报警;

(4)异常日志治理;

但以上发现问题的方式大多会经历比较长的时间,对于涉及到钱款的问题,比如券和红包的发放,如果在线上持续时间较长就会造成比较大的损失;而对于商品状态未正常流转的问题,也会导致商品售出时效变低,影响售卖。而且在收到反馈问题后,开发进行排查,分析问题原因,再进行修复,也是比较耗时的。甚至有时在收到问题反馈时,已经无法查到当时的日志,无法定位原因。综上所述,异常数据自动化监控就发挥了作用,能否及时发现线上异常数据,是非常重要的。

怎么做?

在及时发现问题这个痛点上门店是怎么做的呢?我们主要是通过接入中台的bcp系统来解决此痛点的。首先简单介绍一下bcp系统的能力,bcp系统是基于MQ消息内容,与业务代码解耦的方式进行业务校验,只要能够发出MQ消息,就能够做到业务校验,目前支持监听数据库变更的Binlog及业务的mq。

目前的校验规则包括aviator规则引擎开发模式和java规则引擎开发模式。

对于校验规则简单,且执行校验规则不依赖第三方数据源的场景,可以采用aviator规则引擎开发模式进行规则配置。

java规则引擎开发模式中校验规则编写需要继承AbstractJavaRuleExecuteEngine 实现 when(条件过滤)和then(业务数据校验)两个方法。当when方法返回true的时候,才执行then方法(业务数据校验逻辑)。

门店校验回收单取件状态一致性规则举例如下:

when中内容

从map中拿到 消息体中的内容,获取到变更前的状态,变更后的状态,ordersource进行简单的为空判断、值的判断

图片

then中的内容

建立数据源链接

图片

 

编写sql语句,执行sql语句,对查询结果进行校验

图片

 

具体接入场景

接入之前,梳理总结出门店容易出现问题的场景如下:

(1)多场景并发导致的商品状态不对问题,商品状态不正确,无法正常销售、调拨等

(2)零售系统发放以旧换优券用户领券异常,系统无感知;

(3)回收单门店侧发货状态与中台侧状态不一致,无法正常发货;

(4)回收系统用户多领取回收加价券或多使用券,系统无感知;

(5)回收单状态卡单,实际商品已丢失或者是被盗,系统无感知;

(6)门店侧存的零售商品价格与商品侧存的价格不一致,导致店员和用户看到的商品价格不一致。

目前门店已接入场景校验规则20个,其中回收7个,零售11个,基建2个。

场景校验中主要采用了以下方式

(1)监听业务mq消息,采用aviator规则引擎开发模式,定义过滤规则条件及数据校验内容,无需编写校验逻辑代码;

图片

(2)监听业务mq消息,编写校验逻辑代码,调用rpc接口查询数据并校验;

图片

 

(3)监听数据库表变更的Binlog,经过配置的延时时间后,再次查询数据库表,查看进货单或者调拨单对应的商品状态是否发生变更;

图片

在接入的这段时间内,共发现卡单数据671条,零售:6条,回收:664条。其中零售侧的6条异常数据,包括同售状态卡单的场景3个,调拨单返回库存与scp库存不一致场景1个,多个表中状态不一致场景1个,门店零售价格和商品侧零售价格不一致1个。

其中同售状态卡单的主要原因为并发场景,开发已纳入后续并发场景优化的规划中;

商品价格不一致的原因为门店发起调价,门店侧调价成功,商品在B2C卖场处于下单未支付状态,不支持门店发起调价,导致商品侧调价失败,最终门店零售价格和商品侧零售价格不一致;

回收侧的异常数据,主要是状态卡单,之前曾采用过每周将所有数据直接同步运营,经反馈,在每周反馈运营时,有些回收单状态已经流转,数据准确性不高,因此我们每周在给梳理反馈之前,先手动去转转交易工具箱查询回收单状态是否已流转,完成一层过滤再反馈给运营,保证数据准确性。经过一段时间的实行,后续逐步和运营沟通得知他们对于卡在60状态之前的回收单,是每周完成闭环处理,卡在60状态以后的回收单,是每个月跟进处理。了解后我们对于卡单数据做了不同状态的划分,便于运营同学处理跟进。

更进一步考虑,由于目前是手动统计过滤卡单数据,对于QA来说手动过滤会占用较多时间,考虑有没有一种更快速便捷的方式,释放QA,最终确定将bcp发出的异常报警按照不同的规则配置统计时间,自动化统计过滤,异常数据发给运营后,运营处理完成后将状态置为已解决,完成卡单数据记录的闭环,处理机制逐步完善。完善跟进回收卡单数据的过程如下图所示。bcp异常数据接入异常平台目前正在接入过程中。

图片

 

做这件事情的意义!

(1)在回收和零售整体商品的流转上,提升了流转效率,减少库存积压;

(2)在人工成本上,虽然接入bcp需要耗费一些时间在梳理校验规则上,但在梳理的过程中,QA也更加了解功能的具体逻辑,在对业务的了解上,也更上一层楼;由于接入bcp的规则中已经梳理出校验异常点,在收到异常报警反馈给开发的时候,可以将问题大致的原因一起反馈,从而减少开发重新排查定位问题的时间;

(3)在发现异常上,可以及时发现隐含技术问题,及时防御,减少损失。

综上,门店通过抽离异常场景接入bcp系统可以获取正向收益。后续QA也会继续和开发一起抽离可接入场景,做到异常数据尽早发现,及时分析,尽快解决,建立起坚固的异常防御墙。

术话题。

作者:陈秀婷

> 关注公众号「转转技术」(综合性)、「大转转FE」(专注于FE)、「转转QA」(专注于测试),更多干货实践,欢迎交流分享~

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

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

相关文章

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十九章 平台总线总结回顾

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

matlab 小数取余 rem 和 mod有 bug

目录 前言Matlab取余函数1 mod 函数1.1 命令行输入1.2 命令行输出 2 rem 函数2.1 命令行输入2.2 命令行输出 分析原因注意 前言 在 Matlab 代码中mod(0.11, 0.1) < 0.01 判断为真&#xff0c;mod(1.11, 0.1) < 0.01判断为假&#xff0c;导致出现意料外的结果。 结果发现…

CCS(Code Composer Studio 10.4.0)编译软件中文乱码怎么解决

如果是所有文件都出现了中文乱码这时建议直接在窗口首选项中修改&#xff1a;选择"Window" -> "Preferences"&#xff0c;找到"General" -> "Workspace"&#xff0c;将"Text file encoding"选项设置为"Other&quo…

Android lmkd机制详解

目录 一、lmkd介绍 二、lmkd实现原理 2.1 工作原理图 2.2 初始化 2.3 oom_adj获取 2.4 监听psi事件及处理 2.5 进程选取与查杀 2.5.1 进程选取 2.5.2 进程查杀 三、关键系统属性 四、核心数据结构 五、代码时序 一、lmkd介绍 Android lmkd采用epoll方式监听linux内…

关于私域终局的几个观察 【后续加图】

01 私域流量的本质 每个人对「私域」的定义都不一样。 最初&#xff0c;大家认为私域其实就是把微商往高级了说&#xff0c;于是 2020 年我看到许多朋友一窝蜂到朋友圈卖货&#xff0c;冒出了一个段子叫「我们都活成了微商」。 最开始&#xff0c;我也以为「私域」只是微信…

微服务实现全链路灰度发布

一、实现步骤 再请求 Header 中打上标签&#xff0c;例如再 Header 中添加 "gray-tag: true" &#xff0c;其表示要进行灰度测试&#xff08;访问灰度服务&#xff09;&#xff0c;而其他则访问正式服务。在负载均衡器 Spring Cloud LoadBalancer 中&#xff0c;拿到…

普中51单片机:DS1302时钟芯片讲解与应用(十)

文章目录 引言基本特性什么是RAM&#xff1f;什么是涓流充电&#xff1f; 电路图和引脚说明通信协议以及工作流程寄存器控制寄存器日历/时钟寄存器 DS1302读写时序代码演示——数码管显示时分秒 引言 DS1302 是一款广泛使用的实时时钟 (RTC) 芯片&#xff0c;具有低功耗、内置…

Docker-Compose实现MySQL之主从复制

1. 主服务器(IP:192.168.186.77) 1.1 docker-compose.yml services:mysql-master:image: mysql:latest # 使用最新版本的 MySQL 镜像container_name: mysql-master # 容器的名称environment:MYSQL_ROOT_PASSWORD: 123456 # MySQL root 用户的密码MYSQL_DATABASE: masterd…

【科研】# Taylor Francis 论文 LaTeX template模版 及 Word模版

【科研写论文】系列 文章目录 【科研写论文】系列前言一、Word 模板&#xff08;附下载网址&#xff09;&#xff1a;二、LaTeX 版本方法1&#xff1a;直接网页端打开&#xff08;附网址&#xff09;方法2&#xff1a;直接下载到本地电脑上编辑下载地址说明及注意事项 前言 给…

【Git】merge合并分支

两个分支未修改同一个文件的同一处位置: Git自动合并 两个分支修改了同一个文件的同一处位置:产生冲突 例&#xff1a; 在master分支修改了main同时&#xff0c;feat分支也修改了相同的文件 合并的时候就会产生冲突 解决方法: Step1- 手工修改冲突文件&#xff0c;合并冲突内容…

C# 实现条件变量

C# 进程通信系列 第一章 共享内存 第二章 条件变量&#xff08;本章&#xff09; 第三章 消息队列 文章目录 C# 进程通信系列前言一、关键实现1、用到的主要对象2、初始化区分创建和打开3、变量放到共享内存4、等待和释放逻辑 二、完整代码三、使用示例1、线程同步控制2、进程…

物理机 gogs+jenkins+sonarqube 实现CI/CD

一、部署gogs_0.11.91_linux_amd64.tar.gz gogs官网下载&#xff1a;https://dl.gogs.io/ yum -y install mariadb-serversystemctl start mariadbsystemctl enable mariadbuseradd gittar zxvf gogs_0.11.91_linux_amd64.tar.gzcd gogsmysql -u root -p < scripts/mysql.…

减轻幻觉新SOTA,7B模型自迭代训练效果超越GPT-4,上海AI lab发布

LLMs在回答各种复杂问题时&#xff0c;有时会“胡言乱语”&#xff0c;产生所谓的幻觉。解决这一问题的初始步骤就是创建高质量幻觉数据集训练模型以帮助检测、缓解幻觉。 但现有的幻觉标注数据集&#xff0c;因为领域窄、数量少&#xff0c;加上制作成本高、标注人员水平不一…

大厂面试官问我:两个1亿行的文件怎么求交集?【后端八股文十五:场景题合集】

本文为【场景题合集】初版&#xff0c;后续还会进行优化更新&#xff0c;欢迎大家关注交流~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f…

第一百七十八节 Java IO教程 - Java符号链接、Java文件

Java IO教程 - Java符号链接 符号链接包含对另一个文件或目录的引用。 符号链接引用的文件称为符号链接的目标文件。 符号链接上的操作对应用程序是透明的。我们可以使用java.nio.file.Files类处理符号链接。 isSymbolicLink(Path p)方法检查指定路径指定的文件是否是符号链…

解决 MDCFilter 引起的 Shiro UnavailableSecurityManagerException 异常:将过滤器交给 Shiro 管理

若将自定义的 MDCFilter 注册到 FilterRegistrationBean 中&#xff0c;而又在 MDCFilter 中使用了和 Shiro 相关的操作&#xff08;如获取当前登录用户&#xff09;&#xff0c;此时会因为 MDCFilter 先于 SecurityManager 实例化导致出现 UnavailableSecurityManagerExceptio…

C语言 ——— 函数指针数组的讲解及其用法

目录 前言 函数指针数组的定义 函数指针数组的使用 前言 数组是存放一组相同类型数据的存储空间 关于指针数组的知识请见&#xff1a;C语言 ——— 指针数组 & 指针数组模拟二维整型数组-CSDN博客 那么要将多个函数的地址存储到数组中&#xff0c;这个数组该如何定义…

太原高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

随着科技的不断进步&#xff0c;智能制造已经成为推动制造业转型升级的重要力量。太原高校大学智能制造实验室紧跟时代步伐&#xff0c;积极推进数字孪生可视化系统平台的建设&#xff0c;并于近日圆满完成了项目的验收工作。这一里程碑式的成果&#xff0c;不仅标志着实验室在…

Angular由一个bug说起之八:实践中遇到的一个数据颗粒度的问题

互联网产品离不开数据处理&#xff0c;数据处理有一些基本的原则包括&#xff1a;准确性、‌完整性、‌一致性、‌保密性、‌及时性。‌ 准确性&#xff1a;是数据处理的首要目标&#xff0c;‌确保数据的真实性和可靠性。‌准确的数据是进行分析和决策的基础&#xff0c;‌因此…

Three.js投射光线实现三维物体交互

<template><div id"webgl"></div> </template><script setup> import * as THREE from three //导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入 dat.gui import { GUI } from thre…