软件测试(软件测试生命周期,描述一个bug,定义bug级别,bug生命周期,如何开始第一次测试,测试执行和bug管理,测试工作中的人际关系处理)

一、软件测试的生命周期

对比软件的生命周期和bug的生命周期
· 软件的生命周期:需求分析——计划——设计——编码——测试——运行维护
· 软件测试的生命周期:需求分析——测试计划——测试设计、测试开发——测试执行——测试评估
· bug的生命周期
· 软件测试&软件开发生命周期
需求阶段:测试人员了解需求、对需求进行分解,得出测试需求
计划阶段:根据需求编写测试计划/测试方案
设计阶段:测试人员适当的了解设计,对于设计测试用例是很有帮助的,测试人员搭建测试用例框架,根据需求和设计编写一部分测试用例
编码阶段:测试人员一般是不需要编码的,但已经编码的模块,专业的白盒测试人员可以计划执行单元测试,完善、细化测试用例以及调整测试计划和方案。
测试阶段:测试阶段是软件测试人员最为重要的工作阶段,根据测试用例和计划执行测试,在执行的过程中记录、管理缺陷,测试完成后编写测试报告。
运行维护:测试人员需要参与项目的实施工作。测试人员对项目产品的业务和操作非常了解,加上测试人员的沟通表达能力一般都比较强,所以测试人员可以参与用户使用软件的培训,在试运行项目时收集问题并及时反馈给相关负责人。

二、描述一个bug

  1. 发现问题的版本
    开发人员需要知道出现问题的版本,才能够获取对应版本的代码来重现故障。并且版本的标识也有利于统计和分析每个版本的质量
  2. 问题出现的环境
    环境分为 硬件环境软件环境 ,如果是web项目,需要描述浏览器版本,客户机操作系统等,如果是app项目,需要描述机型、分辨率、操作系统版本等。详细的环境描述有利于故障的定位
  3. 错误重现的步骤
    描述问题重现的最短步骤。
  4. 预期行为的描述
    要让开发人员知道怎么样才是正确的,尤其要以用户的角度来描述程序的行为是怎样的。如果是依据需求提出的故障,能写明需求的来源是最好的。
    要相信:测试人员是最懂需求的。
  5. 错误行为的描述
    描述错误的现象。crash等可以上传log,UI问题可以有截图。
  6. 其他
    某些公司会有一些其他的要求,例如故障的分类:功能故障,界面故障,兼容性故障等。有些有优先级的分类,严重影响测试需要开发人员优先修改的,可以设置优先级为高。
  7. 不要把多个bug放到一起
    在无法确认是同一段代码造成的故障时,不要将bug放在一起提交。

· 案例:在这里插入图片描述

三、如何定义bug级别

bug的定义每个公司都不一致,在定义级别之前需要查看公司规范。
样例如下:

  1. Blocker(崩溃):
    阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。
    如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等(该问题在测试中较少出现,一旦出现应立即中止当前版本测试)。
  2. Critical(严重):
    系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。功能设计与需求严重不符,模块无法启动或调用,程序重启、自动退出,关联程序间调用冲突,安全问题、稳定性等。
    如:软件中数据保存后数据库中显示错误,用户所要求的功能缺失,程序接口错误,数值计算统计错误等(该等级问题出现在不影响其他功能测试的情况下可以继续该版本测试)。
  3. Major(一般):
    功能没有完全实现但是不影响使用,功能菜单存在缺陷但不会影响系统稳定性。
    如:操作时间长、查询时间长、格式错误、边界条件错误,删除没有确认框、数据库表中字段过多等(该问题实际测试中存在最多)
  4. Minor(次要):
    界面、性能缺陷,建议类问题,不影响操作功能的执行,可以优化性能的方案等。
    如:错别字、界面格式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置不正确,用户体验感受不好,可以优化性能的方案等(此类问题在测试初期较多,优先程度较低;在测试后期出现较少,应及时处理)

四、bug的生命周期

