当前位置: 首页 > news >正文

软件测试之软件缺陷管理

什么是软件缺陷

标准的定义:从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病等各种问题;从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背

软件缺陷的生命周期

一个缺陷的正常生命周期是 新建(提交)--打开(确认)--修复--测试验证,通过就关闭,没有通过就重新打开,继续修复和验证。

缺陷状态

软件缺陷的常用指标

部分常用指标

描述

缺陷率(缺陷数量/规模)

一方面作为对开发人员的考核,另一方面用于分析开发过程的bug原因分析及预防

缺陷密度(发布缺陷数/总缺陷数)

主要用于分析产品发布的过程改进,如果这个数据过大,说明我们的放行标准过低,如果这个数很低,说明我们的放行标准过高,事实发布后是允许存在bug的,那么如何改进发布放行,就必须用这个数据来度量

缺陷修复时效

对于不能等级的缺陷修复的时效要求不同,一般用于考察开发是否及时反馈问题

缺陷验证时效

考察测试人员是否及时验证缺陷的解决情况

拒绝率

考察测试人员提交的BUG质量

重复打开率(重复打开的BUG数量/BUG数量)

考核开发人员的对于BUG的自测情况

缺陷类型分布报告

缺陷类型分布报告主要描述缺陷类型的分布情况,看缺陷属于哪些类型的错误。这些信息有助于引起开发人员的注意,并分析缺陷为什么会集中在这种类型

缺陷区域分布报告

缺陷区域分布报告主要描述缺陷在不同功能模块出现的情况,这些信息有助于开发人员分析为什么缺陷会集中出现在某个功能模块。例如,如果缺陷主要集中在单据的审批过程中,那么就要分析是否是审批流程调用的工作流接口设计不合理

缺陷状态分布报告

缺陷状态分布报告主要描述缺陷各种状态的比例情况,例如Open、Fixed、Closed、Reopen、Rejected、Delay的Bug分别占了百分之多少。这些信息有助于评估测试和产品的现状

缺陷趋势报告

缺陷趋势报告主要描述一段时间内的缺陷情况。如果项目管理比较规范,缺陷管理和测试流程比较正常的话,缺陷趋势报告还可以用来估算软件可发布的日期

软件缺陷怎么管理

bug管理的目的

1.保证每个缺陷都被修改

2.保证每个缺陷都被回归

3.缺陷的完整性和一致性

4.避免纠纷,降低沟通成本

缺陷管理的意义

1.提高工作效率(BUG分类,状态负责人)

2.记录唯一的缺陷信息,保证BUG完整一致(通过设置权限实现)

3.记录中间环节,是BUG可追溯

4.为测试报告提供数据

软件缺陷管理流程

  BUG跟踪流程:1.测试人员拿到最新软件版本,执行测试;2.发现BUG并记录到BUG管理平台;提交BUG报告或测试报告,邮件抄送开发人员;3.开发人员得到最新BUG并修复BUG(如复杂问题,进行专家评审如何处理)4.修复BUG后把新代码Check in到源代码服务器;5.Buider人员会进行版本编译并提交到发布版本服务器;6.测试人员开始执行新的一轮测试任务。

  缺陷跟踪目的:1.保证BUG得到有效的跟踪和解决,使每一环节都有相对应责任人负责。2.进行缺陷分析和产品度量。

  软件缺陷分析

  •缺陷分析就是分析缺陷在与缺陷关联关系的一个或多个参数值上的分布。缺陷分析提供了一个软件可靠性指标

  •主要参数•状态:缺陷的当前状态(打开的、正在修复或关闭的等)。•优先级:必须处理和解决缺陷的相对重要性。•严重性:缺陷的相关影响。对最终用户、组织或第三方的影响等等。•起源:导致缺陷的起源故障及其位置,或排除该缺陷需要修复的构件

常见的Bug跟踪管理软件:禅道、Jira、企业内部管理软件

BUG描述的注意事项

1一定可以重现的BUG可以不写“重复几次操作,出现几次,我认为,标题里不能写步骤,不能用主观的话描述,我在。。。。的,不确定语句:某些好像,禁止使用”之后”,然后之类的语句”之类的话

2需求规格说明书以外的错误可以当建议报告,不当BUG报告,开发可以改,也可以不改

3若是随机出现的BUG,要写出操作几次,出现几次

4若被测软件是跨平台软件,要写上在其他平台下无误

5禁止写冗余的操作的步骤。常识性的步骤不用写进缺陷操作步骤

