作者|孙敏

为什么要做Bug分析?

Bug是项目过程中的一个有价值的虫子,它不只是给开发的,而是开给整个项目组的。

通过Bug我们能获得什么?

  • 积累测试方法,增强QA的测试能力,提升产品质量

  • 发现项目过程中的问题,推动优化解决问题;以及可以用来侧面验证流程优化是否有效

  • 提高开发的编码能力,做到Bug预防

项目过程中不可能没Bug,但是我们要利用已有Bug减少未来Bug数,提高产品质量。

Bug包含了哪些信息可以分析?

Bug本身的信息

  • 标题、描述(操作步骤、预期结果、实际结果、截图等附加信息、环境)、创建人、修复人、创建日期、修复日期、关闭日期、优先级、严重程度、解决方法、状态、重新打开次数、所属需求等

Bug产生的阶段

  • 接口测试、冒烟测试、功能阶段、UI+PM体验、集中测试、上线发版后

  • Bug与所属需求的一些case情况等,都可以组合用来分析

Bug规范

  • 要做Bug分析,必须有一个统一的规范,才能得出更准确的数据

Bug产生阶段的划分

  • 在转转,开发提测后,QA测试的流程是接口测试、冒烟测试、功能/专项测试、UI+PM体验、server上线、集中测试、回归测试、发版

  • Bug贯穿在提测到上线后,按照阶段来看主要产生在接口测试、冒烟测试、功能测试、集中测试,以及少部分在上线后被发现

  • 为了方便后期生成自动分析图标,可以定一些开Bug的规范来标识Bug阶段,比如利用好Bug标题

Bug解决方案

  • 解决方案要与RD协商好,得到RD的认可才可以

  • 成员需要了解每种解决方案对应的意义是什么

  • 解决方案并不是一成不变的,根据需要可以增加或调整,但要避免过度添加

目前我们的解决方案如下:

  • 编码错误

  • 需求变更

  • 环境配置:因为环境问题,或配置中心配置错误导致的Bug

  • 需求/UI设计缺陷:需求或UI设计不合理,或小细节设计缺失

  • 不是BUG :非Bug,RD不需要更改任何的配置或代码

  • 重复BUG :同一个问题,提了多个(不同现象算不同问题)

  • 无法重现

  • 历史遗留:历史版本就存在的问题

  • 以后解决:当前版本不解决,下个版本再解决

  • 兼容性

  • 第三方依赖:非组内代码调用

  • 实现与文档不符:功能实现与文档不一致(漏需求等)

  • 技术方案设计不足:代码设计有问题

其中历史遗留,需求/UI设计缺陷,环境配置就是在项目过程中衍生出的解决方案;并且在项目中明确了重复BUG和以后解决的定义。

更合理的解决方案,有助于更好的分析Bug产生的原因,当这些问题都解决后,Bug自然也就可以减少了。

Bug等级

1、Bug等级有两个层面:优先级和严重程度

2、优先级根据Bug紧急程度分为:高、中、低

3、Bug严重程度分为:致命、严重、一般、提示、建议

  • 按迭代分析Bug严重程度,可以看出版本的提测质量

  • 按人分析它所有Bug的严重程度占比,长期以往,如果一个人的Bug总是严重Bug较多,也能侧面反映出一个人的代码质量且严重程度高的BUG也有更高的单独分析价值,可以积累更多的测试经验

我们关心项目中的哪些数据?怎么通过Bug获得相应的结果
首先我们要有关注点,然后再去挖掘可以反应这个关注点的数据。
这里先提一个概念叫有效Bug数,即排除了不是Bug、重复Bug的数据。有效Bug主要用于做按人(RD和PM)分析的时候,判断每种解决方案的占比,这样的分析结果RD会更加认可。当然如果一人的不是Bug占比一直偏高,那也可以思考一下为什么总是这个人将Bug置为不是Bug。

从QA角度

1、 接口测试质量

  • 想要了解一个接口测试情况,可以通过Bug按创建人统计接口漏测率

2、 功能测试质量

  • 漏测越少,测试质量相对于越高

  • 集中测试Bug+线上Bug:这些都是在QA自己功能测试完成后发现的,其实都属于QA漏测,需要进一步分析一下这些BUG的产生原因,尽量避免

3、工作量大小

  • Bug数虽然不能完全代表工作量,但是如果加上case数做对比,那一定程度可以标识一个人的工作量,并且也可以看出一个人的测试详尽程度

4、提Bug的有效性

  • Bug越精准越好,那反过来说,如果QA不是Bug数量占比越少,那也就说明他开出的Bug有效性越高

  • QA开出的Bug不一定都是有效的,但是应尽量减少其占比,可以适当提高定位问题的能力,Bug开的更精准

  • 另外通过这些Bug分析是不是隐藏了一些其他问题?比如我们引入的环境配置,就是从不是Bug中拆离出来的,更合理的解决方案才更易于分析问题。

从RD角度

