我们该如何进行bug总结?

2023-11-13

前言:在项目过程中,测试同学会发现大量的bug,但同时也不可避免的会存在一些遗漏的bug。为了能够减少遗漏bug的现象,我们需要针对遗漏的问题进行总结,从教训中积累经验,总结方法,从而提高测试的覆盖度,提升产品的整体质量。

我们该如何进行bug总结?

一、什么样的bug需要进行总结?

1、线上遗漏的bug

没有被测试发现而遗漏到线上的bug。其影响不言而喻,会直接影响用户的体验,影响产品的口碑,势必需要进行总结。

2、非线上遗漏的bug。

没有在规定的测试阶段发现,从而导致发现晚的bug,例如XX模块已经测试完毕,结果后来又发现该模块的新bug。这类bug会导致增加bug修改和验证的时间,从而有可能影响项目的整体进度,甚至导致项目delay。

俗话说”人非圣贤,孰能无过“,软件是由人编写的,所以再所难免都会有问题,而我们所要做就是尽量避免出现问题,或者是避免出现重复的问题。

对于软件测试人员来说分析BUG是非常好的一个措施,这样可以检测到测试人员在测试过程中哪些地方考虑不周,或没有考虑到,从而可以提醒测试人员下次思考的范围扩大,尽可能地完全覆盖测试范围。

从分析结果的角度出发,bug大多都是开发人员和测试人员麻痹大意所导致的,并不是不可避免的。

二、什么时机进行bug总结?

  1. 项目上线后,应尽快进行bug总结,否则时间一长会出现遗忘的情况,包括测试和开发两方面,给总结操作带来不便。

  2. 遇到严重的或非常重要的遗漏bug,可随时进行单独总结,比如线上发现的严重问题。

三、总结什么内容?

总结bug的核心,是为了后续减少遗漏bug,提高测试覆盖度,提升项目质量。想要达到这个目的,首先需要分析bug的原因,尤其是遗漏原因;其次是确定后续的改进方案,避免类似的问题再次发生。

四、怎么分析bug原因?

bug遗漏的原因一般分为几大类:

1、 非遗漏问题

bug总结时,出现概率最高的可能就是非遗漏问题,这类问题并不需要进行具体的总结,其中主要包含三类:

  • 不是问题:例如用户反馈的问题,但符合产品的需求要求,这种就属于不是问题。
  • 开发引入:例如我们测试完成的模块,开发修改bug,或在测试不知情的情况下修改了代码,引入的新bug。
  • 需变引入:例如我们测试完成的模块,发生了需变,导致新的bug产生。

2、用例设计遗漏

bug是用例设计时没有覆盖到的场景,又可以细分为几类:

  • 基础用例设计不足:例如需求中详细说明的内容,没有在用例中提现。
  • 需求理解错误:例如需求理解错误,导致测试用例的预期结果不正确,而开发实现正好符合错误预期。
  • 模块间影响考虑不足:例如没有A模块与B模块有关联,会对B模块产生影响,但B模块的用例中未涉及到相应的场景。
  • 复杂路径无法覆盖:路径过于复杂,或者涉及较多层级的操作,例如经过10步操作后才会出现的bug。
  • 复杂场景考虑不足:例如两个或多个看似完全没有关系的场景,结合起来产生的bug。
  • 适配问题考虑不足:例如在某些特定的机型上出现的bug。

3、用例执行遗漏

bug是执行用例过程中出现过,但没有被发现,可细分为2类:

  • 纯执行遗漏:测试用例中涵盖,但没有执行;或者执行了用例,也出现了问题,发现了问题但没有提交bug。
  • 敏感度不足:测试用例中涵盖,但没有明确说明,遇到了问题,但没有意识到是bug。例如同样都是头像,在A页面是个圆的,在B页面是个方的。

4、重现率低的问题

  • 重现率低:重现几率较低的bug,无稳定复现的步骤。

5、体验性或性能问题未关注到

  • 需求不明:需求中没有明确说明,也未在用例中涉及,但对用户体验有影响,后经其他方指出的bug。例如产品logo不够明确、使用过程中设备发热等。

五、如何进行方案改进?

针对bug遗漏的不同原因,也有不同的改进方案。

1、非遗漏问题

  • 这种类型,与测试无关,无需改进。

2、用例设计遗漏

  • 用例补充:补充对应模块的测试用例,这个是基础。
  • 用例通用:补充后的case是否具有通用性,如果有,那么需要应用到所有相关的模块中,并作为后续用例设计的经验积累。例如:锁屏后再解锁会导致某个页面控件的功能失效,那么各个页面都应该添加“锁屏后再解锁,检查控件可用”的case。

