从测试流程角度,对产品质量的一些总结思考

2023-10-30

前言:不知道大家有没有遇到下面两个场景,我是遇到了,还为此召开了RCA会议——复盘会议!

一、熟悉的场景

  • 生产环境出现问题-定位问题-解决问题-原因复盘-问题定级-划分责任人(每次都希望不会是自己的问题)
  • 无休止的测试-回归-再测试-再回归测试-已经投入了很大精力,但仍对项目质量不信心(每次都在祈祷上线顺利)

我相信很多人都会遇到上面两种情况吧,如果自己所负责或参与的项目经常遇到上面的两种情况,不妨从项目测试流程角度,去思考原因以及破开瓶颈的方法,从根本上去解决问题,或者减伤出现问题的频率。

二、测试流程拆解分析

在这里插入图片描述

1、需求评审

需求评审流程:
需求背景–>需求价值–>需求带来的收益–>用户场景与需求–>功能模块及操作–>流程讲解–>原型演示–>迭代计划及项目排期–>与各方确认是否有疑义

人人都是产品经理,需求评审对于测试来说就是项目最初的“产品测试”,在理解的基础上发现产品设计缺陷,其中包括逻辑错误,功能缺失,细节问题等等,这样就会有效的在前期规避很多后期开发中产生的bug,减少了很多后期返工的成本。可偏偏需求评审往往是最不重视的一环,甚至可以说是没有这个环节,追其原因无非因为项目时间紧迫或者觉得没有必要,其实这是本末倒置和得不偿失的。

产品需求作为程序的源头,只有控制好最开始部分,才不会到最后去亡羊补牢。我有过很多血的教训,所以才深深的体会到需求评审的重要性。举个栗子

记得有一次由于项目时间比较紧迫,没有对需求进行评审,当开始测试的时候发现需求的优惠券计算逻辑有一个重大的错误,经过和产品经理讨论后发现是需求设计有缺陷,需要重新设计一套优惠券计算逻辑。于是改完需求后反馈到开发这里的时候,开发原来的代码不能处理这种逻辑,只能把代码逻辑重新写一遍,最后又花了好几天重构代码,项目就延迟了一周上线。

后来回头想想如果当时在需求评审的时候把这个问题抛出来,开发就不需要编写错误的代码,测试也不需要再多测试一遍,项目也不会延迟那么久才能上线。类似的教训还有很多,都是由于不重视需求评审造成的,虽然大多数问题还是可以通过后期的测试来弥补的,但这样反正折腾真的是累人累己,如果可以有好的方法来优化,为什么不用呢?

说了需求评审的重要性,接着就来谈谈如何进行需求评审,总的来说分3步走:

  • 第一步就是要完全读懂产品需求,这个过程只需要理解而不是去挑刺,因为要明白这个需求的目的是什么,为什么这样做,怎么做等等,只有在理解的基础上才能去发现问题,而不是一知半解的去挑毛病,有些需求设计的是不合理,但也许有其特殊的用意,或者只是没有更好的方案,不能为了挑毛病而去挑刺。
  • 第二步就是分析和找问题,这就有点类似写测试用例的时候设计测试方案了,把逻辑梳理出来,看看有没有不对或者遗漏的点,整理出来反馈给产品经理。除了考虑有问题的地方,没问题的地方也是需要分析的,比如有些设计非常合理,但会增加代码的复杂度或者不利于后续的扩展和修改,同时也可能会给测试带来成倍的工作量,这些也是需要指出的,因为测试要考虑的东西一定要比产品经理多,用户使用习惯,程序复杂度,与线上系统的兼容性等等,不然直接让产品经理做测试不就好了吗?
  • 第三步就是细节问题的纠正,可以是界面,可以是文字,开发一般都是复制黏贴或者照着样子画葫芦,这些小问题后期其实也可以测试出来的,但其锅不在于开发,早点发现问题早点解决也是好事一件,至少不用提bug走一套bug处理流程了,也算给大家省点工作量,积少成多也是极好的。

当然需求评审能解决的问题也是有限的,一方面计划往往赶不上变化,中间会有部分需求的改动,另外一方面有些深层次的问题只有在测试之后才会发现。但无论如何对于测试来说还是非常有必要的,大家一定要积极的参与进去,而不是像听故事一样啥问题都没有,如果能重视起来不仅仅对项目的效率提高不少,而且也能让后期测试压力减小,何乐而不为呢?

2、技术设计评审

