如何定位一个BUG? 从View层到Control层再到Model层
测试定位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