每个公司、每一个工具对bug生命周期的定义都是不一致的,下面仅是一个常见的例子
在这里插入图片描述
· 测试人员应该跟踪一个bug的整个生命周期,从Open到Closed的所有状态。
在这里插入图片描述
· 测试人员新发现的Bug,必须由测试组长评审后才决定是否Open并分派给开发人员。测试人员Open的Bug可以直接分派给Bug对应的程序模块的负责人,也可以要求都先统一提交给开发主管,由开发主管审核后再决定是否分派给开发人员进行修改。
· Bug的跟踪以及状态变更应该遵循一些基本原则:
① 测试人员对每一个缺陷的修改必须重新取一个包含更改后的代码的新版本进行回归测试,确保相同的问题不再出现,才能关闭缺陷。
② 对于拒绝修改和延迟修改的Bug,需要经过包含测试人员代表和开发人员代表、用户方面的代表(或代表用户角度的人)的评审

五、第一次测试

· 准备:

  1. 阅读所有项目有关的文档,包括:需求文档、设计文档、用户手册
  2. 尽可能参加各种项目会议,了解项目的背景、人员组成、尽可能的了解需求和业务。特别针对业务专业性较强的项目,例如银行业务,需要了解各种业务知识,如高低柜、一二三类账户等、存款、贷款等。
  3. 熟悉项目所使用的测试管理工具、配置管理工具,获取对应的地址和登录方式
  4. 阅读已有的测试方案和测试案例
  5. 阅读旧有的bug库,了解系统功能。尤其重要的是和现有的测试团队保持一致的故障定级原则
  6. 了解公司的规范要求,特别是用例编写规范、用例执行规范、bug提交规范、测试工具工具使用规范等

· 第一次测试,需要与测试组长确认具体的工作内容:

  1. 测试的计划是什么?
  2. 测试的内容是什么?test case有多少?安排了几天执行?有没有自由测试的时间?
  3. 我要测试的内容开发人员是谁?需求人员是谁?
  4. 分配给我的测试内容是否需要特殊的测试资源?资源是否满足需要?

六、测试执行和bug管理

· 执行测试

  1. 打开待测试的系统
  2. 打开测试管理工3. 发现bug!进行复现并确认bug的复现步骤
  3. 记录bug
  4. 沟通bug
  5. 验证以前提交的bug
  6. 确认本次测试完成
  7. 编写测试报告具用例模块,开始执行用例

执行测试时处理要做到测试用例和需求的覆盖外,还要有临时发挥的能力。根据自己的经验、对测试的感悟以及随机测试可以发现很多根据测试用例无法发现的缺陷。
注意不能拘泥于测试用例或者已经有的测试方法,在测试执行过程中要不断总结测试方法和测试故障模型。真正优秀的测试人员在执行测试时是想着做,做着想,这样的测试效果才好,尤其是在测试过程中,对程序的处理相当了解的情况下,测试的思路会更加清晰和全面。
· 发现更多bug

  1. 软件测试存在二八原则,80%的故障集中于20%的模块,如果某部分问题较多,加强测试广度和深度!
  2. 开发人员也存在二八原则,80%的故障集中于20%的开发人员,如果某些开发人员的bug较多,加强他开发模块的测试广度和深度!
  3. 多进行逆向思维和发散性的思维
  4. 不要局限于用例和需求文档
  5. 尽早介入项目, 不要等到开发的差不多了再介入项目

七、工作中的人际关系

