软件测试之BUG分析定位概述(QA如何分析定位BUG)【转自 https://blog.csdn.net/kaka1121/article/details/51538979】
你是否遇到这样的场景?
QA发现问题后找到DEV说:
不好了,你的程序出问题了!
DEV(追查半小时之后):
唉,是你们测试环境配置的问题
唉,是你们数据不一致
唉,是你们**程序版本不对
唉,是**产品线的问题
当时的日志呢?
当时cpu有异常么?
可以复现么?
这里就应该是这样啊!
你是否期待这样的场景?
QA发现问题后,经分析判断,胸有成竹的找到DEV说:
你的程序出bug了,初步断定是XX类的XX判断分支有问题,应该把某某的判断一改就好了!——==定位精准==
你的程序出bug了,过去某某产品线就曾经出现过类似的问题,都是某某函数用错了,导致前端某某输入的情况下,会导致某某异常,你检查一下吧!——==经验丰富==
你的程序出bug了,应该是某某的问题。页面截屏、日志、系统资源情况、复现步骤我都记录在bug系统了,请尽快修复——==有理有据==
RD说:
赞,和你合作很愉快!
QA做BUG定位的意义是什么?
明确一个“问题”是不是真的是“BUG”
——问题:与预期不符,表象
——BUG:代码错误,实质
避免来回扯皮,提高测试修复效率
——误报降低、原因明确
有助于理解产品内部逻辑流程
——知其然,也知其所以然
提升DEV对QA的信任度
——靠谱!
QA做BUG定位的几个误区:
心态误区:不明觉厉,与己无关
—— BUG定位没那么高大上,三板斧会用就行
手段误区:定位必须看代码
——大部分定位还用不上代码能力
目标误区:所有问题都该被当做BUG定位
——问题不一定是BUG,即便是也得考虑性价比
分工误区:DEV不需要帮助QA的bug定位
——大家目标是一致的,DEV需提供可测性支持
QA定位BUG的大体流程:
BUG定位经验建议:
碰到问题,别忙定位,首先请:
——保存犯罪现场(截图)
——确认能复现
先排除QA低级问题,避免被鄙视:
——被测程序版本/配置项/网络环境,是否ok?
——是不是自己理解错误,本来就该如此
手段多样化,别钻牛角尖,注意性价比:
——多观察日志,多熟悉工具,搞不定就放
建设自己的BUG历史知识库:
——有助于温故而知新
小版本的新BUG,可通过代码diff定位:
——代码DIFF的部分是罪魁祸首,很快
要求DEV提高可测性
——合理的debug日志、中间结果dump
——方便可控的逻辑开关
BUG定位手段:
普通青年
——日志、返回码、异常值
文艺青年
——各种非侵入式观察工具
NB青年
——代码走查、JPDA远程调试
WEB项目BUG定位
明确是浏览器端问题还是服务端问题
—— 用Fiddler/Firebug看HTTP内容是否正确
—— 到这一步,其实就可以算阶段性结论了!
浏览器端问题:
—— 用Firebug做进一步定位
服务端问题:
—— 通过观察日志和接口内容缩小怀疑范围
—— 高级手段:JPDA远程调试
一般系统的定位调试
浏览器端常见问题
是否是浏览器设置问题?
是否是浏览器兼容性问题?
用其他数据是否可以复现?
是否是cookie相关的问题?
是否正确发出了请求?
是否得到了正确的应答?
是否是网络硬件原因?
是否是JS跨域问题?
是否是前后台接口不一致问题?
是否是字符编码带来的问题?
使用Firebug 和 Fiddler
Firebug教程视频:
http://www.56.com/u13/v_NjQzMjcwMzQ.html
Fiddler教程:
http://wenku.baidu.com/view/32b6052f6c85ec3a87c2c5af.html
后台服务定位手段
输入条件构造
网络通信包(驱动、桩、真实的上下游模块)
数据文件
配置文件(包括词表,黑白名单等)
共享内存
输出检查
网络通信包
数据文件
日志(尤其是异常日志)
监控:
系统监控:cpu、句柄、IO、内存
模块级监控:内存结构体信息
调试DEBUG
JPDA打断点
后台服务常见问题
自顶向下排查(从系统入口模块开始)
是内部逻辑问题还是下游数据问题?
是否是某些配置下发生的问题?
日志中是否发现线索?
系统资源情况中是否发现线索?
是否是边界值、并发等问题?下游模块是否交互正常?
是否是多线程下的问题?
是否是大压力下的问题?
是否是不同模块间接口的定义不一致?
是否和服务器软件版本及设置有关?
自底向上排查(从系统末端模块开始)
最底层的模块是否正常收到了请求?
是内部逻辑问题还是上游请求问题
NB青年必备:JPDA
参见:http://blog.csdn.net/kaka1121/article/details/51008195
相关博客:
http://blog.csdn.net/nancybaocool/article/details/38960945
相关文档:
http://wenku.baidu.com/link?url=Fd_n31TBT5JqggblSpohGOP9-BAuq-QkctQu3O6x0jjDfnXwE4lj1usH0CBznax0GqDXYTPfsfembvil5JpExWb08xzJI8yNZoZuKkNSn9C
软件测试之BUG分析定位概述(QA如何分析定位BUG)【转自 https://blog.csdn.net/kaka1121/article/details/51538979】的更多相关文章
- crontab 问题分析 - CSDN博客 https://blog.csdn.net/tengdazhang770960436/article/details/50997297
cd /mnt/tools/trunk/plugins/personas; python update_keywords.py crontab 问题分析 crontab 问题分析 - CSDN博客 ...
- 记一次压测问题定位:connection reset by peer,TCP三次握手后服务端发送RST_网络_c359719435的专栏-CSDN博客 https://blog.csdn.net/c359719435/article/details/80300433
记一次压测问题定位:connection reset by peer,TCP三次握手后服务端发送RST_网络_c359719435的专栏-CSDN博客 https://blog.csdn.net/c3 ...
- 软件需求规格说明书(转自http://blog.csdn.net/li_canhui/article/details/6927540)
转自http://blog.csdn.net/li_canhui/article/details/6927540 1概述 1.1编写目的 指出编写<需求规格说明书>的目的.下面是示例: 编 ...
- RTP协议分析(转自:http://blog.csdn.net/bripengandre/article/details/2238818)
RTP协议分析 第1章. RTP概述 1.1. RTP是什么 RTP全名是Real-time Transport Protocol(实时传输协议).它是IETF提出的一个标准,对应的RFC文 ...
- 各大型网站架构分析收集-原网址http://blog.csdn.net/lovingprince/article/details/3379710
1. PlentyOfFish 网站架构学习http://www.dbanotes.net/arch/plentyoffish_arch.html 采取 Windows 技术路线的 Web 2.0 站 ...
- linux下各种格式软件的安装(引用http://blog.csdn.net/zyz511919766/article/details/7574040)
首先介绍两个简单的方式 第一:sudo apt-get install packagename 命令 如果我们知道我们要安装的软件的确切的名称,那么我们可以简单的通过此条命令来获取和安装软件.apt- ...
- Cocos2d-x3.3RC0 Cpp-test分析之NewAudioEngineDemo(转:http://blog.csdn.net/yuxikuo_1/article/details/41081453)
#ifndef __NewAudioEngineDemo__NewAudioEngineDemo__#define __NewAudioEngineDemo__NewAudioEngineDemo__ ...
- 软件测试之BUG分析定位概述(QA如何分析定位BUG)
你是否遇到这样的场景? QA发现问题后找到DEV说: 不好了,你的程序出问题了! DEV(追查半小时之后): 唉,是你们测试环境配置的问题 唉,是你们数据不一致 唉,是你们**程序版本不对 唉,是** ...
- x264源代码学习1:概述与架构分析
函数背景色 函数在图中以方框的形式表现出来.不同的背景色标志了该函数不同的作用: 白色背景的函数:不加区分的普通内部函数. 浅红背景的函数:libx264类库的接口函数(API). 粉红色背景函数:滤 ...
随机推荐
- js获取上传图片的尺寸大小
当上传图片时,有时候需要控制下上传图片的尺寸大小,需要给个提示 //获取图片的尺寸,控制尺寸大小 var reader = new FileReader(), img = new Image(); / ...
- ES6里的解构赋值
我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段.在ES6中添加了可以简化这种任务的新特性:解构.解构是一种打破数据结构,将其拆分为更小部分的过程. 一.引入背景 在ES5中,开发者们为 ...
- Nginx反向代理、负载均衡及日志
Nginx反向代理.负载均衡及日志 1.原理图 2.正向代理与反向代理 (1)代理服务器 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后 ...
- Elasticsearch教程(五) elasticsearch Mapping的创建
一.Mapping介绍 在Elasticsearch中,Mapping是什么? mapping在Elasticsearch中的作用就是约束. 1.数据类型声明 它类似于静态语言中的数据类型声明,比如声 ...
- Java基础学习过程
转载:http://blog.csdn.net/scythe666/article/details/51699954JVM 1. 内存模型( 内存分为几部分? 堆溢出.栈溢出原因及实例?线上如何排查? ...
- Angular 学习笔记——拖拽
<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...
- Laravel服务/服务提供者/容器/契约和门面
1.服务是什么? 服务是提供了一些功能的类,比如发送邮件,写日志. 2.Laravel服务提供者是什么? 服务提供者中指明了这个提供者可以提供哪些服务(注册服务),以及服务注册后默认调用一些方法(bo ...
- 在PreferenceAcitity中使用Fragement时避免额外的Left和RightPadding
On Android 4.4 遇到过这种问题: 注意到.上面的ActionBar部分的左右各有48像素的padding. 要了解该问题的成因,要首先了解其结构: 该页面的Activity是一个Pref ...
- Https单向认证和双向认证介绍
一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明文的,因 ...
- ArcObject IFeature set_Shape()和Delete()报错
这样的问题主要是Ifeature实际在数据库里面不存在!可是通过IFeatureClass.getFeature()又可以得到! 详细操作流程: 首先是对要素进行删除,可是通过IFeatureClas ...