1、 开发的提测质量

  • 冒烟通过率能够反应出RD的提测质量

  • 转转提测要求:冒烟通过率100%,但是偶尔会有部分需求冒烟通过率只到了90%。那就需要去分析没通过冒烟的原因:是RD开发时间太紧没有review代码?自测没过冒烟case?还是server端接口提测质量差,导致没时间联调?

2、 开发的代码质量

  • Bug数结合需求大小,以及通过Android和iOS两端做对比

  • Bug的严重程度也是一个可参考的点

  • Bug还有一个叫做重新打开次数的属性,这个可以看出RD解决问题的能力,如果一个RD解决的Bug总是被重新打开,一定程度上反应了RD的不细心和态度问题

从产品/UI角度

1、产品/UI的需求设计是否合理;

2、需求是否经常变更;

需求变动,需求/UI设计不合理,这两个都可以通过Bug解决方案进行分析,大致推算出一个PM需求质量

从项目角度

1、Bug创建及修复情况

根据每日创建和每日解决Bug数的曲线,来查看QA测试情况,以及RD解决Bug是否及时

例如下图:

分析:

  • 配合排期看,QA介入功能测试时间为3月22日,22日那天也确实是一个创建Bug的高峰,但是26还有一个凸起,这天是集中测试,集中测试当天有这么多Bug就需要分析为什么会有这么多问题前期没发现?

  • RD解决Bug曲线27日解决的Bug较少,理论集测当天后需要Bug清0,需要看一下是什么原因没有Bug清0?

2、针对解决方案进行分析

Bug规范的部分讲了,每个解决方案都对应一个意义。如果项目中某项解决方案占比较高,可以看下是为什么,以及考虑一下怎么减少这些Bug?

比如下图,除了编码错误的,不是Bug以及设计缺陷的Bug占比较高。

3、验证一些提升效率的手段是否有效

项目中遇到问题,会涉及一些流程改进,有些改进通过Bug信息可以分析。

比如分批提测,参考下图,RD正式的提测时间为12月27日,但是因为在开发阶段引入了分批提测,一部分Bug在正式提测前就已经暴露出来了,问题越早暴露解决成本越低。

按单个Bug分析

Bug众多,每个都分析具体产生原因,花费精力大。可以挑选一部分进行分析

  • 不易于发现的(不保留后台活动)

  • 有通用代表性的

  • 线上问题

  • 接口漏测

  • 集成阶段发现的问题

  • 解决方案为不是Bug的

Bug分析需要找到Bug产生的根本原因,多问多想,避免下次出现同样的问题;积累case模板以及测试方法。例如以前出现过配置项配置错误时,app没兼容好的线上问题,那通过这个Bug进行思考,配置类其实应该多考虑各种异常情况,考虑native的健壮性,通过这个问题后期我们也积累了配置类相关的测试case。

历史Bug分析

当数据积累多了,我们就有多个迭代的数据进行综合分析了

1、针对某个RD的历史解决方案占比

2、 某个RD的Bug数排名,需要和case数相比较

3、 某个QA接口漏测率、集测Bug占比Bug总数,不是Bug占比

4、需求变更最多的PM

通过这些累积的数据,可以分析一个RD的开发质量,一个QA的测试质量,以及可以根据数据,推断出一个RD容易出问题的功能点,做到Bug预测;同时通过分析各种问题产生的原因,做业务积累,让RD和QA同时受益。

最后

Bug的数据有很多,纯靠人工去分析工作量太大,需要借助一些工具进行分析。

各个公司管理Bug的工具不一样,但是都大同小异。第三方的缺陷管理有一定的报表功能,但是不一定能满足自己的需求,如果不易扩展也不能推动第三方去完成我们的需求,可以考虑自己将Bug数据存储下来。同时存储需求下的Bug、case,以及需求的开发人员,测试人员等信息,结合定义的Bug规范,自动生成分析图表。

将这些数据存储到数据库中,长期的统计分析总结,将获得一个良好的收益。


- To Be Continued -


关注「测试开发社区」
把握前沿Python测试开发技术脉搏

