软件测试技术分享 | Bug定位方法
软件测试技术分享 | Bug定位方法
在软件开发过程中,Bug定位是一项关键技能。本文将详细介绍Bug的分类、定位方法以及在不同场景下的具体分析技巧,帮助软件测试工程师和技术人员更高效地进行Bug定位和修复。
通常情况下,Bug可以分为四个类型:功能、性能、安全和专项质量。功能级别关注业务流程是否正确;性能级别关注业务流程是否顺畅;安全方面判断是否存在漏洞,是否符合安全标准与规范;专项质量通常关注用户体验UX、兼容性、稳定性和可靠性。
为什么需要掌握bug定位
软件测试人员的首要任务就是发现Bug,发现之后提交Bug给开发人员进行修复。掌握Bug定位可以在提交Bug时追加更多有用信息,方便研发更快解决问题。通过分析Bug的形成原因,更有效率地进行溯源并建立特征进行批量追踪。
bug表现层
- 条件:测试数据;
- 过程:测试步骤;
- 结果:测试结果。
技术架构层次
软件从技术架构层次分析一般分为三层,即视图层View、控制层Controller和模型层Model。而Web和App在具体的层次关注的技术方向也是不同的,具体如下:
- 视图层View:
- Web:UI HTML CSS;
- App:activity view;
- 控制层Controller
- Web:chrome、devtool;
- App:dalvik art objectc-runtime;
- 模型层Model:
- 模型的传递方式:http tcp rpc 串口;
- 模型的形式:json xml binary;
- 模型定义:schema。
MVC三层分析法
Bug的定位往往也会依照软件技术架构层次采用MVC三层分析方法,分析View层、Controller层和Model层的运行平台、应用调试机制和链路。
- View层常见的问题是UI(User Interface)用户界面和UE(User Experience)用户体验。目前常采用人工测试和自动化测试,通过人工校验为主自动化校验为辅的方式检验界面交互的准确性以及用户体验感受。此外利用UI的Diff对比分析界面变化,定位更深层次的问题。
- Controller层通过平台自主提供的日志(log)以及应用程序本身提供的应用调试日志(debug trace hook profile)分析代码层次的逻辑问题。
- Model层根据运行平台的log、app调试机制以及链路来具体分析问题。
Web bug分析方法
界面展示主要依赖于html、css、js,可以使用chrome开发者工具的elements和style两个板块来分析,elenments可以展示具体控件,控件格式通过style来确定,由此来判断是否是样式、布局或输出方面的问题。
界面展示是javascript根据操作流程对代码进行修改的结果,底层逻辑的错误在console板块会展示出详细的出错信息。而source模块可以对错误进行定位通过debug分析问题的上下文,找到代码问题的根源所在。
基于运行平台的log,例如chrome的network模块分析请求方式和数据的具体情况。链路分析使用代理工具proxy,常用的有fiddler、charles和mitmproxy以及网络层的嗅探,常用的有tcpdump和wireshark。
App bug分析方法
App的UI界面交互和UX/UE用户体验目前常用的是人工校验的方式,以自动化作为辅助工具以及UI Diff的方式分析,尝试发现界面中存在的问题,其中人工测试能够发现未知特征的bug,自动化测试可以断言常用功能是否正常,通过UI Diff可以发现界面结构细节的问题。
通过logcat分析app runtime日志。
根据平台本身提供的log或者运行平台的调试工具,利用应用的日志分析以及建立追踪模式分析链路的问题,通过代理抓包charles、fiddler、mitmproxy或者嗅探抓包,wireshark、tcpdump的方式分析链路。
安卓提供的工具,对app交互发生的网络请求进行中间过程的分析。
当工具本身不可调试时,可以使用代理工具分析。通过tcpdump抓包,导入wireshark进行分析。
性能bug分析方法
H5的性能问题通常对网页加载的过程进行分析,通过w3c定义的performance api对每个阶段发生的问题进行统计,需要各个浏览器支持对性能方面的分析。
分析应用运行时代码的具体时间。
总结
定位Bug首先要明确Bug问题的现象和复现步骤,通过分层分析关键过程的数据与问题特征,积累Bug特征与问题根源特征,丰富测试经验,提高Bug发现的能力。