Bug定位与分析,软件测试员你中招了吗?

之所以写这一篇文章,是突然想起来曾经在测试过程中被开发嘲讽过,事情是这样的,当时发现了一个疑似前端的Bug就草草提交到了禅道,结果刚来的女前端看到了就有点生气地问我为啥不查清到底是前后端问题就直接派给她前端了,因为那个问题其实是后端的。而且她还抛出了一句,她们以前公司的测试都是能准确分清前后端的问题再指派的。

从那之后我就长了个记性,凡是遇到的Bug都尽量搞清楚到底是前后端哪边的问题再具体指派到开发。相信很多人应该也有过类似的经历,但是可能为了快速测试或者因为不太会定位前后端问题而直接将Bug随便挂到了某个开发头上,聪明一点的呢直接挂到了开发组长头上让他重新指派!其实这样对自身的成长以及塑造自己专业测试的形象都是不利的,如果刚开始做测试还好,做的久了必须是要像老中医一样把脉把准了才“开药”!

而且还有一点就是有些团队缺乏有效的管理,如果测试人员不区分前后端问题直接指派,可能导致前后端人员踢皮球,都说不是自己的问题,浪费很多时间在这种相互消耗上。再退一步说,即使指派对了人,可是测试人员并未准确指明具体问题的原因,比如接口传参错误,那么对于有些新手开发来说也可能修改不到正确的地方,这种情况我也遇到过,最后导致一个Bug来来回回修改了多次,耽误了时间也累了双方,而且你会发现到最后有些问题其实是同一个原因导致的,如果你不能够找出具体“症结”,可能会导致将同一个问题提交多个Bug,这也会浪费掉很多宝贵的测试时间,所以说测试人员自己能够清楚地辨别前后端问题且能分析出具体原因,是利人利己之事!

上了写了这一堆,我相信凡是做过测试的人肯定深有体会,所以很多测试小伙伴也开始意识到Bug的定位与分析是非常重要的,它需要很强的综合素质,是整个测试过程中的核心能力,需要很强的逻辑判断力,敏锐的观察力,丰富的经验等,虽然是功能测试,可是有时候也需要其它测试领域的技能辅助,因为这门功夫要懂的实在太多,限于篇幅此文章仅围绕Bug的定位与分析简单聊聊,希望能够起到抛砖引玉的作用。

我们先从Bug的定位说起,一般来说bug大多数存在于3个模块中:

·前台的界面,也就是UI层面的,包括界面的显示,兼容性,数据提交的判断,页面的跳转,信息的收发等等,这些bug基本都是很直观的,不太需要定位,刚开始做测试的小白也能一眼辨认。当然也不排除一些特殊情况,本身数据传过来的时候就有问题,所以显示会出问题的情况。

·后台的程序,包括代码逻辑的实现,前台调用的接口,中间层缓存和转发数据,定时任务脚本异步处理数据,程序之间的相互调用等等,而这些bug往往都是不可见的,大部分还好,可能从功能上就能发现,但是还有些藏得比较深,这就需要凭借一些开发经验和辅助工具去定位了。

·数据库,包括数据库无法连接,表中缺少字段,字段定义错误,数据重复,字段长度限制等等,这些bug需要通过数据库工具(如Navicat等数据库管理工具)以及一些基本的数据库查询语句来定位,当然前提是要遍历到每个表,每个字段甚至每一个值。

以上提到很多问题是显而易见的,但是还有一些藏的较深的问题,那么这些隐藏较深的bug该如何定位呢?

像此类Bug其实也很多,只是有时候由于各种原因我们放跑了它们,现在就举个最常见的例子:比如我们偶尔会遇到提交表单会发现正常的数据提交时会失败,那么如何定位呢?

1.首先要打开抓包工具,随便你用Fiddler还是Wireshark等,然后提交正常的表单,看是调用后台接口的时候传的参数是否和之前填写的一致,比如表单填的是数字,而接口需要传的是字符串,那么就是前台传的问题,如果一致说明不是前台问题,继续往下排查;

2.需要一方面继续看抓包的数据,接口返回的错误是什么,如果能明确看到错误原因的消息,也就能定位到问题,如果不能看到则要继续连接测试服务器查看日志,看是程序处理到哪一步有问题;