**通过参与技术设计评审,可以为测试方案提供依据。**例如:核心业务是否需要接口测试、新老数据兼容问题、测试场景的数据构造以及测试所需的工具等,都可以在这个阶段进行思考和产出。另外,可以有效的评估需求影响范围和风险点,避免遗漏。

此阶段是质量的基石,通过测试左移,尽早发现需求设计缺陷、技术方案风险、关联方依赖影响等方面,了解测试关注点,需求可测试性以及预留排期等问题。

例如:

  • 接口测试:会员权益核销&&优惠券核销&&退款,接口都需要对前端传入的参数进行校验
  • 新老数据兼容,比如说小程序的发版,一般会滞后于接口发布,一定要测试旧版本的兼容性

3、测试方案设计

  1. 测试用例设计
    需要从整体入手,而不仅仅局限于待测功能本身的业务逻辑。 好的测试用例,是质量保证的核心
  2. 测试用例评审
    避免三方需求不一致,减少测试执行阶段做无效工作,如执行无效用例、提交无效BUG等
  3. 测试数据准备

此阶段是质量的骨架,通过测试设计,覆盖更多的测试点、模拟更多的场景、做好更充分的测试准备,为质量保驾护航,为测试赢得更多宝贵的时间。

测试用例这一步不能忽略,即使改动很小,排期很紧,也建议要画出思维导图;要想提高测试用例设计能力,就需要平时就要多积累,对常见的缺陷模式、典型的错误类型以及遇到过的缺陷,要不断地总结、归纳,才能逐渐形成体系化的用例设计思维。

同时,对于高质量的测试活动,用例设计不仅需要考虑明确的显式功能性需求,还要涉及兼容性、安全性和性能等一系列的非功能性需求。

那好的测试用例是如何定义的呢?我在这里说说个人的见解:

  • 不应该从是否能发现BUG的维度去定义,而是应该从集合的完备性角度去思考,也就是测试用例是否能够覆盖所有等价类以及各种边界值为维度去衡量。

  • 如果把被测系统看作一个池塘,BUG是池塘中的鱼,设计测试用例集的过程就像是在编织一张捕渔网。好的用例集就是一张能够覆盖整个池塘的大渔网,只要池塘里有鱼,这个大渔网就一定能把鱼给捞上来。如果渔网本身是完整的且合格的,那么捞不到鱼,就证明池塘中没有鱼,而渔网的好坏与池塘中是否有鱼无关。渔网眼就是测试用例的粒度,粒度越大,意味着网眼越大,这就只能捕捞大鱼,一些小鱼就会漏网。这也是一些项目通用的现状,测试活动由于受限于时间成本和经济成本,只能采用基于风险驱动的模式,选择合适的测试粒度,即有所侧重地选择测试范围和设计测试用例,以寻求缺陷风险和研发成本之间的平衡。

我个人从下面3个维度出发:

  • 整体完备性: “好的”测试用例一定是一个完备的整体,是有效测试用例组成的集合,能够完全覆盖测试需求
  • 等价类划分的准确性: 指的是对于每个等价类都能保证只要其中一个输入测试通过,同子集下其他输入也一定测试通过
  • 等价类集合的完备性: 需要保证所有可能的边界值和边界条件都已经正确识别。做到了以上三点,就可以肯定测试是充分且完备的,即做到了完整的测试需求覆盖

4、线下测试(含灰度)

  1. 横向覆盖:
    对于一个场景,从开始到结束涉及到的关键节点,都要进行检查点覆盖,包括功能实现、数据读取、数据计算、数据写入等的正确性
  2. 纵向覆盖:
    正常场景、异常场景、补偿场景都要覆盖
  3. 探索性测试:
    凭个人经验进行探索性测试
  4. 回归测试:拉取回归测试集,手动测试和自动化测试相结合,在测试环境验证新功能对原有功能是否产生影响;

此阶段是质量的成型,通过测试设计的充分准备、线下测试的严格、立体的执行,发现和解决绝大部分问题。

在这里我把探索性测试单独拉出来讲一讲:
根据需求描述来设计最初的测试用例,然后执行测试;在执行过程中,如果得到的输出和预期输出不完全一致,于是会猜测这种不一致是否可能是软件的缺陷造成的;为了验证想法,你会根据错误输出,设计新的测试用例,然后采用不同的输入再次检查软输出。经过几轮这样的猜测和验证,进行反复“探索”,最终确定了一个软件的缺陷。

