测试左移之需求质量

news2024/11/28 18:41:00

测试左移的由来

缺陷的修复成本逐步升高

下面是质量领域司空见惯的一张图,看图说话,容易得出:大部分缺陷都是早期引入的,同时大部分缺陷都是中晚期发现的,而缺陷发现的越晚,其修复成本就越高。因此,为了降低缺陷修复成本,我们期望在更早的时间发现缺陷。

那么上图是否完全没问题呢?不是的,这张图来源于1996年的一本书《Applied Software Measurement》,这张图画成的时候,敏捷宣言还没诞生呢(敏捷宣言诞生于2001年)。在传统背景下,需求是明确且相对固定的,需求产生的缺陷可以忽略不计。同时,在需求阶段产生的问题可能会引起整体方案的返工,因此,需求产生的问题不太会以软件缺陷的形式来体现。

需求质量呼唤测试左移

随着软件生态的发展,软件需求越来越复杂多变,需求的有效性和传递效率也备受挑战。受大环境影响,需求阶段引入的缺陷就对软件的研发成本造成了影响。同时,软件的研发过程越来越成为一个需要高效协作的整体,各角色之间的界限也变得相对模糊。

为了让质量理念更早的介入软件研发过程,也为了降低缺陷修复的成本、减少不必要的返工,需求的质量变得尤为重要。测试左移因此而生,需求分析人员与测试人员需要协同工作,共同保证需求的质量。

加上需求阶段重画一下上面的图,理想情况下,我们容易得出以下结论:

  1. 缺陷的引入从需求阶段就开始持续,到研发阶段达到峰值,然后趋于平缓
  2. 缺陷从需求阶段就开始陆续被发现,到测试阶段达到峰值,然后趋于平缓
  3. 从需求阶段到研发初期,缺陷修复的成本极低
  4. 开发后期到上线,缺陷修复成本一路攀升至高点
  5. 缺陷发现的数量少于引入的数量,但在上线前后,缺陷发现数量大于引入数量

因此,为了获得更经济的资源投入产出比,我们认为应该在需求阶段和编码初期更多的发现缺陷,从而减少修复成本和返工,这也正是测试左移的价值所在。

那么,该如何保证需求的质量呢?我们在不同的时期面临的需求,其形态是有差异的,所以需要深刻理解这些差异,并有针对性的设计质量活动加以验证。

需求的几个层次

一个很现实的例子

一天,大老板说:“微信小程序不错,我们内部OA流程得做一个,你们安排一下,年内发布就行。” 这就是一个来自大老板的一句话需求。

项目经理拿到这个需求,看到“年内发布”,需求管理看板上就可以多一张卡,只有几个字“OA小程序”,排期可能暂时安排在第三季度。

过了俩月,送走了一批艰难的需求,暂时松口气的项目经理扫到这张卡,瞬间头皮发麻,这还有一个老板亲生的大坑呢,得尽快填上。喊来产品经理,快出一版方案,再找技术经理大致估一下工作量。

只有一句话显然是没法出方案的,产品经理和技术经理各自焦头烂额的研究了两天,又花了半天暂时碰出了OA小程序的初版方案。一周后,方案通过评审。这时,根据既定方案,产品经理细化了一些需求:用户管理,组织管理,流程管理,表单配置,权限配置,审批配置,微信登录等。

即将进入研发阶段,需求又会被再次细化。以用户提交请假单的场景为例,需求可被细化如下图。进入研发后,开发以一定的优先级顺序来领取需求进行研发。

需求的三种粒度

在上面的故事中,为了服务产品规划和不同的管理诉求,需求呈现出以下三个粒度:

史诗故事 > 特性故事 > 用户故事

  • 史诗故事 Epic:粗粒度的描述需求,通常需要多个迭代才能完成,主要用于版本规划时记录和跟踪该功能
  • 特性故事 Feature:也叫主题故事,是一系列相同主题用户故事的集合,主要用于迭代规划、优先级排序和整体估算
  • 用户故事 Story:迭代开发的最小单元,是较细粒度的需求描述,主要用于迭代交付过程中的估算、跟踪和管理

不同粒度需求的质量保障

史诗故事:方案验证 & 测试设计

在产品演进过程中,当面临的需求还是一句话时,测试人员能做的事情并不多。当史诗故事即将进入迭代规划,进行方案设计时,测试人员就可以参与进来了。

方案成型初期,测试人员可以参与方案讨论和技术可行性研究,贡献既有业务流程或潜在业务逻辑,针对有较大质量风险的方案,测试人员有责任提出质疑,并给出建议。

方案确定后,测试人员就可以着手进行测试设计了,测试设计包括但不限于:针对该功能的质量预期,大致的测试规划,现有的测试资源评估,主要的质量风险及响应方式等。

特性故事:需求评审 & 测试计划