Bug,项目过程中的重要数据的更多相关文章

  1. 跟我extjs5(03--在项目过程中加载文件)

    跟我extjs5(03--在项目过程中加载文件) 上一节中用sencha工具自己主动创建了一个项目.而且能够在浏览器中查看. 如今我们来看看js类载入过程. 例如以下图所看到的: watermark/ ...

  2. SAP HANA项目过程中优化分析以及可行性验证

    在项目开发过程中,经常会遇到HANA模型运行效率的问题: 以我们项目为例,HANA平台要求模型运行时间不能超过10秒,但是在大数量和计算逻辑复杂的情况下(例如:ERP中的BKPF和BSEG量表的年数据 ...

  3. Java中在时间戳计算的过程中遇到的数据溢出问题

    背景 今天在跑定时任务的过程中,发现有一个任务在设置数据的查询时间范围异常,出现了开始时间戳比结束时间戳大的奇怪现象,计算时间戳的代码大致如下. package com.lingyejun.authe ...

  4. webpack 创建vue项目过程中遇到的问题和解决方法

    目录 1 webpack简介 2 webpack实现多个输入输出多个html 3  webpack 中的module下rules 下的use和loader选项 4 webpack 文件更新,如何使页面 ...

  5. 学校项目过程中知识点 Java 2015/9/15 晚

    ##命令行运行Java程序1.文件Java的源代码存放在扩展名为“.java”的文件中:Java源文件编译后,得到“.class”的文件2.方法命令行下编译java源代码的方法:javac  文件名. ...

  6. Maven3.2创建webapp项目过程中问题以及解决方案

    用maven组件来创建web项目,maven的好处一大堆,但是在创建项目的时候问题也很多,诸多不顺,网上找了很多资料,貌似都没能解决问题. 环境:jdk1.7.0_80,eclipse4.4,mave ...

  7. servlet创建项目过程中,servlet内容重写的两种搭建,tomcat的配置,class的存放位置,web.xml的搭建等注意事项与易错点

    运行一个servlet项目:需要做这些前提工作: 1.配置tomcat,在server选项卡的设置也就基本的设置,HTTP port与JMX port等端口号:基本都是默认的.这里需要注意的是,有的教 ...

  8. 2016年JD工作遇到的问题:1-5,搭建环境和熟悉项目过程中的坑

    1.更新不需要权限的项目A,却提示没有权限. 先从Git上更新项目A的代码,提示没有权限. 然后从Git上更新其它项目B的代码,正常. 再更新项目A的代码,正常了. 奇葩问题! 2.Eclipse中, ...

  9. djang小项目过程中的小问题 01(django中的configrarion配置、django自带命名规范)

    不知道为什么,明明照着做,但是我就会遇到一些错误问题,但是我觉着自己生下来就是解决问题的. ##1. 第一个是在django运行时,没有配置configration, 这个时候我添加一个django ...

随机推荐

  1. 一个简单WebApp的全程

    开始前,我先给出上一篇选项卡的demo链接http://xqhuadou.com/demo1/index.html.相信看着应该很带感,不过这个是之前经过修改的. 制作过程我就不多说了,可以直接看源码 ...

  2. 长沙中考2019数学T25讲解

    好久没更Blog了... 为了应付完成寒假作业,还是更一下(再不更都庚子年了) Upd:2020.1.22 题目 第一问 还是比较水友好的 给顶点就相当于多给了对称轴-\(\frac{b}{2a}\) ...

  3. 伯特兰·亚瑟·威廉·罗素[註 1],第三代羅素伯爵(英语:Bertrand Arthur William Russell, 3rd Earl Russell,1872年5月18日-1970年2月2日),OM,FRS,英国哲学家、数学家和逻辑学家,致力于哲学的大众化、普及化。[2] 在數學哲學上採取弗雷格的邏輯主義立場,認為數學可以化約到邏輯,哲學可以像邏輯一樣形式系統化,主張逻辑原子論。[3]

    一年假. 1920年7月,罗素申請了一年假; 這被批准了.他花了一年時間在中國和日本講學.对中国学术界有相当影响. 罗素说:  对爱情的渴望,对知识的追求,对人类苦难不可遏制的同情,是支配我一生的单纯 ...

  4. 爬虫加入数据post请求

    formdata = {'...': '...', '......': '......', '......': '......'}HEADERS = { 'User-Agent': 'Mozilla/ ...

  5. MySQL导入sql文件,过大导致错误

    --导入sql脚本文件,报错: Navicat 导入数据报错 --- 1153 - Got a packet bigger than 'max_allowed_packet' bytes2006 - ...

  6. java.lang.SecurityException: java.lang.IllegalStateException: java.io.FileNotFoundException:XXXXXX(系统找不到指定文件)

    项目启动成功过,但访问页面抛出异常. 在Maven项目启动的时候,tomcat缓存机制没有吧maven jar除外的jar执行到项目里面,所有不要慌,项目重新启动就OK了, 如果这样还是不行的话就找到 ...

  7. 吴裕雄--天生自然TensorFlow高层封装:使用TensorFlow-Slim处理MNIST数据集实现LeNet-5模型

    # 1. 通过TensorFlow-Slim定义卷机神经网络 import numpy as np import tensorflow as tf import tensorflow.contrib. ...

  8. Spring加载xml配置文件的方式

    梳理Spring的流程 xml是最常见的spring 应用系统配置源.Spring中的几种容器都支持使用xml装配bean,包括: XmlBeanFactory,ClassPathXmlApplica ...

  9. Web 手工测试

    day 1 学习目标: 熟练搭建本地测试环境 掌握熟悉项目的步骤和内容 掌握项目基本的测试流程 基础环境介绍: 项目环境的组成部分: 操作系统 windows win7 win10 Linux Cen ...

  10. day42-进程池

    #进程池Pool:apply apply_async-close-join-get map callback #1.进程池Pool:执行下面代码发现任务012先执行,345后执行,因为进程池只有3个进 ...