测试定位BUG方法

测试为什么要学习如何定位问题?
1.减少沟通成本
2.辅助开发,更快速地解决问题
2.通过定位问题来获取测试经验

如何定位一个BUG?以下是我的思路。
首先得明白BUG的分类:

功能:业务流程是否正确
性能:业务流程是否通畅
兼容:是否存在版本兼容问题
易用:交互设计、用户体验
安全:是否符合安全标准与规范
专项:稳定性、可靠性

我们依据什么来进行定位?

1.输入的数据
2.测试的步骤
3.响应的结果

还有一种情况,如果测试的系统有第三方依赖,可能由于我们业务流程的不同而导致使用了不同的第三方依赖。这种情况我们还得去梳理一下这个外部服务的流程。

是怎么去定位的?

我们一般从三个层次进行定位:

视图层:
对视图的错误进行分析

web:UI CSS html
app:activity view

控制器层:
控制器层主要是通过报错信息进行分析

web:chrome-devtool(开发者工具)
app: dalvik(模拟机) art(一个安卓运行环境,作用类似虚拟机)objectc-runtime(一种可以在app运行时编程的语言,这里指的是runtime日志)

模型层:
模型层主要是对传输的数据进行分析

模型的传递方式 http tcp rpc(可以远程调用函数的协议) 串口(物理数据线接口)

模型的形式 json xml binary

模型定义 schema(数据呈现形式,比如数据库的表设计、json的具体格式)

分析方法

web端

视图层:

UI 手工或者自动化
UE 手工或者自动化
UI DIFF分析 也就是和之前的版本进行对比

控制器层:

运行平台日志:log
应用调试日志:debug trace hook profile

模型层:
运行平台的log
app调试机制
链路分析:代理抓包 嗅探抓包


现在大概需要的知识内容已经说明,现在尝试进行一个实战分析:
视图层:
web前端如果展示不对那就是UI的问题,前端依赖于html、css、js,那我们就得使用开发者工具查看定位element(元素)和style(样式),是html的硬编码、还是js的打印内容的输出错误


假如发现视图层没有问题,我们进入控制层:
视图层可以发现js的输出和报错

可以点击错误旁边的按钮跳转到源代码

Socurces模块可以对js进行debug

模型层:
主要是看 开发者工具的network

或者使用其他的抓包工具 fiddlr charles 查看数据包的来往

App端:

视图层:通过肉眼进行观察是否属于UI\UE 的错误、通过diff 与之前版本的内容进行对比。
然后进入控制层:
app一般是通过logcat 或者终端打印日志来分析app runtime 日志,logcat可以实时分析、记录你的报错、崩溃等异常情况。

模型层:

可以通过对运行平台提供的管理工具以及log进行分析
可以通过链路分析:

代理抓包:carles fiddler mitmproxy
嗅探抓包: wireshark tcp dump