能让开发人员解决最多Bug的测试人员是最优秀的测试人员
· 一般会遇到以下几种情况
在这里插入图片描述
· 解决
批判性思维:清楚–准确、切题–深刻,有意义,有逻辑性–公正、全面

  1. 先检查自身,是否bug描述不清楚(与开发人员积极沟通)
  2. 站在用户角度考虑问题 应该让开发人员了解到Bug对用户可能造成的困扰,这样才能促使开发人员更加积极地、高质量地修改Bug。在争执时,可以问一句:如果你是用户,你可以接受么?
  3. BUG定级要有理有据:BUG定级时,不仅要参考BUG级别,还要考虑BUG是否会影响到流程,往往用户的BUG级别和我们的是有区别的,需站在用户的角度定考虑定位级别。
  4. 提高自身的技术和业务水平. 不光要提出问题, 最好也能提出解决方案.
  5. 、开发人员不接受时,不要争吵,多次沟通开发仍然不接受,可发起bug评审(决定如何处理bug;分析缺陷产生原因,找出预防对策)。

加油鸭!

热门文章

暂无图片
编程学习 ·

vue打包后修改服务器地址

1.在public文件下新建config.js文件2.修改config.js文件 var PLATFROM_CONFIG = {}; // 本地环境 PLATFROM_CONFIG.baseUrl = "服务器地址" // 正式环境 // PLATFROM_CONFIG.baseUrl = "服务器地址"3.在封装好的axios里面去修改,我的是4.在index.html中引…
暂无图片
编程学习 ·

大数据-java基础-第01章 java概述

1.java简介 答:java是1995年推出的一门高级编程语言,它即安全、可移植、又可跨平台,并且可以解决Internet上的大型应用问题。 2.java的特点 答: ①简单易用、完全面向对象; ②与平台无关型、可扩展性强; ③可移植高、支持分布式编程; ④半编译半解释型; ⑤健壮、安全可…
暂无图片
编程学习 ·

线程池:ThreadPoolExecutor

github地址: https://github.com/lishanglei/thread-pool.git 源码 public ThreadPoolExecutor(int corePoolSize, //核心线程数int maximumPoolSize,//最大线程数量long keepAliveTime, //线程存活时间TimeUnit unit, //线程存活时间单位 BlockingQueue<Runnable> w…
暂无图片
编程学习 ·

JVM GC原理