3、用例执行遗漏

  • 执行遗漏:纯执行遗漏不可饶恕,除了自己做好备忘外,没什么更好的改进办法,这个层面出现问题,更多的应该是自我反思。
  • 敏感性遗漏:如果是敏感度不足导致的遗漏,那么可以持续进行经验积累,提升自己对bug的认知。

4、重现率低的问题

  • 有原因:如果是能够找到具体原因的bug,那么应该深入挖掘,找到问题的本质原因以及重现步骤,然后再进行分析,对遗漏原因进行归类,然后再进行针对性的改进。
  • 无原因:如果是无法找到具体原因的bug,这块暂无有效的改进方法。

5、体验性或性能问题未关注到

  • 持续积累:这类问题的改进方案跟敏感度不足的改进方案类似,需要持续的进行积累,提升自己的产品感觉。

六、推行RCA会议

作为软件开发工程师或者管理者的你有没有经常遇到这样的问题:为什么自己的产品不断涌现regression bug?为什么改了一个bug以后,引发出N个其他的bug甚至很多bug是在客户使用的过程中爆出来的,给公司造成了经济和名誉的损失。如果我们在开发的早期,能够及时地找到产生这些bug的原因并加以修复,就可以最大程度地挽回这些损失了。

1、RCA介绍

根本原因分析法Root Cause Analysis(后面简称RCA)。通过RCA的分析,不仅可以在研发的早期探测到bug,而且还能为管理者提供批判性思维和组织内可持续提高的方向,以进一步地提高产品的质量,形成一个正反馈。

这是一项结构化的问题处理法,用以逐步找出问题的根本原因并加以解决, 而不是仅仅关注问题的表征。根本原因分析是一个系统化的问题处理过程,包括确定和分析问题原因,找出问题解决办法,并制定问题预防措施。在组织管理领域内,根本原因分析能够帮助利益相关者发现组织问题的症结,并找出根本性的解决方案

2、RCA的分析工具

RCA的分析工具有因果图,头脑风暴法,因果分析-鱼骨图 和因果分析-5why法,每个组织可以根据自己的实际情况,选择对应的方法。MSTR常用的RCA分析工具有两种,一种是5Why分析法,还有一种是鱼骨图(Ishikawa diagram)。 它们都可以帮助我们,有效地找到问题的根本原因,并且提供了清晰的记录方式,以免我们在分析过程中被各种信息淹没。

3、RCA具体操作流程

下面我们来看一下具体的RCA操作流程。如下图所见,整个流程分为5个步骤:

1. 选择合适的问题进行分析

  • 比如,有代表性的,引发严重问题和影响的bug。RCA属于深度分析,所以通常会比较耗时,如果每个问题都要分析,会占用较多的组织资源。

2. 选择合适的人参加分析

通常一场分析会需要以下人员参加:

  • 项目经理:熟悉RCA流程,把控会议节奏和讨论方向,做好会议记录和后续改进措施的跟踪和汇报。可以是scrum master,或者product owner。
  • 开发工程师:引入这个问题的工程师。在会议中讲述整个事件发生的起因经过。提供第一手的分析资料。
  • 架构师:从代码架构等角度考虑,帮助开发工程师挖掘根本原因,提出今后改进的方法。
  • 测试工程师:从测试的角度出发,去考量是否可以通过测试覆盖率,在测试的早期发现问题。

3. 召开正式的RCA分析会议

  • 下面RCA分析会议四部曲会详细介绍。

4. 定期回顾和跟踪

  • 在RCA会议产生的改进方法和行动需要定期回顾和跟踪。

5. RCA会议结束

  • 对于已经完成所有行动计划的RCA分析进行批准和结案。通常可以选择product owner作为批准者。

4、RCA分析会议四部曲

正式的RCA分析会议包括以下四部曲:

1. 获取问题

获取问题所有相关的消息和事实,比如由开发工程师讲述整个时间的原委:

  • 从测试人员或者客户的角度出发,这是一个什么样的问题?在遇到这个问题前,他们是想要做什么?
  • 这个问题是在什么情况下,怎么被发现的?
  • 从技术分析的角度,这个问题的本质原因是什么?
  • 在问题被发现以后,我们是怎么去修复这个问题的?
  • 还有其他相关的事实和信息我们需要注意的?