6写明环境数据,如何选择数据,数据如何被破坏

缺陷难以复现怎么办

问题1: 复现不了的问题
a. 昨天必现的问题、今天复现不了;
b. 生产环境必现的问题、测试环境复现不了;
c. 测试人员必现的问题、开发人员复现不了;
d. 一套环境必现的问题、另一套环境复现不了;

问题2: 自己的问题复现不了
A:发现的问题很多,也很严重,最终复现不了需要攻关解决、降级处理的也不少
B : 提交问题比A可能稍少也可能多,大部分问题在提交之前就分析的很透彻,甚至点出了问题的原因、出现的条件和场景,最终问题全部高效、及时的得到了解决。

出现以上问题的原因是什么?如何解决?下面一步一步说。

一、出现上述问题的原因
经过这些年工作的积累,以及与各领域测试同行的交流,问题复现不了的原因不外乎下面几个:

绩效导向,提单量影响绩效考核
问题是伴随出现的,不知道何时出现、如何出现的
你觉得你知道了根本原因,实际上你不知道
系统日志记录不完善、或者根本没有打开
测试过程全程无记录
问题单缺乏关键信息
高并发、多线程、异步调用复现概率低的问题
黑天鹅问题

二、解决问题的思路

1. 绩效导向问题
很多公司,问题单提单量是绩效考核的很大一部分,甚至占到了90%或更高,这就导致了比较奇葩的现象:问题单提单量高,解决率却很低。这么说有点诛心的味道,实际工作中怀揣这种想法的人其实非常少,这种结果是特定的考核机制下自然形成的,很多身处其中的人可能并没有意识到。

跟我们平常说的上有政策、下有对策是一致的,比如二套房,大家排队离婚。
姿势: 高大上的价值观引导,绩效考核方式是落实测试价值观的手段
a. 提交问题的目的,是为了解决问题,提升用户的使用体验。这样测试人员不仅会从技术角度分析产品的实现,还会从易用性等各个角度去衡量产品。
b. 测试的乐趣在于发现问题、定位问题的过程。一般喜欢打探小道消息、对问题刨根究底的人,测试都做的特别好。
 

 现在很多公司已经调整了绩效考核的指标,比如阿里同学,重点考核的是上线发布后产品的质量、测试的效率、个人的成长。虽然最后一点有点虚,但是从现在阿里系出版的技术作品看,价值观引导确实做得好。

问题数量可以作为产品质量评价的一个数据,去衡量产品的质量,但前提是有代码缺陷密度等基线数据作为支撑,而不能拍脑袋。

2. 伴随出现的问题
执行测试时都有明确的目的性,这个用例测试的目的是什么,怀疑会出现什么样的现象。出现计划内的问题,是很容易复现和定位的。但伴随出现的问题,你一般不能第一时间抓住它,直到它产生了破坏作用,才能感知到问题的存在。它是在何时因为什么操作出现、什么事件触发的,不知道。这类问题就比较容易演化为难复现问题。

姿势:
保持冷静,不要激动,保持现状
思考一下:你对它做了什么?为什么这样? 他们两个什么关系(可能没关系)? 可能在什么地方、什么操作、什么事件触发的?
想明白了吗?想不明白叫别人一起想。
不管是否想明白,把操作记录、组网、数据、配置、状态全部记录下来
在不破坏环境的情况下,尝试验证想法;如果问题比较严重,考虑另搭环境验证;
想法得到验证后,简化环境验证问题,找到问题触发条件

3. 几个自作孽的问题
下面这几个问题,只要做事严谨是可以避免的:
你觉得你知道了问题原因,实际上你不知道
系统日志没开
系统日志记录不完善
测试环境、配置文件、环境数据无保留
操作过程无记录
问题单缺乏关键信息

偶发的缺陷怎么处理

在软件测试中经常会出现很多偶尔出现的缺陷,也就是说不是100%的能复现,对于这样的缺陷,该怎么处理呢?

图片

(1) 考虑各方面的因素来判断缺陷的严重级别和优先级别。

首先判断严重级别:严重级别比较容易判断,和其他能复现的缺陷一样处理。然后判断优先级别,就需要看对用户的影响,即需要知道这个缺陷能被复现的概率,这就需要去复现这个缺陷。

