【可实战】Bug的判定标准、分类、优先级、定位方法、提交Bug(包含常见面试题)

一、Bug相关概念

(一)bug判定标准

在这里插入图片描述

(二)常见 Bug 分类

在这里插入图片描述

(三)bug优先级

在这里插入图片描述

1.bug严重程度与优先级的关系

在这里插入图片描述

  • 有些很严重的Bug,只在极端的条件下才出现,用户碰到的概率很低,这种情况优先级就没那么高

  • 有些不是很严重的Bug, 比如界面类的,拼写错误,但如果是公司名称,产品名称拼写错了,虽然不是很严重,但优先级就很高,需要立即处理

二、Bug 定位方法

(一)为什么需要掌握 Bug 定位

  • 提交 Bug 时候追加更多有用信息,方便研发更快的解决问题
  • 分析 Bug 形成原因,进行溯源并建立特征进行批量追踪

(二)Bug从技术层次分析

1.Bug 展现层

条件:测试数据
过程:测试步骤
结果:测试结果
在这里插入图片描述

2.技术架构层次

视图层 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
在这里插入图片描述

3.MVC 三层分析方法

View 层:运行平台、应用调试机制、链路分析
Controller 层:运行平台、应用调试机制、链路分析
Model 层:运行平台、应用调试机制、链路分析

(1)View 层常用分析方法

UI【用户界面】 人工测试 自动化测试
UE【用户体验】 人工测试(主) 自动化测试(辅)
UI Diff 自动化分析

(2)Controller 层常用分析方法

运行平台日志:log
应用调试日志:debug trace hook profile

(3)Model 层常用分析方法

运行平台 log
app 调试机制
链路分析:代理抓包 嗅探抓包

(三)Web Bug分析方法

1.Web UI View 层 Bug 分析方法

主要依赖于 html css js
可以使用 chrome 开发者工具【F12】 elements 与 style
在这里插入图片描述
在这里插入图片描述

2.Web Controller 层分析方法

console 可以了解 js 的输出与报错信息
source 模块可以对 js 进行 debug
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.Web Model 层分析方法-分析数据传递方式与结构

运行平台 log

  • chrome network
    链路分析
  • 代理 proxy: fiddler charles mitmproxy
  • 网络层协议 network: tcpdump wireshark
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

(四)App Bug分析方法

1.App View 层 Bug 分析

UI 界面交互
UX/UE 用户体验
UI Diff:uiautomator dump
在这里插入图片描述
在这里插入图片描述

2.App Controller 层分析

通过 logcat 分析 app runtime 日志
在这里插入图片描述
在这里插入图片描述

3.App Model 层分析方法

运行平台 log
应用:应用日志
链路分析:

  • 代理抓包:charles fiddler mitmproxy
  • 嗅探抓包:wireshark tcpdump

4.Andorid Profiler 网络分析

在这里插入图片描述

5.使用代理工具分析

在这里插入图片描述

6.网络协议层分析

在这里插入图片描述
在这里插入图片描述

(五)性能Bug分析方法

1.H5 性能分析方法

在这里插入图片描述

2.利用 Chrome 分析 Web 性能

在这里插入图片描述

3.分析性能瓶颈 使用 Profile 进行代码剖析

在这里插入图片描述

4.代码覆盖率分析方法

在这里插入图片描述
在这里插入图片描述

(六)总结

  • 明确 Bug 问题的现象与复现步骤
  • 分层分析关键过程的数据与问题特征
  • 积累 Bug 特征与问题根源特征,丰富测试经验,提高 Bug发现的能力

三、提交Bug

在这里插入图片描述

四、经典面试题

(一)如果开发认为你提交的bug不是一个Bug,怎么办?

(考察对bug是否有判断,以及在工作中的软实力:处理问题解决问题的思路)

在什么情况下开发会认为你提交的bug不是一个bug呢?

1.测试人员对bug描述不清楚,比如复现步骤描述不清楚,或者bug概述没描述好,开发没看懂,所以就认为提交的bug不是一个Bug——解决办法是:提高测试人员编写bug报告的能力,复现步骤要清晰,无歧义。提交的bug有截图,录屏,或者日志信息

2.提交的bug并不是每次都出现,是偶现的。——解决思路是先提交bug(标成偶现),重要的截图,日志信息要保留下来,后续再关注这个问题,如果再次触发这个bug, 再提交更多的日志信息,帮助开发定位解决。