3.如果程序是正常的,那继续往下查,看是否数据库字段定义错误,亦或是超过数据库字段限制的长度,字段定义错误等等。就这样追寻着程序执行的轨迹一步一步去排查,基本上都能定位到问题所在。

4.有时候前端和服务端的交互都正确,但是从测试的角度看不合理,这个时候我们应该翻翻需求文档。如果和需求文档不符,那么就要看下改什么比较合理,是改前端,还是改服务端,或者两者都要改。这里有一个原则,就是前端尽可能少地去承担逻辑,只负责渲染展现。

5.常见的bug可能还有构建方面的原因,比如代码本身没错,但是合并代码到主干后出现了问题,比如代码存在冲突时手动解决的情况,如果排除了各种情况还是查不到原因,可以从这个层面考虑!

以上只是举了一个简单的表单提交遇到问题如何定位的例子,其实现实中测试遇到稀奇古怪的问题是层出不穷的,比这复杂的问题也多的是,所以我们还是要学会分析问题可能出现的地方,在这个过程中不断去验证自己的猜想,反复排查缩小问题原因存在的半径。只有掌握了这种思路才能以不变应万变。当然本文只是建立在最基础的网络架构下的定位与分析,如果对于复杂的架构定位就更加棘手了,有机会我再写一篇关于复杂网络定位与分析的文章与各位分享。

文末了:

可以到我的个人号:atstudy-js,可以免费领取一份10G软件测试工程师面试宝典文档资料。同时我邀请你进入我们的软件测试学习交流平台,大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,了解测试行业的最新趋势,助你快速进阶Python自动化测试/测试开发,稳住当前职位同时走向高薪之路。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

睿考网:不是会计专业能考中级会计师吗?

不是会计专业也是可以考中级会计师的,中级会计师报名条件中并没有对专业做明确的限制,不同的学历对工作年限的要求不一样,如果考生满足报考条件就可以参加。 1.具备大学专科学历,从事会计工作满5年。 2.具备大学本科学历或学士学…

大数据Doris(七十):全球电商狂欢节万亿级实时大屏解决方案

文章目录 全球电商狂欢节万亿级实时大屏解决方案 一、背景介绍 <

学习vue3第十一节(依赖注入:provide/inject)

本机介绍&#xff1a;provide/inject 注意&#xff1a;大家在看此小节时候&#xff0c;默认大家已经了解一些组件的使用方法 1、依赖注入的用途&#xff1a; 当嵌套层级多的时候&#xff0c;某个子组件需要较远层级的父组件数据时候&#xff0c;如果我们依然使用props 传递数…

算法学习 | day25/60 递增子序列/全排列/全排列II

