一个看不见的 Bug?

如何确定是不是一个bug? 在软件测试过程中,我们经常会遇到一些异常现象,但并非所有异常都是Bug。通常指软件的实际行为与预期行为不一致,导致功能、性能或用户体验出现问题。(如API返回错误数据)→ 可能是第三方问题,不算本系统Bug。(如有报错,附上Console日志或服务器日志):软件未按照需求规格说明(PRD/SRS)运行。如果PRD未明确说明,需与产品经理确认,可能是。:简明扼要(如:“购物车结算时价格计算错误”)如果软件行为与PRD(产品需求文档)不一致,:界面显示异常、交互不符合用户习惯。(需求文档、行业标准、用户常识) 阅读详情

最近有网友又跟我反馈说有 bug。

我说:啥 bug?

对方说:刚申请的内部用户的账号登录不上去。

我说:还有这种事,报啥错?

登录的时候报了这个错:

图片

我一看还好还好,跟上一次不一样的错,不然我都觉得我穿越回去了。

我脑子都不动一下,直接回复:是不是输入空格了?我看之前的逻辑是不会自动去除首尾空格的。

对方答:

图片

我不信邪,要到账号密码(密码是建立账号后通过邮箱发送的),自己实验了一下,还真的登不上去。

奇了怪了,这块逻辑我看了下,实现很简单,大概逻辑简化后的代码如下:

User user = userService.getOne(username,password);if (Objects.isnull(user)) {    throw new Exception("用户或密码错误");}

这里的 username 是员工姓名,这个实现我觉得很奇葩…重名了咋办?

搜索条件加了密码避免了重名的情况…

但万一密码一样且重名呢??

理论上这个概率比较低,因为密码够复杂,长度必须为 18 位,且必须包含字母大小写、数字和特殊符号,但是确实是有这个可能,所以为啥不能用手机号当登录账号呢?

算了,不纠结这个,还是来看看为啥登录不上去吧!

看着报错,肯定就是 user 没找到呗,那么我自己输入了一遍账号和密码,确认没输错,于是就怀疑起密码,难道是邮寄发送的密码和数据库实际存储的不一样?

我登上数据库,利用 username 查询这条记录,想对比下密码,发现竟然找不到这条记录??

(假设这个 username 是 aaa)

select * from user where username='aaa';

我的发?难道是账号没生成?

因为发邮件和数据库保存账号肯定不是一个事务操作,所以有几率会发生这种情况。

随即我按照 id 倒序取最新五条看看最近的记录都是啥,又发现有 aaa 这条记录???

我的发?见鬼了吗?

突然开始怀疑这个 username 的格式,直接在阿里云 DMS 上点开这个字段,果然发现了猫腻!

图片

可以看到名字中间有红点,而正常的名字中间都是没红点的,那么这个红点是什么玩意?

我把红点拷贝出来,直接一个 urlEncode,从界面可以看到输入那边完全看不出有任何东西,但是实际 encode 是有值的:

图片

%E2%80%8B 这又是啥玩意?我直接一个搜索:

图片

零宽空格!!好吧,懂了,破案了,怪不得数据没匹配上!

简单理解就是这个字符正常情况下肉眼不可见,但是它确实存在,所以手输的 aaa 匹配不上存在数据库里面的 aaa,因为数据库的 aaa 夹了看不见的 "内鬼" 啊!。

除了零宽空格,还有别的零宽字符,比如零宽非断空格符、零宽度连字符等等,特性都是非打印,即肉眼不可见。

它们可以用来实现隐形水印或者信息加密。

我找了个网站,咱们看看效果:

图片

比如我将 ' 你好 ' 和' 好个屁 ' 混合了一下,得到右边的 ' 你好 '。

此时复制右边的 ' 你好 ',decode 以下就能得到隐写的 ' 好个屁 ':

图片

原理也很简单,将要加密的字符转成二进制,然后按照一定的规则翻译,比如 1 转成零度空格符、0 转成零宽非断空格符,字母间隔用零宽连接符分隔。

然后解密的时候按照上述规则翻译过来即可。

网址贴这里的,有兴趣的可以自己去玩玩 :

https://yuanfux.github.io/zero-width-web/

最后我直接把这个姓名重新编辑了一下就好了,操作人员因为是从工单上复制姓名,所以才搞出了这个零宽字符,后续让他手输!

如何优雅地记录一个Bug 我们为什么需要记录Bug? Bug包含的要素 确认Bug是Bug 帮助复现、定位Bug的信息 帮助Bug管理的信息 阅读详情

相关推荐

你在测试中发现了一个bug,但是开发认为这不是一个bug,你应该怎样解决?

测试、bug 协调合作

fengyupotest的博客 3211

Zookeeper部署的一个看不见的bug!!!全网搜帖子也没解决,最后发现竟然是。。。

bug卡的记忆犹新!!

ygzw_n的博客 324

【测试】如何判断一个 Bug 属于前端还是后端?

