一些有价值bug产生的思考
1、异步处理时防止重复点击的逻辑校验
场景 打款请求时,进入异步处理的队列,生成一个任务号,存在如数据库,且状态为未完成。此时,如果并发操作,如重复点击或者重复调用接口,则发出的两条请求可能被分配到不同服务器处理,此时数据库产生两条数据,同一任务id对应不同进程id,属于异常场景。程序逻辑判断数据>2,不处理,则异步任务终止。
其中,重复点击导致产生两条数据的原因仅为猜测,实际排查过程中发现,前端已经做了防重复点击,可能是后端的前置逻辑导致对同一批数据做两次请求
总结 不仅在同步业务处理时需要注意并发问题,异步任务时也需要根据实现逻辑关注中间状态
解决 1、数据库加联合唯一索引,第二条数据写不进去,直接将数据库报错抛出
2、忽略两天数据的场景,当做正常业务处理,两条都进行更新
3、 排查产生两条数据的原因,源头上杜绝
最终方案选择了2 当时我选择的是1和3,1作为立即解决的方案,在不动业务逻辑的场景下,解决问题,风险较小。3作为后续的溯源很有必要。但是最后没争过开发
2、临时小需求对系统功能的影响,需要思考后再做回归
eg.列表新增字段的需求,需要新增一个时间标签。当做一个简单的回归时正常。但是这个列表中有三个写入的业务类型,其中一个写入类型与其他写入的函数不同。此时,由于未对第三个业务类型进行回归,导致漏测。这也是为什么测试需要参与设计评审的原因。
分析:正常的业务场景和实现方式来说,基于复用原则,和通用的代码实现方式,这种写入应该都是在同一个函数完成。但是防不胜防啊。需求急测试不能急,任何小的修改都可能对你之前的测试结果形成覆盖
3、客户端测试时,需要注意系统与原生兼容和交互,如获取权限,打开文件等
4、前后端交互问题,前端页面展示错误、请求参数错误、交互错误这种类型的bug咱就不提了。主要说一种,请求的同步和异步,也就是时间对请求结果的影响,和前端在处理请求结果时,是否会基于时间的考虑来展示返回结果。
先来个简单的例子,在某修改功能中,要求前端请求后进行查询,以便在列表展示上获取刚才的修改提交。此时,先发出修改请求,再发出查询请求,如果修改请求仍在处理,还没有成功,便返回查询结果,然后返回修改结果,修改成功。此时就造成了展示内容与实际结果不一致。所以查询接口应该等待修改接口返回结果后再发出
前后端交互中也存在同步异步问题。同步就是上面的例子。下面是前后端交互的两种异步场景。
a、轮询(polling) 间隔一定时间不断向后端发送请求,如导出功能,第一次请求导出时,后端给到一个任务id,然后前端拿着这个id每隔1秒请求一次。确定就是消耗大,有延迟。延迟问题可以通过长轮询方式解决,具体自行扩展
b、websocket是跟http一样性质的传输协议。详细区别自己找找,这里就谈一个,http是单向的,websocket是双向的协议。所以很明了,websocket 协议中,服务器端会主动向浏览器端发送结果,进而可以降低延迟。缺点就是资源消耗大。所以在生命周期结束时,应该关闭连接
一些有价值bug产生的思考的更多相关文章
- 为什么我没有拔出钥匙 ——开锁引发的程序bug解决方案的思考
http://blog.csdn.net/wojiushiwo987/article/details/8851204为什么我没有拔出钥匙 ——开 ...
- jsb里出现的 Invalid Native Object的一次bug修复的思考
Cocos2d: jsb: ERROR: File /Users/dcx_JD/Documents/cocos2d-x-2.2.2/scripting/javascript/bindings/gene ...
- 关于bug的一些思考
上午看了两道算法,自己编译器上面敲了一遍,然后又去网站上敲了一遍: 编译器上面无论哦如何都调不出来,网站上面也是: 吃个午饭,睡个觉,醒来重新手撸了一遍,然后就过了 : 面对这种事情,真的是自己应该多 ...
- MyBatis 学习记录7 一个Bug引发的思考
主题 这次学习MyBatis的主题我想记录一个使用起来可能会遇到,但是没有经验的话很不好解决的BUG,在特定情况下很容易发生. 异常 java.lang.IllegalArgumentExceptio ...
- 关于提BUG的一点思考以及工作中总结的规范
在测试的工作中,提BUG是日常工作. 以前自己为了省事,省时,仅仅是截图,在图片上注明一下问题,就放到BUG库中了. 现在发现这样会造成开发的时间的浪费,增加了沟通成本. 对于BUG,当发现了异常时, ...
- 一个小BUG引发的思考。(论开发与测试之间的那点事)
标题不是“一个馒头引发的血案”. 言归正传:今天上午测试的时候,发现了一个BUG,如图: 一个用肉眼就能发现的BUG.原因当然是因为开发同事没有自测试,流入到了测试人员这里了. 无非是开发同事不严谨造 ...
- 面试官,我会写二分查找法!对,没有 bug 的那种!
前言科普 第一篇二分搜索论文是 1946 年发表,然而第一个没有 bug 的二分查找法却是在 1962 年才出现,中间用了 16 年的时间. 2019 年的你,在面试的过程中能手写出没有 bug 的二 ...
- 软件测试价值观-SMBT新理念
软件测试价值观-SMBT新理念 作者:张元礼 http://blog.csdn.net/vincetest 近年来有不少软件测试同行不少有些困惑-软件测试人员的价值在哪里?我们怎么才能做好软件测试?怎 ...
- Mvc分页组件MvcSimplePager代码重构
1 Mvc分页组件MvcSimplePager代码重构 1.1 Intro 1.2 MvcSimplePager 代码优化 1.3 MvcSimplePager 使用 1.4 End Mvc分页组件M ...
随机推荐
- Azure 架构师认证考试
Azure认证路线 AZ-300 AZ-301 https://blog.csdn.net/pg_edb/article/details/86794505 免费题 https://iteablue.c ...
- 在Ubuntu上安装Miniconda
在Ubuntu上安装Miniconda Anaconda是一个开源的Python包管理器,而Miniconda则是轻量级的Anaconda 下载地址:https://docs.conda.io/en/ ...
- LRU hashMap(拉链) + 双向链表 java实现
//基于 hash (拉链法) + 双向链表,LRUcache //若改为开放寻址,线性探测法能更好使用cpuCache public class LRU { private class Node { ...
- RabbitMQ入门及其几种工作模式
1.简介 MQ全程Message Queue,用于应用程序和应用程序间进行通信.RabbitMQ采用Erlang编写,实现了AMQP(高级消息队列)协议,跨平台,支持各种主流的操作系统和多种客户端. ...
- 元数据MetaData(五)
JDBC的元数据接口有: DatabaseMetaData数据库级 ResultSetMetaData结果集级 一.DatabaseMetaData 在对数据源进行连接以后,得到一个Connectio ...
- 【未完成】【oracle】单引号使用问题
‘-’不可以用 原因:
- windows10安装最新的redis
官方给的redis的windows版本最新为3,而linux版本是5 这里通过win10子系统安装,win10子系统的配置见另一篇博客https://www.cnblogs.com/MC-Curry/ ...
- Codeforces Round #603 (Div. 2) F. Economic Difficulties dp
F. Economic Difficulties An electrical grid in Berland palaces consists of 2 grids: main and reserve ...
- Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) D2. Optimal Subsequences (Hard Version) 数据结构 贪心
D2. Optimal Subsequences (Hard Version) This is the harder version of the problem. In this version, ...
- 扎心一问!你凭什么成为top1%的Java工程师?
目录 1.解决生产环境里的突发故障 2.对棘手的线上性能问题进行优化 3.锻造区别于普通码农的核心竞争力 4.打磨架构设计能力 5.你凭什么成为 top1%? 你工作几年了? 是否天天CRUD到吐 ...