2.5Why分析

用5Why分析工具开始做具体的分析,项目经理可以从第一步已经收集到的事实和现象开始提问,根据大家给出的答案,来判断这是另外一个现象还是根本原因。如果还是现象,再问下一个问题,以此重复,从而推进分析的不断深入,直到找到问题的根本原因。给大家一个最简单的例子帮助大家理解。

  • 第一个why: 为什么手机不亮了?
    答:手机电池没电了
  • 第二个why: 为什么手机电池没电了?
    答:昨晚没充电。
  • 第三个why:为什么昨晚没充电?
    答:家里停电了。
  • 第四个why:为什么家里停电了?
    答:自己没缴电费。
  • 第五个why:为什么没有缴电费?
    答:没钱了,自己没有合理的理财,月光族。

3. 答案反推

根据上面5个why问完以后得到的答案反推回去,检查逻辑是否正确。注意顺着逻辑向下问,不要跳跃,实际工作中的情况比上述的例子要复杂多,容易跑题。

4. 制定行动计划

以上检查无误以后,开始针对每一个root cause制定行动计划。比如针对上面的例子,行动计划可以下面两个选项。除了做什么,每个行动计划还需要制定行动的执行者和完成期限,以备后面的跟踪。

  • 选项一:跟朋友或者亲戚借钱,缴电费。
  • 选项二:下回提前每月留出基本生活费,比如电费,通信费等。

5、RCA的核心意义

  • RCA的过程是去挖掘问题的根本问题,不是开批斗大会,所以主持人和参会人员不要给引入问题的软件工程师太大的压力,要营造轻松的头脑风暴的氛围。
  • 分析过程中,不能着急做出判断和解决方案,因为它们不是真正的root cause,自然我们会制定错误的解决方案。通常4小时的分析也属于正常范畴。
  • 所有制定出来的行动计划都是要可以执行的,清晰的,可以衡量的

七、总结

  • 多数bug都是人为的,避免这些情况就需要开发人员在开发过程中多注意,培养良好的编程习惯,而测试人员在测试过程中需要将测试范围考虑完全,尽量避免遗漏测试点,对于不清楚的点,不管是开发还是测试人员,都应该拿出来讨论,切忌闭门造车,不懂装懂。
  • 对于bug总结,应该正面认识,并不是一味的追讨责任,而是更好的改进测试方法、提升测试是能力。认真做好bug总结,对测试团队、测试个人的能力提升,都有很大的帮助。
  • 对于线上bug我们一定要整理并分析形成缺陷报告,通过统计分析,找出可以避免的生产故障,使生产故障率有效降低,并形成统一分析模板。在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们该如何进行bug总结? 的相关文章