3.有争议性的Bug,比如建议类的(美观性的问题,易用性问题,与竞品比较觉得不太好的地方)——解决思路:可以先把自己建议类的bug提上去,然后跟产品,开发讨论,说出自己的理由,把自己的理由,建议说清楚。至于是否要改,就听上一级决定

4.功能性Bug, bug出现的原因可能是开发跟测试对需求的理解不一致。有可能是开发理解错需求了。——解决思路:把需求文档对应的说明给开发看。

(二)怎么判断一个bug到底是前端的bug还是后端的bug?

判断一个bug是前端还是后端的bug通常需要以下几个步骤:

1.复现bug的过程:首先需要详细记录或复现bug的具体步骤和条件,包括在何种情况下出现bug,具体的操作流程等。

重现现场:在处理bug时,重现bug是非常重要的。如果问题可以通过重新执行特定操作或复现特定场景而重现,那么可能是前台bug。如果问题出现在某个特定请求或特定数据条件下,那么很可能是后台bug。

2.查看错误信息:查看控制台输出、日志或错误信息,确定bug发生的具体位置以及错误提示内容,从而判断是前端代码出错还是后端代码出错。

错误日志:查看错误日志是判断bug类型的有用方法。前台bug通常会生成前台错误日志,如前端开发工具(如Chrome浏览器)的控制台输出。后台bug则会在服务器端生成错误日志,例如在服务器日志文件中或开发框架提供的调试工具中查看错误日志。通过查看错误日志,可以确定bug出现的位置和相应的修复方法。

3.网络请求和响应分析:检查网络请求和响应,查看前端与后端的数据传递是否正常,在哪一步出现了异常现象。

调试和测试:在开发过程中,可以通过调试和测试来判断bug类型。使用开发工具的调试功能可以帮助定位前台bug,如在浏览器的开发者工具中断点调试JavaScript代码。对于后台bug,可以编写单元测试或集成测试用例来验证后台功能和逻辑,以确定问题是否出现在后台。

4.根据表现特征判断:根据bug的表现特征来判断。比如,如果是页面显示异常、交互功能问题,可能是前端bug;如果是数据请求失败、数据错误等,可能是后端bug。

前后台交互:首先需要检查bug是否与前后台的交互有关。前台指的是用户可见的界面以及用户的操作,后台指的是服务器端的处理和数据操作。如果问题出现在用户界面或用户操作时,很可能是前台bug。如果问题出现在服务器端的数据处理、数据传输或服务器配置方面,很可能是后台bug。

5.协作与通信:前端和后端开发人员之间进行有效的协作和沟通,共同分析bug的根本原因,找出解决方案。

需要注意的是,有些问题可能涉及前后台交互的复杂性和互相依赖性,可能需要综合多个因素才能做出正确的判断。在解决bug时,团队合作和跨部门协调也是非常重要的,以确保及时修复问题并改进软件质量。

6.修改并测试:根据初步的判断,前端和后端各自修改代码,并在本地测试,确认修复后bug是否得以解决。

7.集成测试:在修复后,前端和后端一同进行集成测试,确认问题是否彻底解决。

通过以上步骤,可以较为准确地判断一个bug是前端还是后端的bug,并采取相应的措施解决问题。同时,建议开发人员之间保持密切的沟通,协作解决bug,提高团队的效率和开发质量。希望对您有帮助!

(三)项目上线后发现bug,测试人员应该怎么办?

通常,如果线上出现bug,用户会通过业务方反馈到项目组这边,项目经理会根据功能模块的负责人,分给对应的开发与测试。

作为测试人员,遇到此类情形先不要慌,我们可以这样处理:

(1)首先,评估bug严重级别

如果严重,则申请紧急变更上线;如果不严重,申请等bug修复好后跟下个版本一起上线。

(2)然后,积极推动解决bug

编写对应的测试用例,在测试环境中重现和定位bug,提交bug交给开发进行修复,完成后进行bug的复测。如果测试环境无法重现,可以导入生产环境的包到测试环境中测试。如果还是不能复现,可以尝试查看生产环境的日志去定位问题。

(3)最后,复盘总结

分析bug产生的深层原因,查漏补缺,总结经验教训,避免后续出现同类问题。

如何做好复盘总结,参见下方面试题(四)

(四)线上问题如何复盘?

从这几个角度去回答:

1.复盘频率,多久复盘一次(when)
2.复盘会参与成员(who)
3.如何复盘(how)

复盘频率

