遇到bug的解决办法,测试再也不背锅了
为什么定位问题如此重要?
可以明确一个问题是不是真的“bug”
很多时候,我们找到了问题的原因,结果发现这根本不是bug。原因明确,误报就会降低
多个系统交互,可以明确指出是哪个系统的缺陷,防止“踢皮球”,提高问题解决的效率
增强开发对测试的信任度,沟通更有效,配合的更好,开发修改bug时效增强
更有效的了解系统的内部逻辑、数据流处理流程,更能提高测试人员的水平,缺陷修复后,影响的测试范围评估更精准,复测更准确
可以降低缺陷率
这个可以说是最重要的。在bug系统中,会要求开发人员记录bug产生的原因。只有我们自己对bug有一个较全面的认识,才会判别出开发写的是不是真正的原因,也才能有助于我们后续对bug进行分析归类,根据bug分析,有针对性地未雨绸缪,进而提升产品质量,降低缺陷
01 定位原因之前
遇到问题时,先别急着去定位原因。
1、保存bug产生的记录:
首要做的是保存bug产生的记录,保证可以复现。
为什么要保存记录?因为如果以后不能复现,那就不能证明bug的存在。
2、排除低级问题:
然后是排除QA的低级问题,常见的低级问题:
【hosts不对】
hosts文件主要是加快某个域名或者网站的解析速度,从而达到快速访问的作用,也可以屏蔽网站。
hosts异常可能会导致部分网页无法访问,能够加载,但是网页无法正常显示。
【网络不通】:抓包、ping
工具的影响导致的,例如fiddler
以及操作姿势不正确等。
3、排除数据问题(脏数据):
有时候会遇到服务端报500错误,查看日志后,报空指针,那么很有可能就是数据库中关联表的数据被人为删掉导致的。
脏数据:从目标中取出的数据已经过期、错误或者没有意义,这种数据就叫做脏数据
脏读:读取出来脏数据就叫脏读
02 定位问题的思路
排查顺序:
用户环境层面 -> 展示层面 -> 逻辑控制层面 -> 服务层面 -> 数据库层面
1、用户环境层面
主要是指基础环境是否可以使用。比如:
网络是否ping通
ip和端口配置是否正确
jdk版本是否符合标准
有可能是由于jdk版本不兼容导致系统运行异常,这种问题根据实际情况来决定要不要兼容。
网络设了代理
弱网(如js/css未加载完全、请求超时)
浏览器不支持
系统版本不支持
数据库被删除
测试环境脏数据
项目配置开关
测试环境切了分支等
检查完成后,可以转到第二步
2、用户展示层
用户在使用过程中,通过查看等操作发现的一些问题:
页面样式(css样式问题)
交互过程中js的提示(js交互问题)
终端控制的提示信息
文本的展示(html文本问题)
3、逻辑控制层
用户操作过程中,业务的处理逻辑有没有按照前期的设计实施。或者中间环节出现异常,比如缓存服务器(如redis)、消息中间件(如rabbitMQ)、数据存取中间件等。
4、服务层
服务层往往检查服务器的配置,如可能是tomcat配置、nginx配置、jdbc配置等的问题。测试人员最好能够了解下它们的各项配置。
5、数据库层
可能出现测试环境和正式环境数据库版本不同,前后端数据格式、长度限制不同。用户操作完成后,交易流程非常顺畅,这样也不代表整个交易没有问题,还需要测试人员检查数据库登记的表和字段是否正确
如果发现登记的字段与预期的结果不一致,则可以查看日志,检查请求报文送的字段是否正确,是否与前台填写的一致
有的一个操作会登记多张表,所以要检查多张表登记或者更新的是否正确,测试人员也需要对被测系统的数据表结构熟悉
6、经验法则
有经验的测试人员对于有部分bug已经见过多次,能够很快找到根源,直奔主题,迅速报告或者解决bug
7、其他
常见的bug可能还有构建方面的原因
比如代码本身没错,但是合并代码到主干后出现了问题
比如代码存在冲突时手动解决的情况
03 定位问题的方法
1、常用的定位策略:
常用的定位策略分为三类:原始类(brute force)、回溯类(backtracking)、排除类(causeeliminations)
原始类定位方法
原始类定位方法是最常用也是最低效的方法,只有在万般无奈的情况下才使用它,主要思想是“通过计算机找错”。
回溯法
回溯法能成功地用于程序的排错
方法是从出现bug征兆处开始,人工地沿控制流程往回追踪,直至发现出错的根源,不幸的是程序变大后,可能的回溯路线显著增加,以致人工进行完全回溯到望而不可及。
排除法
基于归纳和演绎原理,采用“分治”的概念。
首先确定所有与bug出现有关的所有数据,设想一个导致bug的原因,用这些数据证明或反驳它。或者一次列出所有可能的原因,通过测试一一排除。只要某次测试结果说明某种假设已呈现倪端,则立即精化数据,乘胜追击
2、查看状态码
4xx状态码:一般表示是客户端问题(当然也有可能是服务器端配置问题),比如:
发生了401,那么要看下是否带了正确的身份验证信息
发生了403则要看下是否有权限访问
404则要看下对应的URL是否真实存在
5xx状态码:一般表示服务端出现问题。比如:
发生了500错误,则表明是服务器内部错误,这个时候要配合服务器log进行定位
发生了502错误则可能是服务器挂了导致的问题
发生503错误可能是由于网络过载导致的问题
发生504错误则可能是程序执行时间过长导致超时
3、查看服务器日志
如果发生5xx问题,或者需要检查后端接口执行的sql是否正确,我们最常见的排查方法就是去看服务器日志,比如tomcat日志。开发人员一般会打出关键信息和报错信息,从而找到问题所在,所以,测试人员也要养成看日志的习惯。
4、检查配置
很多时候,bug不是代码的问题,而是tomcat配置、nginx配置、jdbc配置等的问题。在这个层面上,测试人员最好能够了解下它们的各项配置,在发现问题后可能就会想到这方面的问题。
5、查看需求文档
有时候,前端和服务端的交互都正确,但是从测试的角度看不合理。这个时候,我们应该翻翻需求文档。如果和需求文档不符,那么就要看下改什么比较合理,是改前端,还是改服务端,或者两者都要改。
这里有一个原则,就是前端尽可能少地去承担逻辑,只负责渲染展现。当然,不要以为需求文档就全部正确,它也可能会有错误,我们也应该去发现需求文档的bug,然后再去协调PM,敦促FE或者RD进行修改。
6、向开发寻求可测性支持
有时候,涉及到开发过程的一些测试,也需要开发提供可测性支持。
比如,要查看接口给另一个接口发的请求是否正确,可以让开发打印出完整的请求log,还有一些逻辑开关、修改页面数据条数等,都属于可测性支持的范畴。
04 bug定位常用工具
Firefox——firebug、web developer、live http - headers、http fox
IE插件——httpwatch
第三方工具——fiddler
慢速网模拟工具——firefox throttle
05 如何区分前端/后端bug
为什么要区分前端/后端BUG?
如果是一个多人开发的系统,不能明确定位到这个bug是谁造成的,容易提交给错误的开发人员。
同时提交给前后端开发人员,每个人都会有依赖心理,bug会像皮球一样被开发踢来踢去,耽误开发解决bug的时间。
另外,如果团队规模较大,或者由各地的项目组拼凑而成,势必会增加沟通成本,这更需要我们在类似禅道或者Jira等项目管理软件中提交bug时,先指明是谁的bug,避免互相踢皮球的现象。
所以测试必须要自己学会区分出是前端还是后端bug,经过bug分类处理,整个团队的效率都会有所提高。
前后端BUG各有什么样的特点?
1、利用抓包工具来进行分析
一般有httpwatch,firebug,fiddler,charles等抓包(数据包)工具。
httpwatch,firebug都是浏览器的插件,需要额外下载
fiddler,charles也需要额外下载安装包另行安装
还有一个简单实用的抓包工具,那就是浏览器的F12调试器
2、定位前端的bug
前端的bug通常是功能、界面和兼容性等有关,涉及到jstl,jsp,js,css,html方面比较多。bug主要有两块:
JS相关
页面
3、定位后端的bug
后台涉及到servlet,jms,ejb,还有很多框架struts,hibernate,spring,ibatis等
bug 比较难改,但是好找,主要就是看控制台报错,然后定位错误行号。如果配置文件没有问题,那么一般的报错就是空指针,或者是数组下标越界。看附近变量,看方法的参数基本上都可以定位错误。
06 定位完问题后
在发现问题或者定位到问题原因后,一定要进行一步,就是再次确认问题。所谓确认问题,就是弄清楚问题是否每次都发生,还是概率事件,或者是工具相关的问题:
比如换个浏览器是否依然出现?如果换个浏览器不出现的话,很可能就是前端的兼容性问题。
比如翻页控件,待测的系统有很多页面都有翻页控件,那么就要看下是否每个页面都会出现这个问题,进而报bug时进行统一说明,也更加方便开发人员批量处理,防止漏改。
最后如果对测试基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等感兴趣的 点我点我点我
遇到bug的解决办法,测试再也不背锅了相关推荐
- ie6 7 8下的一些bug和解决办法
1:li边距"无故"增加 任何事情都是有原因的,li边距也不例外. 先描述一下具体状况:有些时候li边距会突然增 加很多,值也不固定(只在IE6/IE7有这种现象),让人摸不着头脑 ...
- Dumpzilla工具第615行bug的解决办法
Dumpzilla工具第615行bug的解决办法 在Dumpzilla使用选项frequency时,会提示SQL语法错误.这是由于其中SQL语句编写错误.需要将615行中: where url lik ...
- css文本省略(······)行高错位(bug)- 解决办法
应用css文本省略(······)属性:-webkit-line-clamp: 3; 导致:行高错位.(F12查看发现css属性line-height的值并没变,但为什么浏览器显示文本的实际行距却变小 ...
- 测试员就是“背锅侠”?学会这些,扔掉测试人常背的3口“锅”
最近发生了一起生产事故,究其根源,事故本身属于架构或者需求层面需要规避的问题,测试人员的责任其实是非常小的,但实际情况是:相关测试人员因此承担了很大的压力,成为质量问题的"背锅侠" ...
- 齐博php百度编辑器上传图片_齐博CMS整合百度编辑器上传附件的BUG以及解决办法...
齐博CMS作为目前PHP类CMS中最草根的CMS,能够及时的为站长们着想,将开源的百度编辑器整合进程序,这是值得广大站长欢呼雀跃的事情.但就目前来说,齐博CMS与百度编辑器的整合还是存在一些细小的问题 ...
- JS浮点数运算Bug的解决办法(转自百度文库)
37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只 ...
- 浏览器常见bug及解决办法
常见的bug列表: IE6下,当块级元素 margin与float同方向时,margin会加倍 例如 .box{float:left;margin-left:10px;}在IE6下表现的marg ...
- IE6 遇到bug及解决办法
一.IE6 双倍边距 bug 当页面上的元素使用 float 浮动时,不管是向左还是向右浮动;只要该元素带有 margin 像素都会使该值乘以 2,例如"margin-left:10px&q ...
- eCos系统的lwIP驱动及lpc2xxx网卡驱动bug的解决办法
eCos系统的lwIP驱动存在一个bug,该bug导致用于数据发送同步的信号量计数值不断增长,当超出32位整数所能表示的最大值时将会从0xffffffff回滚到0,这时可能会导致lwIP协议栈核心线程 ...
最新文章
- 模拟实现请求分页虚存页面替换算法_模拟卷二解答
- 使用Java反射更改私有静态最终字段
- Kprobe在Linux kernel debug中的应用
- 是什么动词_【术语攻略】什么是及物动词?
- 【项目管理】认识沟通管理
- 修身论文2000字_软考论文怎么写
- Java动物类enjoy方法打印_Java反射学习-2 - 获取Class对象的三种方式
- 用css实现三角效果
- 有线电视pcr是什么意思_有线电视的完整形式是什么?
- LeetCode 198. 打家劫舍(动态规划)
- jQuery实现锚点滑动定位
- ARouter解析笔记
- 5个常用的大数据可视化分析工具
- 峰值信噪比(PSNR)和均方根误差(MSE)
- SAP-MM MRP类型详解
- Jmeter接口测试及接口性能测试
- 学计算机如何防辐射,如何防辐射?学这五招_39健康网
- VS2010中水晶报表插件下载安装方法 详细出处参考:http://www.jb51.net/softjc/88860.html
- Bootstrap3基础 btn-primary/warning... 三类按钮的六种样式
- vscode json文件编辑工具
热门文章
- win7网络适配器_WIN7笔记本搜不到WiFi怎么办?
- 网页设计简历中个人作品html,网页设计师简历自我评价填写样本
- Linux是如何避免内存碎片的
- 【分布式系统】唯一ID生成策略总结
- nyoj 83-迷宫寻宝(二) (计算几何, 叉积)
- Rational Rose 2007简单介绍及详细安装步骤
- 搭建直播源码与软件开发的注意事项 1
- C语言将CSR存储模式转为coo,将大型稀疏矩阵转换为COO时出错(Error converting large sparse matrix to COO)...
- 微服务项目之电商--15.后台分页查询及新增品牌业务添加
- C2977 “boost::type_of::encode_type”: 模板 参数太多