随机推荐

  • 【读书笔记】周志华 机器学习 第六章 支持向量机

    第六章 支持向量机 1 间隔和支持向量 2 核函数 3 软间隔和正则化 4 参考文献 1 间隔和支持向量 对上图所示的数据集 有多个超平面可以划分 直观上来说 最中间加粗的那个超平面是最好的 因为离两类数据都比较远 离两类数据都比较远 的好
  • 2020-01-03

    注册 登陆 当进入一个网站时首先进行注册 注册时会提示输入手机号 利用阿里大鱼接口发送一条短信验证码到当前号码并将短信验证码保存到redis 注册时会提示输入邮箱账号 当点击注册时会给当前邮箱发送一条激活码给用户激活 注册成功后会跳转到登陆
  • Netty4之编解码

    本文是基于Netty4 1 x 一般在使用Netty作为网络框架进行开发时 编解码框架是我们应该注意的一个重要部分 应用从网络层接收数据需要经过解码 Decode 将二进制的数据报转换从应用层的协议消息 这样才能被应用逻辑所识别 同样 客户
  • html标题、段落、换行与字符实体

    html标题 通过 h1 h2 h3 h4 h5 h6 标签可以在网页上定义6种级别的标题 6种级别的标题表示文档的6级目录层级关系 比如说 h1 用作主标题 最重要的 其后是 h2 次重要的 再其次是 h3 以此类推 搜索引擎会使用标题将
  • 虚拟数字人类型的形象分为四种

    虚拟人应用类型 虚拟人根据应用场景分为四种 1 虚拟偶像 打造粉丝经济 受到品牌青睐 爱奇艺今年以虚拟偶像新艺打的综艺 跨次元新星 B站推出的跨人团体VirtuaRealReal参加上海时装周 将虚拟与现实连接 拓展多元化应用场景 创造更多
  • UE4官方文档链接记录

    创建并使用自定义高度图和图层 https docs unrealengine com latest CHN Engine Landscape Custom index html 点击打开链接 自发光材质照亮场景 https docs unr
  • 基于 React 和 Redux 开发一个任务管理应用,支持添加任务、编辑任务、完成任务和删除任务等功能

    以下是一个基于 React 和 Redux 的任务管理应用的简单实现 支持添加任务 编辑任务 完成任务和删除任务等功能 javascript import React useState from react import createSto
  • 数字信号处理2-截止频率

    截止频率 2013 10 07 23 50 04 转载 在物理学和电机工程学中 一个系统的输出信号的能量通常随输入信号的频率发生变化 频率响应 截止频率 英语 Cutoff frequency 1 是指一个系统的输出信号能量开始大幅下降 在
  • 学习python爬虫看一篇就足够了之爬取《太平洋汽车》论坛及点评实战爬虫大全

    前言 这也是一篇毕业论文的数据爬虫 我第一次看见 太平洋汽车 的点评信息时 检查它的网页元素 发现并没有像 汽车之家 那样的字体反爬技术 所以就初步判断它没有很强的反爬虫技术 大不了就使用selenium库自动化实现爬虫呗 但是我确因为这样
  • 电脑如何查看及开启虚拟化

    什么是虚拟化 Intel Virtualization Technology就是以前众所周知的 Vanderpool 技术 简称VT 中文译为虚拟化技术 这种技术可以让一个CPU工作起来就像多个CPU并行运行 从而使得在一部电脑内同时运行多
  • 华为OD机试 - 最小循环子数组(Python)

    题目描述 给定一个由若干整数组成的数组nums 请检查数组是否是由某个子数组重复循环拼接而成 请输出这个最小的子数组 输入描述 第一行输入数组中元素个数n 1 n 100000 第二行输入数组的数字序列nums 以空格分割 0 nums i
  • Rsa 加密和解密

  • java 锁 Lock接口详解

    一 java util concurrent locks包下常用的类与接口 lock是jdk 1 5后新增的 1 Lock和ReadWriteLock是两大锁的根接口 Lock代表实现类是ReentrantLock 可重入锁 ReadWri
  • python数组处理方法

    一 数组对象的属性 数组的大小 元素个数 array size 数组的维度 array ndim 数组元素的数据类型 array dtype 数组的形状 array shape 数组中每个元素占用的内存空间 array itemsize 数
  • 模拟电路设计(31)---功率放大器简介

    在电子设备中 放大器的末级通常要带动一定的负载 例如 使扬声器发出洪亮的声音 推动电动机旋转 将微弱的无线电信号发射出去等 为了达到以上要求 末级电路不但要求能输出较大幅度的电压 同时还要求输出较大幅度的电流 即要求放大器能向负载输出足够大
  • tensorflow2.0手势识别出错记录

    1 TypeError len is not well defined for symbolic Tensors packed 2 0 Please call x shape rather than len x for shape info
  • css的浮动及高度塌陷

    一 高度塌陷 一般情况 我们的父元素是不设置高度的 让其被内容自动撑开 如果子元素设置浮动了 子元素会脱离文档流 就不能再撑开父元素的高度 从而导致父元素的高度丢失 导致页面布局的混乱 这就是高度塌陷问题 这个问题也必须要解决 解决高度塌陷
  • 小贷、p2p项目上线的基本流程

    一套成熟的流程 我可以简单地介绍一下 目前在服务项目筛选阶段 我们是有多个部门来协同完成的 相关理财服务项目设计部门会把接收和遴选后的各类型投资服务进行初选 我们财富风险管理部是对初选后的服务项目进行第二次筛选 再由公司核心管理层组成的风险
  • 5.1-操作系统的状态机模型

    复习 并发 就这么 讲完了 理解的方式 玩一玩 示例代码 本次课回答的问题 Q 听说操作系统也是程序 那到底是鸡生蛋还是蛋生鸡 本次课主要内容 软件和硬件的桥梁 操作系统的加载和初始化 AbstractMachine 代码导读 一 自己动手
  • 我们该如何进行bug总结?

    前言 在项目过程中 测试同学会发现大量的bug 但同时也不可避免的会存在一些遗漏的bug 为了能够减少遗漏bug的现象 我们需要针对遗漏的问题进行总结 从教训中积累经验 总结方法 从而提高测试的覆盖度 提升产品的整体质量 我们该如何进行bu