但是识别缺陷的思路和测试用例的设计,并没有出现在最初的测试设计和测试用例文档中。探索性测试是一种测试风格,并且强调依据当前项目上下文选择最适合的测试技术。同样的测试风格,由不同的人来具体执行,得到的结果可能会差别巨大,一直强调测试分析能力是最重要的技能。

5、线上测试

  1. 回归测试:
    拉取线上回归测试集,并结合自动化测试,保证核心流程测试通过
  2. 新功能测试:
    拉取新功能快速验证测试集,并确保覆盖新功能核心测试点

此阶段是版本质量终态,线上测试主要是为了确保代码部署、生产配置、生产环境对质量的影响。

6、测试复盘

在发布上线后,对测试过程进行复盘,总结遇到的问题,对当时的解决方案进行探讨。通过复盘,从而达到指导后续工作,减少重复踩坑。并在可以在个人复盘完成后,在部门内进行信息共享。每个人负责的项目虽然不同,但是测试思想确有共通之处。通过复盘分享,可以有效提升团队整体测试经验。

此阶段是测试经验累积阶段,也是容易被忽略的阶段。通过信息共享,大大降低重复踩坑的概率。

7、线上监控

通过选取业务流程中优先级高的测试用例,作为心跳测试用例定时运行,并持续进行补充完善。

接口测试用例的开发进度落后于新功能的发布节点。自动化不是跟着新需求走,而是测变化的东西对不变东西的影响。

此阶段是测试活动右移,质量补偿,快速响应和解决,降低生产事故造成的损失。

三、总结

  1. 通过规范测试流程,全覆盖产品生命周期,量化测试产出,在有限测试资源下的提升产出
  2. 推动力是衡量测试角色能力的重要指标,特别是一些需求不明确的项目,在各个阶段都要保证信息在团队成员间的一致性

目前的不足之处:

  • 测试用例评审流程:邮件or会议, 需要产研给出积极响应;
  • 测试各阶段的准入准出条件模糊:进入开发、进入测试,要有基本的要求,一环连着一环,在某些阶段确实可以加入一些提交基线,比如进入测试阶段之前增加提测基线(类似冒烟)
  • 技术沉淀不足,异常场景模拟依赖开发人员