临近迭代,需求会以特性的形式体现,此时测试人员可以参与需求评审:

  • 针对功能需求,测试人员先验证需求是否有效,包括需求价值确认,需求涉及场景是否完备,与现有业务逻辑是否有冲突
  • 针对功能需求背后的支撑性需求进行澄清,确认支撑性需求的范围、验收标准、测试方式等;此外还需要考虑用户体验
  • 考虑需求的拆分是否合理,是否便于估算和迭代管理

质量活动方面,测试人员可以落实测试计划了,如各种测试活动的安排,测试效果的评价,测试的重点和难点,测试阶段的输入和输出等,在这个阶段都可以确认了。

用户故事:需求验收 & 测试执行

故事启动时,测试人员需要补充需求验收的用例,以及需求影响范围内的回归用例等。在这以后测试人员主要关注在需求验收和测试执行上,按照测试设计和计划进行测试,确保最终的实现质量。而在此阶段,测试人员尤其需要关注投入产出比,把有限的精力用在刀刃上。行之有效的做法是在测试计划阶段就明确好各功能的质量标准和资源投入,并在测试执行阶段时刻回顾。但计划是死的,人是活的,万一在测试过程中,我们发现计划赶不上变化,就需要随时跟团队沟通并进行灵活调整了。

当然,质量活动并不是以功能测完上线为结束,而是需要完成一个完整的闭环。测试阶段以后的质量活动不在本文讨论的范围内,在此就不做过多展开了。

小结

测试左移之所以重要,是因为我们要在缺陷引入的最初阶段就发现它,把缺陷扼杀在摇篮里,而不是等着它像雪球一样越滚越大。而这里的误区在于,测试左移要求的测试活动尽早介入,而不仅仅是把测试人员进行左移。因此,团队里的每个成员,都需要有测试左移的思想,都可以从一开始就绷紧质量这根弦,确保每个人的工件质量。

而在需求的质量保证活动中,测试人员也需要时不时换帽子,有时可能是终端用户,有时可能是产品经理,也有时可能是产品负责人。不管戴什么帽子,保证各个工件的质量,以及各工件的顺畅集成,都是测试人员可以关注的事。质量相关,我们责无旁贷。


文/Thoughtworks 于晓南
原文链接:https://insights.thoughtworks.cn/shift-left-testing/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/335610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue3 组件封装】vue3 轮播图组件封装

文章目录轮播图功能-获取数据轮播图-通用轮播图组件轮播图-数据渲染轮播图-逻辑封装轮播图功能-获取数据 目标: 基于pinia获取轮播图数据 核心代码: (1)在types/data.d.ts文件中定义轮播图数据的类型声明 // 所有接口的通用类型 export typ…

linux(centos7.6)docker

官方文档:https://docs.docker.com/engine/install/centos/1安装之前删除旧版本的docker2安装yum install-y yum-utils3配置yum源 不用官网的外国下载太慢 推荐阿里云yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.r…

笔记_js运算符

目录二进制相关运算符移位运算符<<>>&#xff5c;(位或运算)参考文档二进制相关运算符 移位运算符 移位运算就是对二进制进行有规律的移位。 tips:进制转换文档链接 << “<<”运算符执行左移位运算。在移位运算过程中&#xff0c;符号位始终保持不变…

jvm mat分析dump文件

jvm调优中&#xff0c;经常使用dump来分析是否存在大对象导致频繁full gc&#xff0c;以下为使用步骤&#xff1a;一、获得服务进程二、生成dump文件jmap -dump:formatb,filexxx.dump pid三、下载mat工具地址:https://www.eclipse.org/mat/downloads.php注意&#xff0c;12及以…

网络安全实验室5.上传关

5.上传关 1.请上传一张jpg格式的图片 url&#xff1a;http://lab1.xseclab.com/upload1_a4daf6890f1166fd88f386f098b182af/ 上传一张后缀名为jpg的图片&#xff0c;上传抓包修改后缀名为别的&#xff0c;s或者直接删掉&#xff0c;放包 得到key is IKHJL9786#$%^& 2.请…

再说多线程(六)——Thread生命周期

前面一直在用Thread介绍多线程任务&#xff0c;本节对线程类Thread的生命周期进行简单的梳理。线程状态对于一个线程来说&#xff0c;有以下几种状态&#xff1a;Unstarted(New) StateRunnable State(Ready to Run)Running StateNot Runable StateDead State这几种状态的转换关…

chatgpt国内能用的镜像与api请求样例

chatgpt去年刚出来时我就到openai注册了账号&#xff0c;必须用国外的线路才能注册&#xff0c;正常注册不了&#xff0c;注册完要用国外手机接收验证码&#xff0c;才能使用&#xff0c;我卡到验证码就没继续用了&#xff0c;昨晚&#xff0c;找了几个国内的镜像&#xff0c;用…

课程回顾|以智能之力,加速媒体生产全自动进程