频率通常都是跟着版本周期走的,比如一个版本测完上线,基本在稳定之后,下个版本开始测试之前,一个team,都能抽出来2个小时的时间去开。定期复盘非常重要,一定要有一定的频率。不能偶尔只做几次,一定要有节奏。

参与成员

  • 至少要包含相关功能的所有测试人员
  • 如果复盘出结果,需要其他团队参与的,一定要落地到位。所谓落地到位就是:
    1.是否通知
    2.对方反馈
    3.最终是否实施。

举个例子,如果在复盘过程中发现是因为研发随意提测,导致测试效率下降,那么就要拉项目经理或测试的老大。

1.向对方提出问题
2.磋商一个解决方案,比如制定提测规则
3.要求研发团队按照规范行事。

如何复盘

一般复盘会去复盘问题问题也有基本方法论,有一个方法叫做5why法,有两个基本原则:

1.刨根问到底
2.对事不对人

比如线上出现了生产事故,这是问题的思考路径:

1.生成事故是由什么问题导致的?
2.这个问题测试时为什么没有发现?
3.假设是因为测试漏测,为什么会出现漏测?
4.假设是因为没有考虑到这个场景,就要考虑是否还有同类型的场景,并补充测试用例。

在提出问题和解决方案之后,有一个很重要的步骤就是落地。把问题形成一个闭环。才能避免下次问题再次出现。

总结

面试碰到这个问题,心里一定要有大概思路不要想到什么说什么。重点在于方式方法,不要过分纠结于细节。把从问题的发现、提出,到如何规避。要有一套完善的体系,能尽量确保问题不再出现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/949136.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nginx学习之路-nginx配置https服务器

文章目录 1. 生成证书2. 配置证书1. 拷贝证书文件2. 修改conf/nginx.conf文件内容 3. 查看效果1. 重载配置2. 访问 1. 生成证书 在linux系统下执行,使用openssl命令。(windows环境也可以使用cmder) # 1. 生成私钥 server2025.key(无密码保护…

【mybatis】Mybatis整体架构解析

从本篇开始我们开始学习mybatis的系列源码,主要的主题可能就是四个方面 从整体把握mybatis系统架构通过一个查询SQL 源码解析核心流程mybatis的缓存机制-源码级别mybatis的插件机制-源码级别spring是如何整合的mybatis框架的 1.整体架构 上述是mybatis的源码&…

DDcGAN_多分辨率图像融合的双鉴别条件生成对抗网络_y译文马佳义

摘要: 在本文中,我们提出了一种新的端到端模型,称为双鉴别条件生成对抗网络(DDcGAN),用于融合不同分辨率的红外和可见光图像。我们的方法建立了一个生成器和两个鉴别器之间的对抗博弈。生成器的目的是基于特…

K8s高可用集群之Kubernetes集群管理平台、命令补全工具、资源监控工具部署及常用命令

K8s高可用集群之Kubernetes管理平台、补全命令工具、资源监控工具部署及常用命令 1.Kuboard可视化管理平台2.kubectl命令tab补全工具3.MetricsServer资源监控工具4.Kubernetes常用命令 1.Kuboard可视化管理平台 可以选择安装k8s官网的管理平台;我这里是安装的其他开…

计算机网络-数据链路层(CSMA/CD协议,CSMA/CA协议)

2.2 ppp协议 点对点协议ppp是目前使用最广泛的点对点数据链路层协议。 2.3 媒体接入控制基本概念 共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC。 2.3.1 静态划分信道 频分复用 时分复用 波分复用 码分复…

富芮坤FR800X系列之软件开发工具链(如IDE、编译器、调试器等)

