• 9
  • 11
分享

  身为测试工程师,总有一道绕不过去的坎就是定位bug,这其实是非常花费时间的。

  也许有很多人不以为然,觉得无非就是发现bug后提交bug管理系统,描述操作步骤,预期结果和实际结果哪里不一致,然后继续测试。并不是说这样做的不对,只是说这样做的不够好,看似节约了测试时间,实则对于项目的进度没有起到应有的推动作用。

  1、web前端

  Web前端就是通常说的网页。互联网公司的前端一般包含如下内容:JavaScript、ActionScript、CSS、HTML(..ML)、HTML5、Flash、交互式设计、视觉设计。

  web前端测试可能发现的问题——版面设计、交互设计、文字、性能、功能。

  bug定位通用思路:现象-->原因-->验证手段-->结论-->现象

1.png

  测试bug定位原因归类:

  测试环境相关

  · 是否安装了flash及flash的版本——可能导致部分页面显示出问题,目前常用的版本诶flash10

  · 是否开启了浏览器插件——插件可能导致浏览器行为的变化,除非测试要求,否则一律禁用插件

  · 是否开启了安全软件——可能会截包、弹窗拦截、防钓鱼等

  浏览器相关

  · 不同浏览器的支持标准——不同内核的浏览器对js及各种标准的支持不同,因此页面解析出来的效果可能不同。Firefox:gecko;Chrome:webkit;IE:trident;Safari:webkit。

  · 浏览器的设置——禁用js;禁用弹窗;禁用cookie等

  · 浏览器cache策略——js,css,图片等都有可能被cache住。ctrl+F5强制刷新请求

  · cookie——跨域,过期

  网络相关

  · 是否发出了正确的请求——请求url、参数变量。content数据

  · 是否得到了正确的应答——http的返回值:200-正确;302-对象已移动;304-对象未修改;404-没有找到页面。返回的数据体

  · 是否性能问题——异步请求的数量过多;网速过慢

  字符编码相关

  · 页面乱码——百度后端存储基本是使用的GBK编码,前端提交可能是UTF-8编码,后端对于非GBK编码一般采用实体存储。可能出现编码没有转换。转换的时候没有判断半个汉字(转掉了半个汉字导致雪崩)。

  · url错误——url路径中汉字编码使用的是utf-8编码,参数中使用系统默认编码,flash脚本中使用的都是uft-8编码。

  安全相关

  · Xss漏洞——输入一些特定字符页面出现错乱或有恶意代码被执行,RD未对特殊字符转义完整

  性能相关

  · 图片数量——页面中同一个域的图片的数量控制在16个以下,IE会控制同一个域下图片并行的下载数量

  · 页面抖动——异步请求的数量过多

  · 加载失败——限速情况下,超时

  bug定位常用工具

  · Firefox——firebug、web developer、live http headers、http fox

  · IE插件——httpwatch

  · 第三方工具——fiddler、charles

  · 慢速网模拟工具——firefox throttle、fiddler、charles

  2、web后端

  · 后端包含运行在服务器上的程序,脚本和服务。比如:各种各样的逻辑处理系统,数据存储系统等。

  · 后端可能发现的问题——逻辑的,数据的,策略的,接口的,性能的等

  测试bug定位原因归类:

  数据流相关

  · 上下游模块是否连接正常——模块的ip和端口的配置,白名单黑名单配置,session授权

  · 模块的数据发送接收是否正常——日志是否有滚动,是否显示发送了数据或接收到数据,数据是否完整,跨机房,负载均衡算法(从哪些机器获取到的数据)

  · 非socket的数据传输——共享内存(是否分配,key的配置等),cache(是否创建,脏数据等),数据库(配置,连接,表,触发器,存储过程),文件(大小,访问权限)

  · 模块之间的接口——协议的一致性(mcpack1,mcpack2等),字段的一致性(一个按signed解析,一个按unsigned解析),字段复用

  处理逻辑相关

  · 程序的各种配置——功能是否开启/关闭,词表是否加载,各种阈值的配置,超时配置

  · 程序日志——日志级别,交互的流程,处理的流程

  · 各种边界——数据边界(int,long),文件边界(空文件,分文件的边界),时间边界

  · 各种资源并使用——Cache是否遗留脏数据,并发和死锁

  系统和环境相关

  · 系统资源——Cpu,io,句柄,内存,网络状态,数据库状态,数据库连接数

  · 环境资源——程序版本,内核版本,网络(外网)访问权限,系统动态库不一致

  程序和代码相关(常用验证手段)

  · 确认问题出现的位置——日志中的代码行,gdb中的代码行,抛出异常显示的代码行

  · 获取当时的运行时信息——Gdb core文件,gdb attach到进程,查看堆栈,查看寄存器,设置breakpoint,watchpoint,查看内部数据

  · 获取程序和系统信息——Strace查看系统调用,系统状态获取(ps,top,/proc/pid/*,vmstat,netstat)

  · 更深入的手段——反汇编,查看寄存器,gdb高级应用

  后端测试bug定位

  日志查看命令

  · 查看压力——tail -f as.log | grep '^NOTICE' | awk '{print $3}' | uniq -c

  · 排除日志中的特定内容——grep -v 'pattern' as.log

  · 只输出感兴趣的内容——grep -o 'proctime:toal:\d+' as.log;grep -o 'proctime:toal:\d+' as.log | grep -o '\d+ ';grep -o 'proctime:toal:\d+' as.log | grep -o '\d+ ' | sort -n | uniq -c

  · 将wf日志归类——grep -o '\w+\.(cpp|h):\d+' as.log.wf | sort | uniq -c

  gdb常用命令

  · bt——查看堆栈信息

  · print——打印某变量值

  · break——设置断点

  · x/i——翻译当前指令为汇编

  · info thread——查看所有线程,星号*标记的是当前线程

  · thread num——切换到线程号为num的线程

  · set scheduler -locking on——锁定在线程:输入continue命令以后,当前线程继续执行,其它线程不执行

  · set scheduler-locking off——这是默认设置,输入continue命令以后,所有线程都继续执行

  3、性能测试

  · 旨在获取系统在特定一种或多种环境下,在不同的外部输入压力(包含极限)的条件下的系统各项指标的测试

  常用命令

  · 进程相关——ps,top,/proc/pid/*

  · 系统相关——vmstat,top,iostat,sar,df,lsof

  · 网络相关——netstat

  bug定位原因归类

  压力工具相关

  · 工具的功能和性能——能否达到预期压力,启动压力的机器性能,压力工具是否有异常连接关闭,压力工具如何处理异常,长连接短连接,并发的个数

  · 工具运行环境——压力机器的带宽,是否跨机房

  被测系统相关

  · 机器性能——系统所在机器性能,机器网络带宽,机器的内存,sd卡,硬盘

  · 系统本身——系统的下游模块的性能,系统的配置,系统的数据量,系统的特点状态(充cache,dump,merge),系统的部署,程序的bug

  环境相关

  · 操作系统相关—— 是否和线上一致,内核版本,刷脏页时间,有没有调用directIO

  · 查看系统状态——Ps,top,/proc/pid/*, vmstat,netstat

  正确的思路+丰富的业务知识+丰富的技术背景知识+较好的调试和开发能力= 强大的bug定位能力Bug定位的过程是能力提升的过程。



作者:Nancy刘宝儿   

来源:http://www.51testing.com/html/70/n-4476570.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   今天我们要探讨的话题源于一篇在社交媒体引起广泛争议的 “阿里P8员工征婚贴”。该贴通过一张截图流传开来,主角是一位背景不凡的阿里P8级员工,具体信息如下:  这位阿里P8级别的高级工程师,他的成长轨迹堪称励志典范,出生于安徽农村的他,凭借顽强的毅力和卓越的智慧,一步步跃过了生活的龙门,先是凭借优异的成绩考入了全国知名的211高校就读本科,紧接着又在学业上更进一步,成功取得了985名校的硕士学位。如今,他已经在首都北京安家落户,拥有了一份羡煞旁人的都市生活,居住在一套位于繁华地段北苑的宽敞三居室中,尽管这套120平米的房产仍有200万元的贷款余额,但这丝毫没有影响到他对于生活的追求与期待。他...
            0 0 31
            分享
          •   一、准备工作  (一)AI介绍  AI即人工智能,这项技术希望产出一种以人类智能相似的方式做出反应的智能机器。  ChatGPT是OpenAI研发的一款聊天机器人程序。ChatGPT是人工智能技术驱动的自然语言处理工具。  使用AI编写测试用例,其实是将我们提供的需求或测试点通过聊天机器人程序,对自然语言进行处理,重新组合为测试用例。  (二)该选择哪个AI  ChatGPT  自从ChatGPT大热之后,大部分国内途径可以获取到的AI(聊天机器人)都为GPT-3.5版本。  GPT-4.0版本因为要付费等等原因,使用门槛会相对更高。  GPT-3.5版本当然比不上GPT-4.0版本,但如...
            0 0 2236
            分享
          •   产品出了问题,谁都不想担这个责任,那么锅由谁来背呢?  背锅侠No1:测试人员  在以往的工作中发现,只要线上有bug,或者有哪个功能没测到,都被认为就是测试的问题。之前做过一个项目,在项目验收阶段,客户对下单的流程提出了一些优化性的建议,但是在开发人员开发完这个需求之后,并没有通知我进行测试,就导致在下一次给客户演示的时候,下单流程根本不通,让客户非常失望。  就这样甩锅之路又开始了,开发说是功能已经做好了,但是是测试没有测出问题来,测试又说并没有被通知到这个已经改好了需要测试,那么到底是谁的问题呢?其实严格说起来开发和测试都有责任的。  1、开发人员在功能完成之后应该及时的通知到测试人...
            0 0 1209
            分享
          • 最近的项目中,将很多原本的纸质合同转移到线上,变成电子合同,包括电子合同的制作,审核,电子合同的生成,电子合同的签署等环节,也容易出现一部分问题,一下列举碰到问题的排查方向:APP端生成电子合同,提示:系统异常,请和管理员联系:合同创建失败,请先联系客服大概率原因:公司名称变更了,在资源中心的elec_contract_user表中,存放了开户信息,查看标品中的公司名称和开户信息中的公司名称,是否一致。雇主端签署电子合同,提示:请先开户原因:在生成电子合同后,修改合同中的客户名字,查看合同中的客户名字和elec_contract_user表中的开发信息是否一致电子合同中存在未替换的替换符原因一...
            1 0 5115
            分享
          •   一、QC岗位  1:QC现状分析:  在测试领域市场上有QA和QC之分,QC主要职责负责测试,包括功能、性能、自动化、安全等,QA主要负责项目管理的相关工作,有的公司岗位QA/QC放到一起,如果放到一个人身上,职责范围偏小一点,专门针对质量。  2:QC弊端  我们公司我是QC岗位,系统很多且大,工作接近10年,每个方向都会一点,但不专业。  如果横向发展我需要不断的学习新技术且工作有实践机会,以前我一直在这个方向努力,包括自动化的相关技能都是自学,为此付出了很多努力,但在二线城市一直没能转方向成功,自动化、性能、安全专业的测试工程师很少。  除非能进入到这3个专业领域,工资会高一点,再有...
            0 0 557
            分享
      • 51testing软件测试圈微信