我觉得作为一个测试,一定要多学、多问、多思考,只有这样,你才能快速成长,拥有全局思维,做到比产品更了解产品!

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从测试流程角度,对产品质量的一些总结思考 的相关文章

  • 【回溯法】n皇后问题并输出每种解的情况 C语言版

    问题描述 在n n的方格棋盘上 放置n个皇后 要求 个皇后两两不在一行 不在一列 不在同一对角线上 PS 行不用检测 因为皇后本身就是一行一行往下放的 并且一行只能放一个 所以当放好一个皇后后 只需检测列及对角线的位置有无皇后 如下图这些位
  • 报告论文:手写数字识别

    手写数字识别 简单手写数字识别系统 我们对VC比较熟悉 采用VC开发 数字的类别只有十种 笔划又简单 其识别问题似乎不是很困难 但事实上 一些测试结果表明 数字的正确识别率并不如印刷体汉字识别正确率高 甚至也不如联机手写体汉字识别率高 而只
  • 服务器的线路有很多

    服务器的线路有很多 大致的分为 CN2 CIA CDIA GIA等 首先简单介绍一下什么是IPLC专线 IPLC专线是国际私用出租线路 本质就是点对点内网 网络的入口在国内 所以不会受 国际链路影响 也不用走国家防火墙 IP地址可用率高 不
  • 怎么在外部类外访问内部类

    在外部类外访问内部类 Wai Nei wn new Wai new Nei 上式相当于 Wai w new Wai Wai Nei wn w new Nei package a class Wai class Nei int i 5 int
  • 【自然语言处理】利用TextRank算法提取关键词

    利用TextRank提取关键词 TextRank 是一种基于 PageRank 的算法 常用于关键词提取和文本摘要 在本文中 我将通过一个关键字提取示例帮助您了解 TextRank 如何工作 并展示 Python 的实现 使用 TextRa
  • MySQL按逗号拆分列为多行

    图一 图二 按逗号拆分列为多行 把 图一 的展示效果转换成 图二 的展示效果 1 创建用户表 sys user CREATE TABLE sys user id BIGINT NOT NULL auto increment COMMENT
  • 工厂方法模式与抽象工厂模式

    工厂方法模式与抽象工厂模式 一 工厂方法模式 Factory Method 解决的问题 案例 实现步骤 代码示例 比较冗余 只是看设计模式的思想 根据案例分析工厂方法模式 JDK源码中的工厂方法模式 二 抽象工厂模式 Abstract Fa
  • (附源码)vue3.0+.NET6实现聊天室(实时聊天SignalR)

    参考文章 搭建文章 gitte源码 在线体验 可以注册两个号来测试 演示图 一 整体介绍 介绍SignalR一种通讯模型Hub 中心模型 或者叫集线器模型 调用这个模型写好的方法 去发送消息 内容有 Hub模型的方法介绍 服务器端代码介绍
  • Webpack详解

    零 文章目录 Webpack详解 1 webpack基本概念 1 webpack是什么 静态模块打包工具 官网 https webpack docschina org 官网文档 https webpack docschina org con
  • selenium 淘宝爬虫(需要扫码登录一下)

    from selenium import webdriver import time import re def gethtml url 定义函数获取html源代码 由于淘宝是动态网页无法用requests库获取所以使用selenium模拟
  • Signature expired

    django 中使用itsdangerous加密时会出现 Signature expired 签名过期的问题 解决办法 expires in设置时间稍微长一点 然后重启pycharm 重新打开项目 比如设置expires in 3600 单
  • AI+林业重塑未来,科技力量守护森林生态宝

    引言 在科技日新月异的时代 人工智能 AI 作为一项崭新的技术 正在革新着我们社会的方方面面 素有 地球之肺 美誉的森林作为人类生存发展中不可或缺的一部分 其管理与保护也开始融入AI技术 催生出了AI 林业这一新兴领域 在AI 林业的浪潮中
  • RT_thread(二)线程的操作

    文章目录 重点 一 线程是什么 二 线程的工作机制 1 线程控制块 2 线程API 1 思维图 2 创建静态线程 3启动线程 4 静态线程脱离 5 创建动态线程 6 动态线程删除 7 使线程让出处理器资源 8 使线程休眠几个节拍 9 线程节
  • Log4j日志记录

    Log4j主要由Loggers 日志记录器 Appenders 输出器 和Layout 日志格式化器 组成 其中Loggers控制日志的输出级别与日志是否输出 Appenders指定日志的输出方式 输出到控制台 文件等 Loyout控制日志
  • 计算机网络03之三种可靠传输机制

    1 停止 等待协议 为什么要有停止 等待协议 答 除了比特出现差错 底层信道还会出现丢包问题 而且为了流量控制 停止 等待协议的原理 答 停止 等待 就是每发完一个分组就停止发送 等待接收端确认 在收到确认后才发送下一个分组 停止 等待协议
  • 网页基本常用标签

    一 标签 元素 1 表示网页的开始 2 网页的头部 3
  • Docker Hub

    Docker Hub是docker的中心仓库 Docker Hub里存储了公共的 Docker 镜像 并且提供服务来帮助你构建和管理你的 Docker 环境 Docker Hub和docker及其组件一起工作 Docker Hub会帮助你和