了解JVM GC原理非常重要,对于系统调优非常有用。如果一个系统频繁发生FULL GC,那么会造成系统响应卡顿,更严重的时候会导致系统崩溃。JVM的内存空间 JVM的内存空间,从大的层面上来分析包含:新生代空间(Young)和老年代空间(Old)。新生代空间(Young)又被分为2个部分(Ed…
暂无图片
编程学习 ·

Java设计模式-单例模式(全例记录)

1. 基础介绍核心作用:保证一个类只有一个实例,并提供一个访问该实例的全局访问点; 优点:由于单例模式只生成一个实例,所以减少了系统的开销,当一个系统启动需要较多的资源时,可以直接在系统启动时产生一个单例对象,然后使其永久驻留内存;单例模式可以在系统设置全局访…
暂无图片
编程学习 ·

培训网站比较-CSDN-51CTO-慕课网

本人是从事互联网行业,从码农到部门负责人,一路走来,最让我感受深刻的是,技术每天在更新迭代,自己一定要跟上脚步,不然很容易被淘汰。不管是作为技术人员还是部门管理者,技术能力必须得到重视。作为部门负责人,必须督促大家学习技术。我讲讲这几年在这方面的经历:一开…
暂无图片
编程学习 ·

一文看懂Chrome浏览器工作原理

转自:https://juejin.im/post/5e182a47e51d453cee48c752本文是笔者对Mario Kosaka写的inside look at modern web browser系列文章的翻译。这里的翻译不是指直译,而是结合个人的理解将作者想表达的意思表达出来,而且会尽量补充一些相关的内容来帮助大家更好地理解。这篇文章…
暂无图片
编程学习 ·

Easyui网上书城前端界面

Easyui网上书城前端界面登录界面注册界面首页界面查询书籍界面购物车界面login.htmlregister.htmlindex.htmlsearch.htmlshopping.html 接上一篇博客. 首先,前端界面所需要的界面有 登录 注册 首页 查询书籍 购物车 登录界面注册界面首页界面查询书籍界面购物车界面login.html…
暂无图片
编程学习 ·

XML DOM摘要四(XMLHttpRequest 对象)

什么是 XMLHttpRequest 对象?XMLHttpRequest 对象提供了在网页加载后与服务器进行通信的方法。XMLHttpRequest 对象是开发者的梦想,因为您能够:在不重新加载页面的情况下更新网页在页面已加载后从服务器请求数据在页面已加载后从服务器接收数据在后台向服务器发送数据 所有现…
暂无图片
编程学习 ·

剑指Offer 10-| 学习笔记

剑指Offer 10-| 学习笔记 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模…
暂无图片
编程学习 ·

Tableau制作全球电影数据分析/全球超市利润混合地图

作业5: 1、创建产地电影数量与评分(以此命名)的符号地图,处理未知位置信息,以颜色表示评分平均值,选择红绿发散,以电影数量表示圆形大小,显示产地标签,对数据进行分析。 2、使用智能显示制作连续面积图,命名为电影数量变化,以年代为横轴,电影数量为纵轴,显示标签;…
暂无图片
编程学习 ·

caller和callee的区别

callee caller返回一个函数的引用,这个函数调用了当前的函数。 使用这个属性要注意这个属性只有当函数在执行时才有用 如果在javascript程序中,函数是由顶层调用的,则返回nullfunctionName.caller: functionName是当前正在执行的函数。 function a() {console.log(a.caller)…
暂无图片
编程学习 ·

01 HTML知识笔记(标签—布局)

本人使用的是sublime text3编辑器,这款软件的汉化破解版会随资料一起上传的😀然后找到的一些比较好的博文同大家一起share!!!Sublime text 3 汉化 破解版 分享Sublime Text3快捷键大全用sublime text3编写的html网页用浏览器打开出现中文乱码的原理及解决方法目录一、htm…
暂无图片
编程学习 ·

C#异步Task

笔记整理(原资源网址): https://www.bilibili.com/video/BV1Zf4y117fs?p=12 Task Thread 的问题线程(Thread)是用来创建并发(concurrent)的一种低级别工具,它有一些限制,尤其是:虽然开始线程的时候可以方便的传入数据,但是当 Join 的时候,很难从线程获得返回值。 可能…
暂无图片
编程学习 ·

Java数据结构--串的模式匹配算法

一、Brute-Force模式匹配算法 public class BruteForce {/*** Brute-Force(暴风算法)* 算法思想:* 从目标串s的第一个字符起和模式串t的第一个字符进行比较,若相等,则继续逐个比较后续字符,* 否则从s串的第二个字符起再重新和串t进行比较。以此类推,直至串t中每个字符…
暂无图片
编程学习 ·

mac OS中配置通过symbolink方式解决路径问题

mac OS中配置通过symlink方式解决路径问题 第一次在mac OS中安装Django,使用pip3 install Django安装了Django V3.0.8版本,出现以下的现象:使用python3 --version可以看到Python版本,正确 使用python3 -m django --version可以看到Django版本,正确 但在使用django-admin s…
暂无图片
编程学习 ·

LeetCode 590. N叉树的后序遍历

目录结构1.题目2.题解1.题目给定一个 N 叉树,返回其节点值的后序遍历。例如,给定一个 3叉树 :返回其后序遍历: [5,6,3,2,4,1].说明: 递归法很简单,你可以使用迭代法完成此题吗?来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/n-ary-tree-postorder-traver…
暂无图片
编程学习 ·

剑指 Offer-JZ25-复杂链表的复制

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 解题思路代码实现 /…
暂无图片
编程学习 ·

Prometheus监控Docker-Swarm集群(二)

Prometheus监控Docker Swarm集群(二)前面我讲解了对于Docker的一些监控知识以及Docker监控开源工具Weave Scope做了一个概述,以及简单安装。 同时也了解了Weave Scope的不足之处,而引出来了cAdvisor配合Prometheus来监控容器,本篇主要是针对Swarm集群的监控详细讲解;Swar…