文章目录@[toc]为撒子要区分前端/后端 Bug?前端/后端 Bug 各有何特点?如何区分前端/后端Bug?定位 Bug 属于前端还是后端,有什么办法?1. 接口查看法2. 日志查看法3. 经验法 为撒子要区分前端/后端 Bug? 在中国社会,当 Bug 不能明确是归属谁的时候,大家会采取踢皮球形式踢来踢去,从而导致沟通成本增加、Bug 解决延误等问题,毕竟谁会主动承认自己的错误呢! 前端/后端 Bug 各有何特点? 前端 Bug 后端Bug 界面相关 业务逻辑相关 布局相关 性能..

不出意外,是个啥也不会的博主(#^.^#) 2850

(005)看不见的字符 - 零宽断言

看不见的字符 - ZWSP。

WGYHAPPY的博客 184

拿到一个新 bug 怎样分析

拿到一个新 bug 怎样分析

专栏 1418

高频面波成像实战:从频散曲线到全波形反演

面波勘探是近地表工程勘察的重要手段,其核心原理在于不同频率的面波对地下介质的敏感深度不同,由此形成的频散曲线能够反映浅层剪切波速结构。相较于传统钻探与折射波法,高频面波成像具有无损、高效、对低速夹层敏感等优势,广泛应用于路基检测、空洞探测、滑坡调查等领域。在实际工程中,从野外采集的排列设计、震源选型,到频散谱提取与频散曲线反演,每一步都直接影响成像精度。然而频散反演受限于一维层状假设,难以刻画横向剧烈变化的地质体。全波形反演通过拟合完整波形信息,能够突破频散曲线的分辨率边界,获得更精细的近地表速度模型。本文

weixin_29090917的博客 270

如何定义一个BUG

一、划分一个bug的等级 bug等级主要分为致命、严重、一般、轻微或者建议四个等级; 1.致命错误:系统无法执行、崩溃或严重资源不足、应用模块无法启动或异常退出、无法测试、造成系统不稳定、价值较高功能异常(比如与金钱相关的功能) 具体基本上可分为: (1)严重花屏 (2)内存泄漏 (3)安全问题 (4)用户权限问题 (5)网页无法正常打开 (6)严重的数值计算错误 (7)功能设...

weixin_30640291的博客 1926

tree_sitter多语言解析器配置实战指南

本文是一份详细的Tree-sitter多语言解析器配置实战指南。文章从零开始,手把手指导如何搭建Python环境、安装指定版本的tree-sitter库、下载并编译多种语言的语法规则,最终构建一个统一的解析器库。通过实战代码演示了如何初始化解析器、解析代码并遍历语法树,旨在帮助开发者高效处理多语言代码分析任务,并分享了高级技巧与常见问题排坑经验。

weixin_29245767的博客 268

测试:bug的生命周期、bug的等级、如何描述一个bug

一、Bug 的生命周期 new - open - fixing - verify - close 发现bug–>提交bug–>指派bug–>研发确认bug–>研发去修复bug–>回归验证bug–>是否通过验证–>关闭bug ● New:新发现的Bug,未经评审决定是否指派给开发人员进行修改。 ● Open:确认是Bug,并且认为需要进行修改,指派给...

ETalien_的博客 4146

如何点亮一颗sensor

要点亮一个sensor需要从,时钟、sensorI2C,供电,reset脚,mipi的配置几个方面一一确认。 reset脚拉高 给sensor的时钟有没有。(目前用到的常为24MHZ) 供电 查看sensor的数据手册,看有几个电源,用示波器量一下是否为手册规定的电压 比如:DVDD 数字电压: AVDD模拟电压 DOVDD芯片引脚出来的电压等为多少。 sensor的I2C能否抓到 将I2C的口对应上,用示波器量取i2c的波形。 检查有应答并且数据正确。读写地址是否正...

weixin_40787463的博客 3650

手把手教你配置RK3588的FFmpeg+RKmpp:从解码到RGA转换的完整避坑指南

本文详细介绍了在RK3588平台上配置FFmpeg+RKmpp进行硬件解码和RGA图像处理的完整流程,包括环境准备、DRM Prime解码输出实战、RGA硬件加速转换技巧以及全链路性能调优。通过具体代码示例和问题排查指南,帮助开发者高效实现视频处理流水线,显著提升性能并降低CPU占用率。

weixin_28366475的博客 475

怎么提交一个漂亮的Bug

Bug管理工具有很多,jira、禅道、git、mantis等等,有些公司,甚至会用Word、Excel等来记录Bug,不论是工具或者文档,只要能记录问题,都是可以的 那么如何报一个Bug才对呢,首先来看什么是漂亮的Bug: 一个好的Bug包括了简洁的标题,详细的步骤,明了的截图等 根据Bug步骤能重现bug 其他人看到你的Bug,心情没有变糟糕,要记住,你报的Bug,阅读对象可能是其他测试、...

Anita__Li的博客 3000

Fluent新手必看:如何正确解读scaled residuals曲线(附常见问题排查)

本文详细解析了Fluent中scaled residuals曲线的解读方法及常见问题排查技巧。针对continuity残差居高不下、湍流模型收敛困难等典型问题,提供了网格质量检查、边界条件验证和求解策略调整的实用解决方案,帮助CFD新手快速掌握计算收敛性的关键判断标准。

weixin_28698059的博客 378

什么是bug?如何描述一个bug?

如:软件中数据保存后数据库中显示错误,用户所要求的功能缺失,程序接口错误,数值计算统计错误等(该等级问题出现在不影响其他功能测试的情况下可以继续该版本的测试)。如错别字、界面格式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置不正确,用户体验感受不好,可以优化性能的方案等(此类问题在测试初期比较多,优先程度较低;环境分为硬件环境和软件环境,如果是web项目,需要描述浏览器版本,客户机操作系统等,如果是app项目,需要描述机型、分辨率、操作系统版本等。

qq_56444564的博客 4831

J204B接口数据链路的建立

介绍J204B数据链路层的建立方式

QUACK_G的博客 6553

宇树G1开发实践--PPT汇报(遥控版)

本文介绍了一种基于遥控器交互的机器人演示控制系统。系统通过DDS中间件接收遥控器信号,采用位掩码边沿检测技术实现按键精准响应,将不同按键映射为播放控制命令(暂停/重播、跳转、跳过等)。核心交互逻辑包含主播放循环、命令处理和暂停机制,支持播放过程中的实时控制。与自动顺序播放版相比,该系统显著提升了演示灵活性,适用于需要人机互动的演讲场景。使用前需确保网络连接和设备安全,并熟悉按键功能映射。该系统实现了专业级的人机协同演示体验。

m0_47999117的博客 680

【软件测试】什么是Bug?Bug是如何分级的?Bug的生命周期是怎样的?如何描述一个Bug?

Bug的相关概念.Bug的分级. Bug的生命周期. 描述一个Bug

m0_74105656的博客 1874

CryoEM - 冷冻电镜 基于深度学习的 从头重构(Ab-initio Reconstruction) 开源项目 教程

冷冻电镜(CryoEM) 是一种成像方式,为蛋白质和其他生命基本组成部分的动态,提供独特的观察方式。从数百万噪声和随机取向的二维投影中,以计算效率高的方式,联合估计生物大分子的姿态、三维结构和构象异质性。

AGI 1557

我是一个Bug, 终极大Bug

我是一个Bug ,在这个系统中潜伏很久了,历经多轮测试的严酷考验而屹立不倒,如果Bug界按难度分类的话,我绝对属于地狱模式。现在,我就等待一个倒霉蛋来触发, 可是他老是不...

码农翻身 499

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

一个 Bug JDK 居然改了十年?

你敢相信么一个简单的Bug,JDK 居然花了十年时间才修改完成。赶快来看看到底是个什么样的 Bug?

javadaysdaysup的博客 990

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java nio的一个严重BUG

这个BUG会在linux上导致cpu 100%,使得nio server/client不可用,具体的详情可以看这里http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6403933 。令人失望的是这个BUG直到jdk 6u4才解决,sun的拖沓让人难以相信。这个BUG在server端容易出现,因为server端有频繁地接入断开连接。    

沉底的石头 4900

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

一个BUG

解决了一个很隐蔽的BUG,就在刚才。 写了一个类,其对象实例需在多线程中使用,因此打算把互斥机制封装在类的内部。 于是在类里定义了一个boost::mutex类型的变量,取名叫“mutex_”。 在成员函数中使用的时候,用这个mutex_对象初始化一个局部锁: mutex::scoped_lock lock(mutex_); 然后写了个单元测试,创建三个线程,每个线程调用对象的某

steedhorse的专栏 1921

timestampdiff的一个BUG

发现一个timestampdiff无法正确判断列值的BUG,看下面例子: --测试表如下: mysql> select * from test; +----+---------------------+ | id | col2 | +----+---------------------+ | 1 | 2019-03-20 00:00:00 | | 2 | 2...

灯火觅阑珊 2967

我是一个Bug, 终极大Bug。。。

我是一个Bug ,在这个系统中潜伏很久了,历经多轮测试的严酷考验而屹立不倒,如果Bug界按难度分类的话,我绝对属于地狱模式。现在,我就等待一个倒霉蛋来触发, 可是他老是不...

426

【bug传奇】12个bug个个成经典,最后一个毁了一个帝国

1947年9月9日,葛丽丝·霍普(Grace Hopper)发现了第一个电脑上的bug。当在Mark II计算机上工作时,整个团队都搞不清楚为什么电脑不能正常运作了。第一代的计算机是由许多庞大且昂贵的真空管组成,并利用大量的电力来使真空管发光。可能正是由于计算机运行产生的光和热,引得一只小虫子飞入了一支真空管内而引起的故障。这个团队把错误解除了,并在日记本中记录下了这一事件。也因此,人们逐渐开始用“Bug”(原意为“虫子”)来称呼计算机中的隐错。

3156
上一篇: SpringBoot如何保证接口幂等性?
下一篇: 别再乱用了,Java 21 将弃用、删除这些功能!
IT界那些事儿
博客等级 码龄6年 2万+粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值