QA的成长之路——深入测试的奇妙之旅

引言

功能测试的小伙伴,你们是否遇到过这些问题:

1、工作中重复性很高:尽管尽可能地让一个 case 覆盖更多场景,但仍有许多重复性 case,耗费大量时间,让人感到枯燥疲惫;

2、覆盖度不全:凭借需求文档写case,难以全面覆盖各种可能的情况,从而导致潜在的问题被遗漏;

3、技术提升缓慢:在技术评审时听着别人热火朝天的讨论,自己却无法发表有价值的意见,对代码也感到陌生,让人感到焦虑无助。

功能测试遇到了瓶颈,自动化测试的收益不确定,工具开发又有局限性。如何更快、更准、更稳的交付?未来的路,到底该怎么走……

来到采货侠后,我接触到了“深入测试”的概念——通过了解系统内部实现来进行测试,帮助我走出了困境。

心中疑问重重

通过大家的分享,我了解到深入测试有很多好处。

· 我们可以通过技术评审、代码走读能够提前发现问题,从而在提测前就把bug解决;

· 我们可以根据代码补充case,把需求文档上没有的异常场景都覆盖到;

· 我们更可以针对重复性场景去了解代码是如何实现的,从而精简case,提高测试效率。

但我心中仍有疑问:深入测试到底是什么?我该怎么去做呢?它真的有用吗?它的投入回报比又是如何?

此时内心:疑问重重~
在这里插入图片描述

深入测试前提–代码

在小师傅和团队的引导下,我开始执行深入测试,但很快遇到了难题:我的“代码能力”似乎跟不上深入测试的要求。我开始求助小师傅,首先他教会了我怎么去看代码……

1、覆盖率–定位位置:可以从覆盖率的角度去理解case,利用覆盖率工具去定位功能对应的代码位置;

2、debug–了解链路:去了解需求中一些主要的实现类,并通过debug的方式走遍代码链路;

3、diff代码–分析bug:尝试去分析bug,修复后的bug可以通过diff代码来了解问题的根源。

经过几个需求的练习,我对代码熟悉了很多,小师傅开始教我怎么去写代码……

4、数据构造–练习代码:通过几个数据构造的练习,我对代码的熟练度越来越高了。

通过不断的学习和实践,我的代码能力有了显著的提升。面对代码时也变得更加自信了。

此时内心:进步了,开心~
在这里插入图片描述

深入测试初体验

在经历了代码能力的提升之后,我迎来了深入测试的初次实践。

1、效率提升 - 精简case的体验:

首先,我针对重复性较高的case进行了精简。

例如:我需要根据品牌、成色等字段去和库表中字段匹配,看是否命中策略。

之前的case设计–重复性高:

图片1.png
查看代码,代码逻辑如下:

图片2.png

实现逻辑:根据不同逻辑分成三个组,每个组中的逻辑对于每个变量处理都是一样的。于是我也把case分成了三组,每组只验证一个,其他的变量只需检查一下参数是否写正确即可。十几条case变成了三条。

图片3.png
通过这样的精简,原本预计需要2小时验证的case,只需要30分钟就能完成了!

2、质量保证- 帮助补充case的体验:

深入测试不光可以精简case,还能帮助补充case,提高case覆盖度。

例如:我需要根据时间和价格区间取红包的值。

之前的case设计–只写了验证匹配规则是否正确:

图片4.png

但我在代码中发现:他对红包的值进行了正、负的判断。因为红包是一个三方提供的数据,如果红包为负数,有红包的优惠价会比没有红包时的价格更高。为了避免出现这种情况,代码中做了处理:红包值为负,就取原本的价格。

图片5.png
通过查看代码逻辑,我补充了关于红包值正、负判断的case:

图片6.png
通过这些实践,我逐渐认识到深入测试是可以帮助我们更快更稳进行测试的。

此时内心:深入测试效果初现,继续加油~
在这里插入图片描述

过程中的小插曲

在深入测试的实践过程中,我也走过偏路,那就是我过度重视case的覆盖度而在很多不重要的地方花费了大量精力。像抛异常后没有后续处理逻辑,仅记录error日志的代码,是不需要耗费大量精力去覆盖的。

像那些消息队列(MQ)的返回、幂等逻辑的处理,这些有逻辑处理的地方才是我们需要特别关注的。

同样,在深入测试的过程中,不能只关注代码实现而忽略业务逻辑。作为QA,业务能力是基本,深入测试是辅助,只关注代码而不关注业务逻辑,这样也会导致业务场景覆盖不全面。

此时内心:深入测试之路,任重而道远啊~
在这里插入图片描述

吸收、理解

每个需求都如此练习,我对深入测试有了更深的理解,并总结了自己的测试方法。

1、针对于改动小,回归范围大的需求。–可以通过diff代码来确定回归范围。例如:入参而底层逻辑没有变动,我就可以只验证入参是否获取正确即可,而无需进行全量回归测试。

