为什么定位问题如此重要?
01、定位原因之前
遇到问题时,先别急着去定位原因。
1、保存bug产生的记录:
首要做的是保存bug产生的记录,保证可以复现。
为什么要保存记录?因为如果以后不能复现,那就不能证明bug的存在。
2、排除低级问题:
然后是排除QA的低级问题,常见的低级问题:
3、排除数据问题(脏数据):
有时候会遇到服务端报500错误,查看日志后,报空指针,那么很有可能就是数据库中关联表的数据被人为删掉导致的。
02、定位问题的思路
排查顺序:
用户环境层面 -> 展示层面 -> 逻辑控制层面 -> 服务层面 -> 数据库层面
1、用户环境层面
主要是指基础环境是否可以使用。比如:
检查完成后,可以转到第二步
2、用户展示层
用户在使用过程中,通过查看等操作发现的一些问题:
3、逻辑控制层
用户操作过程中,业务的处理逻辑有没有按照前期的设计实施。或者中间环节出现异常,比如缓存服务器(如redis)、消息中间件(如rabbitMQ)、数据存取中间件等。
4、服务层
服务层往往检查服务器的配置,如可能是tomcat配置、nginx配置、jdbc配置等的问题。测试人员最好能够了解下它们的各项配置。
5、数据库层
可能出现测试环境和正式环境数据库版本不同,前后端数据格式、长度限制不同。用户操作完成后,交易流程非常顺畅,这样也不代表整个交易没有问题,还需要测试人员检查数据库登记的表和字段是否正确
6、经验法则
有经验的测试人员对于有部分bug已经见过多次,能够很快找到根源,直奔主题,迅速报告或者解决bug
7、其他
常见的bug可能还有构建方面的原因
03、定位问题的方法
1、常用的定位策略:
常用的定位策略分为三类:原始类(brute force)、回溯类(backtracking)、排除类(causeeliminations)
原始类定位方法是最常用也是最低效的方法,只有在万般无奈的情况下才使用它,主要思想是“通过计算机找错”。
回溯法能成功地用于程序的排错
方法是从出现bug征兆处开始,人工地沿控制流程往回追踪,直至发现出错的根源,不幸的是程序变大后,可能的回溯路线显著增加,以致人工进行完全回溯到望而不可及。
基于归纳和演绎原理,采用“分治”的概念。
首先确定所有与bug出现有关的所有数据,设想一个导致bug的原因,用这些数据证明或反驳它。或者一次列出所有可能的原因,通过测试一一排除。只要某次测试结果说明某种假设已呈现倪端,则立即精化数据,乘胜追击
2、查看状态码
4xx状态码:一般表示是客户端问题(当然也有可能是服务器端配置问题),比如:
5xx状态码:一般表示服务端出现问题。比如:
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各有什么样的特点?
1、利用抓包工具来进行分析
一般有httpwatch,firebug,fiddler,charles等抓包(数据包)工具。
2、定位前端的bug
前端的bug通常是功能、界面和兼容性等有关,涉及到jstl,jsp,js,css,html方面比较多。bug主要有两块:
3、定位后端的bug
后台涉及到servlet,jms,ejb,还有很多框架struts,hibernate,spring,ibatis等
bug 比较难改,但是好找,主要就是看控制台报错,然后定位错误行号。如果配置文件没有问题,那么一般的报错就是空指针,或者是数组下标越界。看附近变量,看方法的参数基本上都可以定位错误。
06、定位完问题后
在发现问题或者定位到问题原因后,一定要进行一步,就是再次确认问题。所谓确认问题,就是弄清楚问题是否每次都发生,还是概率事件,或者是工具相关的问题:
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!