本文内容整理自「智能媒体生产」系列课程第二讲&#xff1a;视频AI与智能生产制作&#xff0c;由阿里云智能视频云高级技术专家分享视频AI原理&#xff0c;AI辅助媒体生产&#xff0c;音视频智能化能力和底层原理&#xff0c;以及如何利用阿里云现有资源使用音视频AI能力。课程…

PyTorch学习笔记:nn.Sigmoid——Sigmoid激活函数

PyTorch学习笔记&#xff1a;nn.Sigmoid——Sigmoid激活函数 torch.nn.Sigmoid()功能&#xff1a;逐元素应用Sigmoid函数对数据进行激活&#xff0c;将元素归一化到区间(0,1)内 函数方程&#xff1a; Sigmoid(x)σ(x)11e−xSigmoid(x)\sigma(x)\frac1{1e^{-x}} Sigmoid(x)σ(…

基于python下selenium库实现交互式图片保存操作(批量保存浏览器中的图片)

Selenium是最广泛使用的开源Web UI&#xff08;用户界面&#xff09;自动化测试套件之一&#xff0c;可以通过编程与浏览量的交互式操作对网页进行自动化控制。基于这种操作进行数据保存操作&#xff0c;尤其是在图像数据的批量保存上占据优势。本博文基于selenium 与jupyterla…

Python基础01

Python基础 1、编程环境&#xff1a;IDLE 1.1使用 1、文件创建&#xff1a;File —> New File 2、文件打开&#xff1a;File —> Open 3、文件保存&#xff1a; File —> Save 2、输入输出 2.1输入&#xff1a;input() 语法&#xff1a;input(“想要表达的内容”…

在阿里当外包,是一种什么工作体验?

上周和在阿里做外包的朋友一起吃饭&#xff0c;朋友吃着吃着&#xff0c;就开启了吐槽模式。 他一边喝酒一边说&#xff0c;自己现在做着这份工作&#xff0c;实在看不到前途。 看他状态不佳&#xff0c;问了才知道&#xff0c;是手上的项目太磨人。 他们现在做的项目&#…

大数据---Hadoop安装Hadoop简易版

编写自动安装Hadoop的shell脚本 完整流程: 大数据—Hadoop安装教程&#xff08;二&#xff09; 文章目录编写自动安装Hadoop的shell脚本上传压缩包编写shell脚本vim hadoopautoinstall.sh运行上传压缩包 在opt目录下创建连个目录install和soft 将压缩包上传到install目录下 …

docker file和compose

文章目录1.dockerfile&#xff08;单机脚本&#xff09;1.概念2.原理3.dockerfile核心四步4.命令2.docker compose1.概念2.注意事项3.常用字段4.常用命令1.dockerfile&#xff08;单机脚本&#xff09; 1.概念 通过脚本&#xff0c;生成一个镜像&#xff0c;并运行对应的容器…

简介Servlet

目录 一、maven中心库 二、简介Servlet 三、实现Servlet动态页面 1、创建一个maven项目 2、引入依赖 3、创建目录结构 4、编写Servlet代码 5、打包 6、部署 7、验证程序 四、Servlet的运行原理 五、Tomcat伪代码 1、Tomcat初始化 a、让Tomcat先从指定的目录…

C语言学习_DAY_2_变量的定义_输入与输出

高质量博主&#xff0c;点个关注不迷路&#x1f338;&#x1f338;&#x1f338;&#xff01; 目录 I. 变量的定义 II. 变量的赋值 III. 输出 IV. 输入 I. 变量的定义 首先&#xff0c;我们新建一个.c文件在Dev C中&#xff0c;并把之前定义好的程序框架放进去。 此时我…

丝绸之路——NFT 系列来袭!

丝绸之路的经历讲述了汉朝时代的一个重要历史事件。该系列中的 NFT 带有中国这段黄金时代令人愉悦的视觉元素&#xff0c;使其成为值得收藏的物品。 NFT 系列介绍 敦煌女神像01&#xff08;左&#xff09;&#xff1b;汉代士兵&#xff08;中&#xff09;&#xff1b;敦煌女神像…

Matlab与ROS(1/2)链接与入门(一)

0. 简介 Matlab作为广大学生以及算法工程师常用的软件&#xff0c;因其良好的可视化以及矩阵适应能力&#xff0c;使其得到了广泛的使用。同时ROS作为机器人、自动驾驶领域最常用的软件&#xff0c;其与Matlab结合在一起也是理所当然的。为此这一系列就是来带领读者熟悉并了解…

说说连接查询有哪些以及它们之间的区别?

一、左连接 -- 左连接 select t1.a,t2.b from (select 1 a from DUAL union ALL select 1 a from DUAL union ALL select 2 a from DUAL union ALL select 2 a from DUAL union ALL select 3 a from DUAL)t1 LEFT JOIN (select 1 b from DUAL union ALL select 2 b from DUAL …

【成为架构师课程系列】大数据技术体系精华总结【值得收藏!】

目录 大数据技术总结 #大纲 #概念 #应用 #难题 #技术栈 #大数据架构 #1. 数据收集