怎么搜集复现概率呢,有很多种方法,可以暂缓处理这个缺陷,看后来这个缺陷是否能出现,如果从项目初期到项目结束,这个缺陷就出现一次,那完全可以忽略这个缺陷;可以刻意的安排测试员复现这个缺陷,不断重复的去复现这个缺陷,这个时候如果有开发人员来分析哪些操作容易导致这个缺陷出现,测试人员通常更容易成功复现,测试人员最好把软件连着trace来试图复现缺陷,这样如果成功复现了,就拿到有效的信息来给开发人员分析;也可以在终端用户测试的时候,让终端用户测试人员注意有没有碰到这样的缺陷,终端用户测试能最真实的模仿实际用户的行为,如果几个月的终端用户测试都没有发现这个缺陷,那大可以放心的忽略这个缺陷;相反,如果终端用户测试里频繁碰到这个缺陷,那这个缺陷对用户的影响就很大,就需要被重视。

图片

(2)根据缺陷的优先级别决定什么时候fix这个缺陷。

这一步和常规的缺陷处理流程一样,就是开发人员去分析得到的有效信息,然后找相应的解决方案。不过需要提醒的是,通常偶尔出现的缺陷不是一个一个分析处理的,而是一批同类型的缺陷一块处理。通常会等到不可重现的缺陷积累到一定的量的时候再成批的处理。只所以这样处理,是因为如果不可重现的缺陷没有积累到一定的量,很难找出根本原因,因为每个偶尔出现的缺陷只能提供很少的一部分信息,信息量没有累积到一定的程度,就找不出根本的原因。

图片

(3)集成fix的代码。

这一步和常规的缺陷处理流程是一样的,但是管理者需要注意,很多时候同一段fix代码解决的可能是一批偶尔出现的缺陷,这些fix代码改动通常比较大,或者改变的是底层的数据,或者是内存管理的优化等,反正都是些疑难杂症,所以不适合在重要的软件,比如,Sales candidate,上集成这些fix。

图片

(4)验证fix是否成功,并试图验证这个fix是否有负面影响。

Fix是成功的,没有负面影响或者负面影响在可接受范围内,那这个缺陷就可以close了;如果fix不成功,或者有严重的负面影响,需要考虑是否rollback。

对于能复现的缺陷,验证fix是否成功是件很容易的事情,但是对于偶尔出现的缺陷,验证fix是否成功是件相当难的事情,因为本身缺陷就是偶尔出现的,不能复现了也不能说明fix是成功的。这依然需要长期观察、安排测试人员集中测试、或者让终端用户测试人员多注意。有时候不可复现的缺陷并不能完全fix,可能一个fix只能降低复现的概率,将到能接受的范围也是可以的,比如对于一个通话过程中经常掉话的缺陷,把复现率从百分之一降到万分之一,也是可以接受的。

图片

通常偶尔出现的缺陷不是一个一个处理的,一般是一批一批处理的,偶然的现象联系起来,让开发人员分析,通常能发现根本原因是什么,这样对于试图复现偶尔出现的缺陷、对于开发人员分析这些缺陷、对于测试人员验证这样的缺陷的效率提高,是有很大帮助的。处理这样的问题很重要的一点是,不能因为这个问题出现的概率低,就随意的的忽略这样的问题。

相关文章:

软件测试之软件缺陷管理

什么是软件缺陷 标准的定义:从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病等各种问题;从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背 软件缺陷的生命周期 一个缺陷的正常生命周期是 新建&#xff…...

分布式锁(Distributed Lock)介绍(基于数据库(mysql);基于缓存(redis);基于ZooKeeper等分布式协调服务)

文章目录 分布式锁介绍1. 分布式锁的工作原理1.1 锁的基本概念1.2 工作机制 2. 分布式锁的实现方式2.1 基于数据库的分布式锁2.2 基于Redis的分布式锁2.3 基于ZooKeeper的分布式锁 3. 分布式锁的挑战3.1 死锁问题3.2 锁粒度问题粗粒度锁细粒度锁锁粒度的选择 3.3 锁的公平性问题…...

10 ISIS 基础 报文 状态

10 ISIS 基础 报文 状态 09 ISIS 大纲-CSDN博客 •看完本篇博客,您将能知道以下内容: ▫描述IS-IS的基本概念 ▫描述IS-IS的工作原理 ▫描述IS-IS与OSPF的差异 ▫实现IS-IS的常用配置 ▫实现 ISIS 的常用到的认证...

Python第三方扩展库Matplotlib

Python第三方扩展库Matplotlib Matplotlib 是第三方库,不是Python安装程序自带的库,需要额外安装,它是Python的一个综合性的绘图库,提供了大量的绘图函数用于创建静态、动态、交互式的图形和数据可视化,可以帮助用户创…...