文章目录 一、IDE(集成开发环境)二、编译器三、调试器四、其他辅助工具五、小结 FR800x系列作为一款低功耗蓝牙芯片,其软件开发工具链对于开发者来说至关重要。以下是对FR800x软件开发工具链的详细介绍,包括IDE(集成开…

Oracle数据库如何找到 Top Hard Parsing SQL 语句?

有一个数据库应用程序存在过多的解析问题,因此需要找到产生大量硬解析的主要语句。 什么是硬解析 Oracle数据库中的硬解析(Hard Parse)是指在执行SQL语句时,数据库需要重新解析该SQL语句,并创建新的执行计划的过程。这…

从零开始开发纯血鸿蒙应用之实现起始页

从零开始开发纯血鸿蒙应用 一、前言二、主要页面三、应用起始页四、MainPageContent 实现1、一级结构2、二级结构2.1、EmptyContent2.2、FileListContent2.2.1、ViewAction:2.2.2、EditAction2.2.3、DeleteAction2.2.4、ShareAction 五、载入起始页的时机五、总结 一…

5G NTN(七) 高层(1)

说明:本专题主要基于3GPP协议38.821 目录 1. Idle态移动性增强 1.1 TA问题 1.1.1 TA的大小 1.1.2 针对NTN LEO的移动TA,场景C2和D2 1.1.3 针对NTN LEO的固定TA,场景C2和D2 1.1.3.1 方法1:当UE位置信息无法获取的时候 1.1.…

Spring Cloud微服务多模块架构:父子工程搭建实践

一、前言 在现代微服务架构中,Spring Cloud 提供了一整套工具和技术栈来简化分布式系统的开发。为了更好地组织和管理复杂的微服务项目,使用 Maven 多模块(父子工程) 是一种高效的方法。 ‍ 父子工程 是 Maven 中的一种项目结构…

PDF2Audio - 阅读 PDF 的新方式

1000 Stars 127 Forks 10 Issues 0 贡献者 Apache-2.0 License Python 语言 代码: GitHub - lamm-mit/PDF2Audio 更多AI开源软件:AI开源 - 小众AI PDF2Audio,它将彻底改变我们阅读和理解 PDF 文件的方式。我们不再需要盯着屏幕,而是让信息以声…

pdf预览 报:Failed to load module script

pdf 预览报: Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “application/octet-stream”. Strict MIME type checking is enforced for module scripts per HTML spec. 报错原因&#xff1a…

游戏引擎学习第74天

仓库: https://gitee.com/mrxiao_com/2d_game (仓库满了) gitee 好像一个仓库最多1G https://gitee.com/mrxiao_com/2d_game_2 后面改到https://gitee.com/mrxiao_com/2d_game_2 仓库 代码占的内存不大主要是markdown截图700多兆比较占内存 Blackboard: 以对处理实体对的方式进…

基于等保的安全审计运维系统

摘要 本文研究与设计一种基于等级保护(等保)要求的安全审计运维系统,以适应日益严峻的网络安全形势和不断提高的安全审计需求。随着信息技术的快速发展和应用广泛,信息系统安全面临的威胁也在不断增加,特别是在关键信…

基于单片机中药存放环境监测系统的实现

基于单片机中药存放环境监测系统的实现 项目开发背景 随着现代中药的广泛应用,中药材的存储环境对其质量有着至关重要的影响。温湿度、烟雾、火灾等环境因素,若不加以控制,将会导致中药材失效或变质。因此,设计一个基于单片机的…

「Java 数据结构全面解读」:从基础到进阶的实战指南

「Java 数据结构全面解读」:从基础到进阶的实战指南 数据结构是程序设计中的核心部分,用于组织和管理数据。Java 提供了丰富的集合框架和工具类,涵盖了常见的数据结构如数组、链表、栈、队列和树等。本文将系统性地介绍这些数据结构的概念、…

webserver的http实现

1、用了状态机,为什么要用状态机? 在逻辑处理模块中,响应的http请求采用主从状态机完成, 传统的控制流程都是按照顺序执行的,状态机能够处理任意顺序的事件,并能提供有意义的响应--即使这些事件发生的顺序和…

Uniapp Android 本地离线打包(详细流程)

一、简介 App 离线 SDK 暂时不支持 Kotlin,未来不清楚。 uniapp 提供了 云打包 与 本地打包 两种方案,云打包 需要排队且还有次数限制,本地打包 则就没有这些限制,而且会 本地打包 对开发 原生插件 有很大的帮助。 细节&#x…

记录一次电脑被入侵用来挖矿的过程(Trojan、Miner、Hack、turminoob)

文章目录 0、总结1、背景2、端倪3、有个微软的系统更新,就想着更新看看(能否冲掉问题)4、更新没成功,自动重启电脑5、风险文件(好家伙命名还挺规范,一看名字就知道出问题了)6、开机有一些注册表…

使用大语言模型的生物嵌入,后续应该会有很多类似文章出来!

生信碱移 语言模型嵌入 小编先前分享了使用ChatGPT基因嵌入做平替的顶刊文章GenePT,只需要在原本的领域工作上插入这类的GPT嵌入,就能够实现降维打击。 ▲ 对于GenePT或者嵌入感兴趣的铁子,可以点击查看上面这篇推文。 今天冲浪的时候又看…