2、匹配规则类、上传校验类的case。–他的特点是重复性高,可以根据代码实现看看有没有规律进行分类,每类验证一个,其余的只需验证参数是否正确。

3、异常场景想不到。–可以根据代码实现来补充场景。

慢慢地,某些功能在设计case时就会想到代码可能是怎么实现,设计case的时候,重复场景的case就可以缩减估时;哪些场景可能需要额外补充,都可以用做到心中有数。

此时内心:吸收理解,总结方法论,下次更轻松~
在这里插入图片描述

进阶

目前我已经掌握了深入测试入门技巧,我意识到需要给自己设立新的目标来进一步提升。

第一个目标,我希望可以像其他组员那样在提测前进行CR并发现问题。通过几个需求的积累,我现在也可以在提测前发现代码中的问题,让rd提前修复,节省了测试时间。

现在,我希望在技术评审时不再只是被动地参与其中,而是能够贡献出自己的见解。当然,业务方面的建议我是能够提出的,然而涉及到实现的合理性,就需要了解系统框架、了解代码位置才可以做到。想要达成目标,还需要更多的学习和提升。
此时内心:坚定信心,持续进步~
在这里插入图片描述

总结

回到最开始的疑问。

什么是深入测试?

是测试左移+灰盒测试概念的融合

测试左移,更早地发现问题和预防问题,降低问题的解决成本;

灰盒测试,基于代码实现精简和补充case, 精准定位问题,以便提升测试效率,提高覆盖度;

该怎么去做?

图片7.png
如何保持长期耐心呢?

首先我们要相信:深入测试一定是有帮助的。在开始的初期,要不断给自己设定目标,小进步带来成就感。如果遇到了困难要积极面对,与大家一起交流沟通,把困难当做成长的机会。

深入测试真的有用吗?

对工作:可以帮助我们更快、更准、更稳的交付。提前发现问题,精简用例,提高了测试用例覆盖度。

对个人:提升了代码能力和对系统实现的了解,突破了功能测试的瓶颈,测试更加有技巧性,更加深入。

投入回报比是怎样?

投入:学习代码的时间、看代码的时间

回报:一次投入,终身受益。对于实现方式差不多的case,可以利用之前的方式进行case精简,长期来看是节省时间的。

最后的结语

作为QA,具备扎实的业务能力是根本,但也需要了解代码和系统,结合系统实现去进行深入测试。刚开始可能会有些不适应,但慢慢地你会发现深入测试对我们有很大帮助,只是它需要长期持续的坚持。

成长是一个持续的过程,永远不要停止学习和进步的脚步。希望我的成长之路能给其他 QA 带来启发和鼓励。让我们一起努力,成为更优秀的测试工程师,为软件质量保驾护航。欢迎在评论区留言分享你的经验。

关于作者

郭荣、蔡京宁 采货侠测试工程师

> 转转研发中心及业界小伙伴们的技术学习交流平台,定期分享一线的实战经验及业界前沿的技术话题。

> 关注公众号「转转技术」(综合性)、「大转转FE」(专注于FE)、「转转QA」(专注于QA),更多干货实践,欢迎交流分享~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Bitmap 原理简述

之前写过一篇 bitmap 应用场景的文章https://blog.csdn.net/maray/article/details/136923316 本文介绍 bitmap 的原理: 下面有三张表:user_info_base, user_prefer, user_device,我们希望查询“喜欢电子产品并且使用iPhone的女性用户”&…

食用油5G智能工厂数字孪生可视化平台,推进食品制造业数字化转型

食用油5G智能工厂数字孪生可视化平台,推进食品制造业数字化转型。在食用油产业中,数字化转型已成为提升生产效率、优化供应链管理、确保产品质量和满足消费者需求的关键。食用油5G智能工厂数字孪生可视化平台作为这一转型的重要工具,正在推动…

数据结构之顺序表(java版)

目录 一.线性表 1.1线性表的概念 二.顺序表 2.1顺序表的概念 2.2顺序表的实现 1.顺序表的接口 1.2顺序表的功能实现 1.顺序表初始化 2.新增元素功能: 3.清空顺序表是否为空&&获取顺序表长度&&打印顺序表: 4.判断是否包含某个…

关于开设YOLOv8专栏及更新内容的一些说明

​ 专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,助力高效涨点!!! 专栏介绍 ⭐后期更新包含模块、卷积、检测头、损失等改进,目前已有70!现在入手仅$ 69.9,早入早发论文!⭐ ⭐…

【前端技术】HTML基础入门篇

1.1 HTML简介 ​ HTML(HyperText Markup Language:超文本标记语言)是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组…

uView u-parse 在nvue页面中无作用踩坑

问题起因: 在uni-app开发的app nvue页面中有需要回显渲染字符串形式的富文本内容 但使用v-html和uniapp的rich-text组件都无法起到作用,就想到了使用uView中u-parse进行尝试。 uView我是使用uniApp插件市场导入的方式将插件导入项目的uni_modules中 …