随机推荐

  • 石头扫地机器人离线了怎么办_关于激光头故障,石头扫地机器人无限次复活记!...

    关于激光头故障 石头扫地机器人无限次复活记 2019 08 17 19 15 41 61点赞 174收藏 82评论 小编注 此篇文章来自即可瓜分10万金币 周边好礼达标就有 邀新任务奖励无上限 点击查看活动详情 创作立场声明 本文记录的是个
  • 【Shell牛客刷题系列】SHELL17 将字段逆序输出文件的每行:巩固awk命令与学习反向列示文件内容的tac命令

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 首先学习了反向列示文件内容的命令 tac 这个命令
  • cocos2dx lua 读取json数据

    这里读取的数据是从excel转成json格式的数据 local sData cc FileUtils getInstance getStringFromFile filename local var json decode sData if
  • 基于STM32F103ZET6的RX8025SA时钟电路设计

    1 现在网上大多例程都是关于RX8025T的 带温度补偿的时钟芯片手册 RX8025SA与RX8025T的区别 RX8025T内置高稳定性32 768kHz的DTCXO 数字温度补偿晶体振荡器 可保证在全温度范围内的精度保持在 5ppm R
  • #program once 和 #ifndef

    program once 和 ifndef 在写小demo的时候 注意到vs中会自动生成 program once 看别人写的代码的时候见到比较多的反而是 ifndef define endif 从字面上看两种方式会产生相同的效果 避免同一
  • C语言--__attribute__((aligned(n)))

    include
  • 用户态和内核态的转换

    用户态切换到内核态的3种方式 a 系统调用 这是用户态进程主动要求切换到内核态的一种方式 用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作 比如前例中fork 实际上就是执行了一个创建新进程的系统调用 而系统调用的机制其核心还是
  • 网络打印机因IP地址变动导致脱机的解决方法

    PC版本win10 某一天因为种种原因导致网络打印机的IP变动了 那么我们在自己PC机上添加的打印机就无法使用了 来看作者是怎么解决的 假设目标IP由192 168 1 16改为192 168 2 195 打开我的打印机和扫面仪菜单
  • CSDN站外文章记录收藏

    序号 c opencv相关 1 OpenCV模板匹配算法详解 2 无参考图像质量评价算法Blind Image Quality Evaluation Using Perception Based Features 3 mtf calcula
  • SQLite 使用(针对Android)

    文章目录 1 SQLite 介绍 2 SQLite可视化工具 安装 3 SQLite的增删改查 3 1 SqliteOpenHelper 创建 库或表 3 2 SqliteOpenHelper 实现 增删改查 1 SQLite 介绍 SQL
  • HEVC编码结构:Slice和Tile

    1 Slice片段层 一幅图像可以被划分为一个或多个片或称为条带 Slice 每个片的数据编码都是独立的 如下图 一幅图像被划分为N个Slice Slice成条带形 在编码时 每一个Slice中的CTU按光栅扫描顺序进行编码 Slice头信
  • vue源码中值得学习的方法

    作者 chinamasters https segmentfault com a 1190000025157159 最近在深入研究vue源码 把学习过程中 看到的一些好玩的的函数方法收集起来做分享 希望对大家对深入学习js有所帮助 如果大家
  • Excel怎么求和?5大常用的Excel求和公式

    众所周知 Excel表格里可以运用很多函数来计算 将数据进行整理分析 运用函数是不可或缺的 特别是当我们的数据庞大时 人工计算是很浪费时间的 而且使用函数进行求和不仅仅是因为方便计算 还因为可以方便日后查询数据能够知道数据的来源 所以 Ex
  • MySQL数据库 - 数据库和表的基本操作(一)

    第1关 查看表结构与修改表名 查看数据表基本结构 语法规则为 desc 表名 describe可以查看表的字段信息 包括 字段名 字段数据类型 是否为主键 是否有默认值等 查看数据表详细结构 语法规则为 show create table表
  • 增益带宽积GBW

    增益带宽积GBW 增益带宽积是指放大电路在单位增益下的工作频率范围 通常用于描述放大器的高低频特性 增益带宽积越大表示放大器能够传输更高的频率信号而不降低增益 1 增益带宽积的概念 增益带宽积是指在放大器的这样一个频带内 其实际的电压增益值
  • javaweb-36:smbms用户管理分页OK

    3 获取角色操作 为了我们职责统一 可以把角色的操作单独放在一个包中 和POJO类对应 初始化sql INSERT INTO smbms smbms role roleCode roleName createBy creationDate
  • vscode运行打包vue项目内存溢出的报错和解决办法

    vscode运行打包vue项目内存溢出的报错和解决办法 最近在再弄一个旧项目的时候发现这个项目异常的大 内容涉及很多 导致我在运行的时候发生了内存的溢出 虽然不影响代码跑起来 但是他时不时保存的时候就断了就很烦 没办法 就去找各种办法来解决
  • MySQL项目练习2——员工信息表项目

    目录 项目条件 设计表 数据插入 查询操作 项目条件 dept表 部门 dept部门表结构 字段 类型 描述 deptno mediumint 8 部门编号 PK dname varchar 20 部门名称 unique loc varch
  • java随机生成10个不重复的数字,随机生成10个不重复的0-100的数字(实例讲解)

    在面试时 面试官问了我一道js题 随机生成一个含有10个元素的数组 且元素为0 100的不重复的整数 当时的第一反应是for循环生成10个数字 但是可能会有重复的情况 进一步思考 需要对生成的数字进行验证才能放到数组里面 但是问题来了 如果
  • 从测试流程角度,对产品质量的一些总结思考

    前言 不知道大家有没有遇到下面两个场景 我是遇到了 还为此召开了RCA会议 复盘会议 从测试流程角度 对产品质量的一些总结思考 一 熟悉的场景 二 测试流程拆解分析 1 需求评审 2 技术设计评审 3 测试方案设计 4 线下测试 含灰度 5