一、题目打卡 1.1 递增子序列 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> path;vector<vector<int>> res;int tmp INT_MIN;void recur(vector<int>& nums, int startInd){if(p…

Java项目:74 ssm基于Java的超市管理系统+jsp

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 功能包括:商品分类&#xff0c;供货商管理&#xff0c;库存管理&#xff0c;销售统计&#xff0c;用户及角色管理&#xff0c;等等功能。项目采…

数据库性能压测之TPC-C基准测试

原文链接&#xff1a;https://blog.csdn.net/TIME_1981/article/details/126114797 本文作为学习笔记记录。 TPC Transaction Processing Performance Council (TPC) 事务处理性能委员会&#xff0c;是一家非盈利IT组织&#xff0c;他们的目的是定义数据库基准并且向产业界推…

力扣438. 找到字符串中所有字母异位词

Problem: 438. 找到字符串中所有字母异位词 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.编写辅助函数bool same(vector& need, vector& matched)&#xff1a; 1.1 以need为标准&#xff0c;循环对比need和matched的每一个位置的元素值是否相等 2.获…

NAT---网络地址转换技术

Network Address Translation 1、起源&#xff1a;ip地址不够用 2、作用&#xff1a;让私网地址映射成公网地址&#xff0c;进而访问网络。 3、私网Ip地址的范围&#xff1a; A类&#xff1a;10.0.0.0-10.255.255.255 B类&#xff1a;172.16.0.0-172.31.255.255 C类&…

多线程合并练习题,线程安全(售票任务引入)--学习JavaEE的day30

day30 练习&#xff08;day29&#xff09; 注意代码注释&#xff0c;里面涉及代码实现遇到问题及解决方案&#xff0c;由于理解方便没有单独出来 1.计算任务 1.计算任务&#xff0c;一个包含了2万个整数的数组&#xff0c;分拆了多个线程来进行并行计算&#xff0c;最后汇总出…

Open CASCADE 用户指南:可视化

文章目录 介绍基本概念呈现(Presentation)Presentation 的结构Presentation 包(package)基本示例&#xff1a;如何显示 3D 对象 选择(Selection)术语和概念算法包和类(Packages and classes)使用示例 应用交互服务&#xff08;AIS&#xff09;介绍交互对象呈现(Presentations)隐…

【C语言】【Leetcode】88. 合并两个有序数组

文章目录 一、题目二、思路再思考 一、题目 链接: link 二、思路 这题属于简单题&#xff0c;比较粗暴的做法就是直接比较两个数组&#xff0c;先把第二个数组加到第一个的后面&#xff0c;如何冒泡排序&#xff0c;这种方法简单粗暴但有效&#xff0c;可是不适用于这题&…

Vue3使用v-if指令进行条件渲染

Vue3使用v-if指令进行条件渲染 条件渲染是根据条件的真假来有条件地渲染元素。在Vue.js 3.x中&#xff0c;常见的条件渲染包括使用v-if指令和v-show指令。本文讲解使用v-if指令进行条件渲染。 2.3.1 v-if/v-else-if/v-else 在Vue中使用v-if、v-else-if和v-else指令实现条件…

数据结构·二叉树(1)

目录 1 树的概念及结构 1.1 树的结构 1.2 树的概念 1.3树的表示 2 二叉树的概念及结构 2.1二叉树的概念 2.2 特殊的二叉树 2.3 二叉树的存储结构 1 树的概念及结构 1.1 树的结构 前面所学到的顺序表链表等&#xff0c;都是线性的数据结构&#xff0c;今天介绍的树&am…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-第几个幸运数字

幸运数字是可以被3,5,7任一整除的数字&#xff0c;列举小明号码内的所有可能组合并计数。注意别忘了把1占的一位减去。 #include<stdio.h> typedef long long ll; int main(){long long ans 0, n 59084709587505LL;for(ll i 1; i < n; i * 3){//计算小于等于n的数…

代码随想录训练营Day32:● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机II 题目链接 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/ 题目描述 思路 看完视频讲解之后豁然开朗啊简直了&#xff01;&#xff01;&#xff01; 统计后一天减去前一天&#xff0c;差值为正数的&#xff0c;再…

一篇文章带你搞定接单的多种渠道,赶紧码住!!!

相信大家也看到了不少人通过网络接单实现年入30W&#xff0c;彻底财富自由&#xff01;咱看了&#xff0c;真的很难不心痒痒&#xff0c;想加入其中&#xff0c;大干一场&#xff01;毕竟搞钱嘛&#xff01;才是王道。但是呢&#xff0c;也有很多人心向往之&#xff0c;奈何不知…

C++剑指offer与高频面试题源码解答与分析

这是博主在当初秋招刷题时候记录的剑指offer第二版以及一些高频题的C源码和解法分析&#xff0c;可以说把这上面的题练好了面试不虚&#xff0c;最后也顺利帮助我拿下baidu ali meituan等多家大厂offer。整篇文章写了大概5W个字&#xff0c;也是积累了很长一段时间的作品&#…

MYSQL通过substr函数与instr函数截取字符串

mysql通过substr函数与instr函数截取字符串 1.从字段左边开始第三位&#xff0c;截取到结束2.截取字段前三位3.截取字段后三位4.从字段右边开始第三位&#xff0c;往后截取一位5.从字段小数点的位置开始&#xff0c;向后截取两位&#xff08;使用了instr&#xff08;&#xff0…

leetcode刷题日记-外观数组

题目描述 解题思路 初始化字符串 init 为 “1”&#xff0c;作为外观数列的第一项。 通过循环迭代生成外观数列的下一项&#xff0c;循环次数为 n-1&#xff0c;因为已经初始化了第一项。 在每次迭代中&#xff0c;通过两个指针 pos 和 start 来遍历当前项 init&#xff0c;po…