为什么定位问题如此重要?
- 可以明确一个问题是不是真的“bug”。很多时候,我们找到了问题的原因,结果发现这根本不是bug。原因明确,误报就会降低。
- 多个系统交互,可以明确指出是哪个系统的缺陷,防止“踢皮球”,提高问题解决的效率。
- 增强开发对测试的信任度,沟通更有效,配合的更好,开发修改bug时效增强。
- 更有效的了解系统的内部逻辑、数据流处理流程,更能提高测试人员的水平,缺陷修复后,影响的测试范围评估更精准,复测更准确。
- 可以降低缺陷率。这个可以说是最重要的。在bug系统中,会要求开发人员记录bug产生的原因。只有我们自己对bug有一个较全面的认识,才会判别出开发写的是不是真正的原因,也才能有助于我们后续对bug进行分析归类,根据bug分析,有针对性地未雨绸缪,进而提升产品质量,降低缺陷。
遇到问题时,先别急着去定位原因。
首要做的是保存bug产生的记录,保证可以复现。
然后是排除QA的低级问题 。常见的低级问题:
有时候会遇到服务端报500错误,查看日志后,报空指针,那么很有可能就是数据库中关联表的数据被人为删掉导致的。
*判断是否为bug的标准:
- 功能是否符合需求说明书
- 从使用者的角度:功能是否易操作、易理解
- 系统压力指标是否达到质量要求
主要是指基础环境是否可以使用。比如:
检查完成后,可以转到第二步。
用户在使用过程中,通过查看等操作发现的一些问题:
比如字段长度控制为4位,输入5位时,无法输入,或者大于4位页面弹出提示不允许输入大于4位。
这种问题不通过与服务器的交互,由页面、终端直接控制。这种问题往往比较容易修改,检查后,进入到第三步。
用户操作过程中,业务的处理逻辑有没有按照前期的设计实施。或者中间环节出现异常,比如缓存服务器(如redis)、消息中间件(如rabbitMQ)、数据存取中间件等。
比如我们使用的贷记卡日累计额度为1万,当消费大于1万时,检查通过。
- 经过排查,后台参数配置的不对,或者通过查代码发现该逻辑没有判断。
再比如多系统交互时,我们发送一个请求后,终端返回超时。
- 这个时候需要查看日志定位具体哪个系统有问题,这种需要查看每个系统的日志请求及响应。
- 如果没有系统返回超时,并且每个系统都收到了正常的响应,那可能是终端超时时间设置的时间过小,未等到返回先超时导致。
该层的问题定位,一般都需要查看日志。该层检查完,转到下一层。
服务层往往检查服务器的配置,如可能是tomcat配置、nginx配置、jdbc配置等的问题。测试人员最好能够了解下它们的各项配置。
比如发现内存溢出问题。
- 那么可能是tomcat配置错误。
- 遇到过一个实际情况,应用系统为分布式部署,4路部署,当用户登录系统时,有的用户可以登录,有的无法登录,也不报错。经过逐层排查,发现有2路部署jdk版本不一致,原来用jdk1.6(2路),部署的为1.8(2路),是环境人员部署大意导致。
类似问题可能还有tomcat版本等、jar包版本测试环境和正式环境不同。
可能出现测试环境和正式环境数据库版本不同,前后端数据格式、长度限制不同。
用户操作完成后,交易流程非常顺畅,这样也不代表整个交易没有问题,还需要测试人员检查数据库登记的表和字段是否正确。
有经验的测试人员对于有部分bug已经见过多次,能够很快找到根源,直奔主题,迅速报告或者解决bug。
常见的bug可能还有构建方面的原因。
常用的定位策略分为三类:原始类(brute force)、回溯类(backtracking)、排除类(causeeliminations)。
原始类定位方法
原始类定位方法是最常用也是最低效的方法,只有在万般无奈的情况下才使用它。
- 主要思想是“通过计算机找错”。
- 例如输出存储器、寄存器的内容,在程序安排若干输出语句等。
- 凭借大量的现场信息,从中找到出错的线索,虽然最终也能成功,但难免要耗费大量的时间和精力。
回溯法
回溯法能成功地用于程序的排错。
- 方法是从出现bug征兆处开始,人工地沿控制流程往回追踪,直至发现出错的根源。
- 不幸的是程序变大后,可能的回溯路线显著增加,以致人工进行完全回溯到望而不可及。
排除法
基于归纳和演绎原理,采用“分治”的概念。
- 首先确定所有与bug出现有关的所有数据,设想一个导致bug的原因,用这些数据证明或反驳它。
- 或者一次列出所有可能的原因,通过测试一一排除。只要某次测试结果说明某种假设已呈现倪端,则立即精化数据,乘胜追击。
上述每一类方法均可利用一些测试工具,开发工具。
- 关于状态码的详细介绍可看本栏目的《【计算机网络】基础知识之从输入url到浏览器解析的过程》(https://blog.csdn.net/m0_37621024/article/details/116719803)。
- 以及可参考HTTP状态码大全:https://blog.csdn.net/lhjuejiang/article/details/79474199
如果发生5xx问题,或者需要检查后端接口执行的sql是否正确,我们最常见的排查方法就是去看服务器日志,比如tomcat日志。
很多时候,bug不是代码的问题,而是tomcat配置、nginx配置、jdbc配置等的问题。
有时候,前端和服务端的交互都正确,但是从测试的角度看不合理。这个时候,我们应该翻翻需求文档。
当然,不要以为需求文档就全部正确,它也可能会有错误,我们也应该去发现需求文档的bug,然后再去协调PM,敦促FE或者RD进行修改。
有时候,涉及到开发过程的一些测试,也需要开发提供可测性支持。
*为什么要区分前端/后端BUG?
- 如果是一个多人开发的系统,不能明确定位到这个bug是谁造成的,容易提交给错误的开发人员。
- 同时提交给前后端开发人员,每个人都会有依赖心理,bug会像皮球一样被开发踢来踢去,耽误开发解决bug的时间。
- 另外,如果团队规模较大,或者由各地的项目组拼凑而成,势必会增加沟通成本,这更需要我们在类似禅道或者Jira等项目管理软件中提交bug时,先指明是谁的bug,避免互相踢皮球的现象。
- 所以测试必须要自己学会区分出是前端还是后端bug,经过bug分类处理,整个团队的效率都会有所提高。
前端Bug | 后端Bug |
---|---|
界面相关 | 业务逻辑相关 |
布局相关 | 性能相关 |
兼容性相关 | 数据相关 |
交互相关 | 安全性相关 |
一般有httpwatch,firebug,fiddler,charles等抓包(数据包)工具。
- httpwatch,firebug都是浏览器的插件,需要额外下载。
- fiddler,charles也需要额外下载安装包另行安装。
还有一个简单实用并的抓包工具,那就是浏览器的F12调试器。
利用抓包工具,可以从三个方面进行分析:请求接口、传参、响应。
假设有这么一种情况,要测试一个翻页控件,翻到第二页的时候,发现内容和第一页完全一样,接口请求返回的是200。
- 这个时候就要看前端发送的参数正不正常,后端返回的内容正不正常,即接口的请求和返回。
以火狐为例,打开浏览器,再按F12就可以打开调试器:
在分析一个系统bug来自于前端还是后台时,最有用的两个是调试器提供的两个标签,这两个标签底下都记录了一些数据,一个是控制台,一个网络。
- 实际案例可参考:怎么知道bug是提给前端还是后端?https://www.zhihu.com/question/46433185/answer/667924745
前端的bug通常是功能、界面和兼容性等有关,涉及到jstl,jsp,js,css,html方面比较多。
bug主要有两块:
第一就是JS写的有问题,这个可以按F12 打开控制台,在console中查看报错信息,一般浏览器都会显示报错的js 。
第二个就是页面中的bug了,现在做web项目基本上没有做静态页面的,都是动态了,所以页面中要么使用了小脚本要么使用了EL表达式来存值。
后台涉及到servlet,jms,ejb,还有很多框架,struts,hibernate,spring,ibatis等。
命令行ssh/xshell工具登录到服务器,找到相应log日志所在的目录,实时查看日志
tail -f xx.log
或cat xx.log |grep '关键词'
,如找到报错信息可以去代码里面查是哪块报错。
<Connector port="8080" URIEncoding="UTF-8"/>
,特别是windows下的项目重新部署到linux系统下。了解所测功能的数据表结构,测试过程中,查看数据库的数据,确认数据的正确性。
响应中有数据,但是跟自己操作的结果不一致,可以根据数据库查询,如果数据库中也没有记录,可能是代码有问题,没有记录你的操作。
- 例如:注册了一个帐号,但是登录时提示帐号或密码错误,这就可以在数据库表中查看是否有注册的数据。
查看缓存(如Memcache、apc、redis等缓存)是否正确。
在发现问题或者定位到问题原因后,一定要进行一步,就是再次确认问题。
【部分内容参考自】
文章浏览阅读616次。HQL查询HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象_hqlun
文章浏览阅读43次。提纲:1、间接访问变量的指针运算符*2、野指针和空指针3、变量的指针表示:a、用指针引用普通变量b、用指针引用数组及其元素c、函数间传递指针:指针参数和返回值4、指针变量的引用和定义的区别5、存储指针的书写问题6、&*和*&7、变量用指针表示后 ,进行+ - * / 运算时,有必要加( )...
文章浏览阅读1.5k次,点赞2次,收藏7次。微信开源了其二维码的解码功能,并贡献给 OpenCV 社区。其开源的 wechat_qrcode 项目被收录到 OpenCV contrib 项目中。从 OpenCV 4.5.2 版本开始,就可以直接使用。以往java解析二维码都是使用google.zxing,但是zxing解析二维码的成功率比较低,很多美化或者个性化的二维码无法解析。以上依赖用于windows系统 如果要发布到liunx系统把windows-x86_64改成liunx-x86_64。_opencv java 二维码识别
文章浏览阅读1.2w次,点赞14次,收藏81次。初到公司发现电脑上面已经安装nodejs,但是版本是最新版本。但是问题来了,好像是不太支持vue3,所以查了一些资料,具体的也不是很清楚,反正就是nodejs的版本不能太高最好保持在16以下。好吧,那就重新卸载再来安装nodejs吧。_nodejs卸载
文章浏览阅读3k次,点赞2次,收藏11次。Chapter 38 Image Processing Unit (IPU)38.1 概述IPU计划成为应用程序处理器中的视频和图形子系统的一部分。IPU的目标是为从图像传感器和/或到显示设备的数据流提供全面支持。这项支助包括这些活动的所有方面:连接到相关设备-摄像机,显示器,图形加速器,电视编码器和解码器。相关图像处理与操作:传感器图像信号处理、显示处理、图像转换等。..._image processing unit
文章浏览阅读2k次。之前学习微信小程序开发,主要是基于JS、WXML、WXSS的前端开发,对于后端技术不精的我也是使用了微信开发者工具中的云开发功能,但是今天突发奇想,特别想体验一下全栈式开发微信小程序,学习了一下基于WAMP的新闻网小程序开发。文章目录一、前端(实现小程序界面)1.1 index页面1.2 my页面二、后端(搭建本地服务器)2.1 安装phpStudy工具连接数据库2.2 使用Navicat数据库工具连接数据库2.3 配置phpStudy搭建本地服务器2.4 进一步配置.php文件实现核心功能三、连接前._微信小程序能不能用wamp
文章浏览阅读471次。我们在搭建自己的微服务的时候,可以选择使用eureka作为我们微服务的注册中心,使用nacos作为微服务的配置中心,接下来我们可以看下具体的搭建过程:(以下过程只展示Spring Cloud + Nacos的搭建过程,至于集成eureka的可以另行查找具体对接流程)_to enable urls as dynamic configuration sources, define system property arch
文章浏览阅读231次。1770 数数字基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题 收藏 关注统计一下 aaa ⋯ aaan个a × b 的结果里面有多少个数字d,a,b,d均为一位数。样例解释:3333333333*3=9999999999,里面有10个9。_hiho1770 单调数
文章浏览阅读1k次,点赞2次,收藏13次。Kail Linux使用aircrack-ng破解WiFi前言: 闲着无事,就自己开了个热点打算自己破解以练习kali Linux 和 Linux 的使用 准备:将准备好的无驱无线网卡接入kali虚拟机1.查看无线网卡是否接入成功 命令: iwconfig2.启动无线网卡监听模式 命令:airmon-ng start wlan..._aircrack-ng握手包
文章浏览阅读4.7k次。Docker是一个基于go语言遵从apache2.0协议开源的LXC的高级容器引擎(底层技术是Linux Container,docker只是管理底层的工具),并通过namespace、cgroup等来提供容器的资源隔离与安全保障等。Docker 最早采用 LXC 技术 (LXC 是 Linux 原生支持的容器技术,是一种内核虚拟化技术,可以提供轻量级的虚拟化,LXC将Linux进程沙盒化,使进程之间相互隔离 ),可以说docker 就是基于 LXC 发展起来的。_73720353-63a5-41bf-b66e-78d8e49153b8
文章浏览阅读593次。【00】机器学习之旅启程 Machine Learning Roadmap【开始我的机器学习之路,感兴趣,就慢慢学,就在CSDN建立自己学习旅程】指南:Learning guideStreamlined guideinformation filterScope:Focus your scope on classification and regression t_机器学习 just in time learning
文章浏览阅读2k次,点赞3次,收藏11次。常见计算机病毒的分类: (一)按寄生方式分为引导型、病毒文件型病毒和复合型病毒 引导型病毒是指寄生在磁盘引导区或主引导区的计算机病毒。此种病毒利用系统引导时,不对主引导区的内容正确与否进行判别的缺点,在引导型系统的过程中侵入系统,驻留内存,监视系统运行,待机传染和破坏。按照引导型病毒在硬盘上的寄生位置又可细分为主引导记录病毒和分区引导记录病毒。主引导记录病毒感染硬盘的主引导区,如大麻病毒、2708病毒、火炬病毒等;分区引导记录病毒感染硬盘的活动分区引导记录,如小球病毒、G