单例模式有几种写法?请谈谈你的理解?

为什么有单例模式? 单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个全局对象,这样有利…...

帕鲁幻兽 一键开服 简单到爆 教你10秒实现 帕鲁幻兽私服联机服务器搭建

幻兽帕鲁是一款非常受欢迎的游戏,最近在社区中呈现了爆火的趋势,在线人数已经突破了百万级别。由于社区的热度不断上升,官方服务器开始出现了不稳定和卡人闪退的情况。搭建一个私人服务器可能是一个最稳定而舒适的解决方案。通过搭建私人服务…...

自动化报告pptx-python|如何将pandas的表格写入PPTX(二)

本篇延续:自动化报告的前奏|使用python-pptx操作PPT(一) 因为在pptx-python中使用table,需要单个cell逐一输入,于是在想有没有pandas可以直接读入的方式, 有两个开源项目有类似的功能: PandasToPowerpointmspandas其中mspandas写的比较复杂,PandasToPowerpoint比较易懂…...

Ruby详解及安装流程

文章目录 一、Ruby详解二、Ruby安装流程三、Ruby案例四、Ruby常见问题五、Ruby优缺点六、热门文章 一、Ruby详解 Ruby是一种高级编程语言,具有简单易学、灵活多变、优雅美丽的语法特点。它是一种面向对象的编程语言,具有动态类型和解释型语言的特性。在…...

免费的ChatGPT网站 ( 7个 )

ChatGPT的核心功能是基于用户在输入时的语言或文本生成相应的回复或继续内容。此外,它还能够完成多种任务,如撰写邮件、视频脚本、文案、翻译、代码编写以及撰写论文等。 博主归纳总结了7个国内非常好用,而且免费的chatGPT网站,AI…...

python异步编程(1)——理论篇

1.理解多线程 当启动一个Python程序时,它会作为一个单独的进程运行在操作系统中。进程是操作系统分配资源(如内存和处理器时间)的基本单位。每个Python程序启动时,都会创建一个主线程。如果没有在代码中明确创建其他线程&#xf…...

PyTorch复现网络模型VGG

VGG 原论文地址:https://arxiv.org/abs/1409.1556VGG是Visual Geometry Group(视觉几何组)的缩写,它是一个在计算机视觉领域中非常有影响力的研究团队,主要隶属于牛津大学的工程系和科学系。VGG以其对卷积神经网络&am…...

Springboot集成Javamelody

JavaMelody的目标是监视QA和生产环境中的Java或Java EE应用服务器。它不是模拟用户请求的工具,而是根据用户对应用程序的使用情况来衡量和计算应用程序实际操作的统计信息的工具。JavaMelody主要基于请求统计和演化图。 它允许改进QA和生产中的应用程序&#xff0c…...

如何将 h5 页面快速转换成微信小程序

Hello各位朋友们大家新的一月好呀!我是咕噜铁蛋!我知道在小程序开发中,有时候需要将H5页面转换成微信小程序页面。这样可以将原本的网页内容适配到小程序中,让用户能够更方便地访问和使用。在本文中,我将分享如何快速将…...

在Vue的模块开发中使用GPT的体验及总结

我这一周都在忙着实现一个页面,这个页面是通过vue基于element-ui来实现的。在这个过程中,我把页面拆分成多个组件,而组件的生成是通过Chat-GPT3来实现的。 这又是一次使用AI来协同开发的体验,觉得有必要总结一下: 遵循…...

Java常见算法题解析面试题(中)