2024年教你学浪视频抓取#小浪助手

在2024年,学浪平台已经成为学习者们追逐知识、获取学习资源的热门平台之一。然而,尽管学习平台提供了丰富多样的学习内容,但有时候我们还是希望能够将这些学习资源下载下来,以便随时随地进行学习。那么,如何学习学浪视…

【layoutlmv3推理】无法识别的pdf使用ocr识别代码demo实例

目录 前情提要一、安装依赖1、直接安装的依赖2、需要编译的依赖1)Leptonica2)icu3)Tesseract 3、需要自行配置的依赖 二、模型下载三、更改transformers源码四、加载光学字符识别语言包五、运行代码 前情提要 在做pdf转文本时,发…

用于割草机器人,商用服务型机器人的陀螺仪

介绍一款EPSON推出适用于割草机器人,商用服务型机器人的高精度陀螺仪模组GGPM61,具体型号为GGPM61-C01。模组GGPM61是一款基于QMEMS传感器的低成本航向角输出的传感器模组,它可以输出加速度、角速度及姿态角等信息,为控制机器人运…

航空业微服务架构中台的构建与实践

随着航空业的快速发展,航空公司需要面对更加复杂的业务环境和客户需求。在这样的背景下,构建一个稳健、高效的微服务架构中台成为了航空公司的当务之急。本文将探讨航空业微服务架构中台的设计理念、关键技术以及实践经验,帮助航空公司构建具…

「Java开发指南」如何利用MyEclipse启用Spring DSL?(二)

本教程将引导您通过启用Spring DSL和使用Service Spring DSL抽象来引导Spring和Spring代码生成项目,本教程中学习的技能也可以很容易地应用于其他抽象。在本教程中,您将学习如何: 为Spring DSL初始化一个项目创建一个模型包创建一个服务和操…

面向多源异质遥感影像地物分类的自监督预训练方法

源自:测绘学报 作者:薛志祥, 余旭初, 刘景正, 杨国鹏, 刘冰, 余岸竹, 周嘉男, 金上鸿 摘 要 近年来,深度学习改变了遥感图像处理的方法。由于标注高质量样本费时费力,标签样本数量不足的现实问题会严重影响深层神经网络模型的性能。为解决这一突出矛盾…

将本地项目推送至gitlab仓库

1. gitlab上新建一个空白项目 gitlab上点击new project按钮,新建一个项目 新建空白项目 项目名称与本地新建项目名称相同,其余根据具体需要选择 2. 初始化本地仓库并commit项目 进入本地项目根目录下,右击 git bash here打开命令窗口 初始化…

MappedStatement解析流程

前言 之前写了一篇博文,介绍了mybatis的解析过程,其中mapper标签只演示了如何使用,这篇博文我们来探究mapper标签解析流程 源码解析 核心方法入口 引入mapper方式 使用相对于类路径的资源引用使用完全限定资源定位符(URL&…

“五之链”第十六期沙龙活动在呆马科技成功举办

2024年4月19日,由临沂呆码区块链网络科技有限公司(呆马科技)承办的第十六期“五之链”物流主题沙龙活动成功举办。此次活动邀请了政府相关部门、知名科研院所、物流企业等20余家单位参与,共同探讨物流数据要素流通与智能应用的发展…

新版ONENET(2024/4/24)通过view3.0可视化保姆级教程(一学就会)附效果图

⏩ 大家好哇!我是小光,想要成为系统架构师的嵌入式爱好者。 ⏩上一篇是STM32通过ESP8266连接最新版的ONENET,成功将数据上传之后,本篇文章使用ONENET的view3.0可视化对数据进行可视化做一个详细教程。 ⏩感谢你的阅读,…

AnaTraf网络流量分析仪:实时分析工具助您优化网络架构

导言: 在如今高度互联的数字时代,网络流量分析成为了企业和组织必备的工具之一。AnaTraf网络流量分析仪作为一款高性能的实时网络流量分析工具,不仅能够帮助用户进行全流量回溯分析、网络流量监控和网络性能分析,更可以快速排除网…

两天速通阿里

感觉这一周太梦幻了,就像一个梦,很不真实~~~ 感觉这个暑期,我的运气占了99成,实力只有百分之一 4.15上午 腾讯csig 腾讯云部门,面完秒进入复试状态 4.16下午 美团优选供应链部门,4.18上午发二面 4.17晚上 阿…

C#基础|属性Property之读写特性和经典总结

哈喽,你好,我是雷工。 本节学习属性特性——控制读写操作,以下为学习笔记。 01 只读属性 写法1:直接去掉set方法,可以在定义的时候初始化。 示例: public string CourseName{get;}“雷工笔记…

2024年学浪提取视频#小浪助手

2024年,学习视频已经成为人们获取知识和提升技能的重要途径,而学浪视频平台以其丰富多样的学习资源备受瞩目。然而,有时我们可能只需要其中的一小部分内容,而不想将整个视频都下载下来。在这个时候,小浪助手作为一款强…