11.判断101-200之间有多少个素数,并输出所有素数。【重点】 程序分析:判断素数的方法,用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 public class lianxi { publi…...

提升网站性能的秘诀:为什么Nginx是高效服务器的代名词?

在这个信息爆炸的时代,每当你在浏览器中输入一个网址,背后都有一个强大的服务器在默默地工作。而在这些服务器中,有一个名字你可能听说过无数次——Nginx。今天,就让我们一起探索这个神奇的工具。 一、Nginx是什么 Nginx&#x…...

[Python图像处理] 使用OpenCV创建深度图

使用OpenCV创建深度图 双目视觉创建深度图相关链接双目视觉 在传统的立体视觉中,两个摄像机彼此水平移动,用于获得场景上的两个不同视图(作为立体图像),就像人类的双目视觉系统: 通过比较这两个图像,可以以视差的形式获得相对深度信息,该视差编码对应图像点的水平坐标的…...

vue+element 换肤功能

1.首先建深色和浅色两个主题样式变量样式表,样式表名和按钮中传入的值一样,本例中起名为default.scss和dark.scss 2.在data中定义主题变量名 zTheme:‘defalut’,默认引用defalut.scss, 在点击按钮时切换引用的样式表,达到换肤效果…...

python魔法函数[全面]

1、init 用于初始化对象的属性和状态 当创建一个对象时,Python会自动调用该对象的__init__方法。 这个方法用于初始化对象的属性和状态,是对象创建过程中的一个重要环节 2、new # 通常我们不需要重写__new__方法,除非我们正在进行一些非常…...

python实现贪吃蛇小游戏(附源码)

文章目录 导入所需的模块坐标主游戏循环模块得分 贪吃蛇小游戏,那个曾经陪伴着00后和90后度过无数欢笑时光的熟悉身影,仿佛是一把打开时光之门的钥匙。它不仅是游戏世界的经典之一,更是我们童年岁月中不可或缺的一部分,一个承载回…...

爬虫学习笔记-Cookie登录古诗文网

1.导包请求 import requests 2.获取古诗文网登录接口 url https://so.gushiwen.cn/user/login.aspxfromhttp%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx # 请求头 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like …...

Linux网络状态查看与防火墙管理

网络状态查看 netstat [选项] Netstat是一款命令行工具,用于显示Linux系统中网络的状态信息,可以显示网络连接、路由表、连接的数据统计等信息。 使用 选项 -a:显示所有选项,包括监听和未监听的端口。 -t:仅显示tc…...

VxTerm:C++ MFC,在工具栏中增加Edit/ComboBox等组件,打造一个地址栏/搜索栏功能

VxTerm软件可以在本站链接下载:唯一国产化SSH工具下载,单文件纯绿色不需要安装,替代SecureCRT 在软件的主界面中,增加了一个地址栏功能。 本人的文章内容都是经本人亲自实现并验证成功的干货,关注我,互相交…...

【Android】屏幕锁

屏幕锁,就是锁住屏幕不让用户误触摸,从开发者的角度看就是不响应用户的点击事件。 屏幕锁界面 可以自己创建一个布局文件,或者直接创建一个View(例如ImageView)。 参数LayoutParams mLayoutParams new LayoutParam…...

springCloud gateway 防止XSS漏洞

springCloud gateway 防止XSS漏洞 一.XSS(跨站脚本)漏洞详解1.XSS的原理和分类2.XSS漏洞的危害3.XSS的防御 二.Java开发中防范XSS跨站脚本攻击的思路三.相关代码(适用于spring cloud gateway)1.CacheBodyGlobalFilter.java2.XssRequestGlobalFilter.java…...

美赛摘要写作重点

摘要是论文最重要的部分。竞赛要求每篇论文的首页为摘要页,如果摘要写得不好,即使有好的模型和解答,论文也将难以通过鉴别阶段的初审而进入下一阶段。 根据MCM的竞赛规则,摘要应该包含以下内容: 赛题重述与阐明&#…...

RUST笔记: 动态链接库的创建和使用

生成动态链接库 // https://github.com/vvvm23/funny-shapes # 项目元信息 [package] name "funnyshapes" # 项目名称 version "0.1.0" # 版本号 edition "2021" # Rust语言版本# 更多配置信息可查阅&#xff1…...

「阿里云」幻兽帕鲁个人服务器已上线,3分钟快速搭建

基于阿里云搭建幻兽帕鲁服务器方法,1到2分钟部署完成,稳定运行无卡顿,阿里云服务器网aliyunfuwuqi.com分享保姆级手把手教程,基于阿里云计算巢、云服务器或无影云桌面都可以: 基于阿里云幻兽帕鲁服务器创建教程 基于…...

@ 代码随想录算法训练营第6周(C语言)|Day36(贪心)

代码随想录算法训练营第6周(C语言)|Day36(贪心) Day36、贪心(包含题目 ● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间 ) 435. 无重叠区间 题目描述 给定一个区间的集合,找到需要…...

数组打印杨辉三角

签名:但行好事,莫问前程。 文章目录 前言一、杨辉三角的概念二、二维数组打印杨辉三角1、创建二维数组2、使用for循环,初始化外层元素3、给数组赋值3.1给数组每行首末元素赋值为13.1给数组每行非首末元素赋值 三、杨辉三角全代码总结 前言 记…...