告别背锅侠!29个空场景及测试方法的实战指南

想必大家在日常的测试工作中,经常会碰到以下这些场景:

场景一

测试人员:有一个数据为空的场景还没有验证。

研发人员:这个场景不会出现,因为没有删除逻辑。

场景二

研发人员:本次需求时间紧任务重!这里肯定不会出现数据为空的情况,异常处理来不及加,先不加了或者忘记加了。

场景三

测试人员:逻辑删除了所有的测试数据,认为测试到了数据为空的情况。但实际上,底层数据逻辑会查询所有数据,然后在逻辑层根据“是否被删除”字段做处理,未能真正验证空数据的异常情况。

...等等

这些场景问题引发了一个思考"不存在的场景真的不存在吗?",今天我们就从案例出发剖析空场景的重要性,同时给大家分享29个常见空场景及测试方法!希望对大家有所启发帮助!

空场景的重要性

以下是京东开发者分析了过去十年中因空指针异常(NullPointerException, NPE)而导致的多起著名互联网公司事故:

例如:

·2016 年 API 故障,因空指针异常导致部分第三方应用无法正常使用,影响了许多依赖 Twitter 数据的应用程序;

·2017 年消息丢失,因空指针异常导致部分用户的消息丢失或无法发送;

· 2018 年乘车系统中断,因空指针异常导致乘车系统中断,用户无法呼叫车辆;

·2019 年“双 11”购物节故障,因空指针异常导致系统崩溃,部分用户在支付环节遇到问题;

·2020 年购物车故障,因空指针异常导致用户在结账时出现错误,无法完成购买;

· 2021 年支付系统故障,因一处空指针异常在高峰期出现支付系统故障,用户无法进行支付操作;

这些比较大的负面影响,导致用户满意度大幅下降,公司盈利损失,同时获客成本大幅提高。

这些案例警示我们,预防和解决空指针异常问题不仅是技术层面的挑战,更是关乎公司生存与发展的重要任务。

29个空场景及测试方法汇总

上面我们了解了空场景的重要性,那平常的工作中又该如何预防和干预呢?保持对空场景的敏感度,多记录多总结是必不可少的。

下面就给大家分享汇总的29个空场景及测试方法,帮助大家从此告别背锅侠!

01:未初始化的对象

场景:尝试调用未初始化的对象方法。

测试方法:确保所有对象在使用前都已正确初始化。

02:空返回值

场景:方法返回 null,而不是预期的对象。

测试方法:对所有方法的返回值进行 null 检查,特别是在接收外部数据或 API 调用的地方。

03:集合中的空元素

场景:集合(如 List、Set、Map)中包含 null 元素。

测试方法:在操作集合时添加 null 检查,避免对 null 元素进行操作。

04:外部库或 API 调用

场景:调用外部库或 API 时返回 null。

测试方法:对所有外部调用进行 null 检查,确保返回值不为空。

05:对象属性未初始化

场景:访问对象的属性时,属性未初始化。

测试方法:在对象初始化时确保所有属性都已赋值,或添加 null 检查。

06:依赖注入失败

场景:依赖注入框架未能正确注入依赖对象。

测试方法:在使用依赖对象前进行 null 检查,确保依赖已正确注入。

07:多线程环境

场景:多线程环境下的竞争条件导致对象未初始化。

测试方法:使用同步机制确保对象在多线程环境中安全初始化。

08:用户输入

场景:用户输入为空或非法值。

测试方法:对用户输入进行验证和检查,确保输入值不为空。

09:数据库查询结果

场景:数据库查询返回 null 结果。

测试方法:对所有数据库查询结果进行 null 检查,避免操作 null 结果。

10:配置文件或环境变量

场景:配置文件或环境变量中缺失关键配置。

测试方法:加载配置时进行 null 检查,确保所有关键配置已正确加载。

11:文件读取

场景:文件读取操作返回 null(例如文件不存在)。

测试方法:在读取文件前检查文件是否存在,确保文件读取操作返回非 null 值。

12:Web 请求参数

场景:Web 请求中缺少必需的参数。

测试方法:对所有 Web 请求参数进行验证,确保所有必需参数均已提供且不为空。

13:缓存失效

场景:缓存失效或未命中时返回 null。

测试方法:在使用缓存结果前进行 null 检查,确保缓存命中返回非 null 值。

14:序列化/反序列化

场景:对象序列化或反序列化时出现 null 值。

测试方法:在序列化和反序列化操作时进行 null 检查,确保过程正确完成。

15:后台服务返回值

场景:调用后台服务接口时,返回 null。

测试方法:对所有后台服务调用的返回值进行 null 检查,确保返回值不为空。

16:事件驱动系统

场景:事件处理过程中,事件对象为 null。

测试方法:在事件处理代码中检查事件对象,确保其不为空。

17:迭代器

场景:使用迭代器遍历集合时,迭代器的 next()方法返回 null。

测试方法:在遍历集合时检查每个元素,确保其不为空。

18:回调函数

场景:回调函数的参数为 null。

测试方法:在回调函数中添加参数检查,确保传递的参数不为空。

19:配置对象

场景:加载配置对象时,某些配置属性为 null。

测试方法:在使用配置对象前,检查其所有属性,确保不为空。

20:定时任务

场景:定时任务执行时,所需的依赖对象为 null。

测试方法:在定时任务执行前检查所有依赖对象,确保其已初始化。

21:动态加载类

场景:通过反射或动态加载类时,类实例为 null。

测试方法:在动态加载类后检查实例对象,确保其不为空。

22:分布式系统

场景:分布式系统中,远程调用返回 null。

测试方法:对所有远程调用的返回值进行 null 检查,确保返回值不为空。

23:日志记录

场景:日志记录过程中,日志对象为 null。

测试方法:在记录日志前检查日志对象,确保其不为空。

24:错误处理

场景:错误处理过程中,错误信息对象为 null。

测试方法:在处理错误时检查错误信息对象,确保其不为空。

25:依赖链

场景:多个依赖对象中的一个为 null,导致整个依赖链失效。

测试方法:在使用依赖链中的每个对象前进行 null 检查,确保所有依赖对象都已正确初始化。

26:多语言支持

场景:多语言支持时,语言资源对象为 null。

测试方法:在加载多语言资源时检查资源对象,确保其不为空。

27:插件机制

场景:插件机制中,加载的插件对象为 null。

测试方法:在加载插件后检查插件对象,确保其不为空。

28:缓存机制

场景:缓存机制中,缓存对象为 null。

测试方法:在使用缓存对象前检查其是否已正确加载,确保不为空。

29:API 网关

场景:通过 API 网关调用服务时,返回值为 null。

测试方法:在 API 网关处理请求时检查返回值,确保不为空。

看完这些空场景及测试方法,那么:

#1.你觉得因空场景导致线上出现问题,到底是谁的责任?测试人员如何杜绝背锅?

#2.你工作中都遇到过哪些印象深刻的空场景情况?

#3.你们公司针对测试部门有BUG数量的奖励计划吗?针对空场景未测试导致线上出现BUG一般都是如何处理的?

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

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

相关文章

蓝桥杯模块二:数码管的静态、动态实现

模块二训练 1.静态显示 一、数码管电路图 二、电路分析 1.数码管电路分析 端口分公共端和段码,先用公共端控制一个数码管,再用段码实现显示数字。共阳数码管公共端输入高电平,段码输入低电平实现点亮 2.锁存器 Y7控制段码,Y6控…

【含文档】基于Springboot+微信小程序 的中心医院用户移动端(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

全志科技发布T536高性能智慧工业芯片,飞凌嵌入式率先推出配套核心板

2024年9月24日下午,全志科技在中国国际工业博览会上成功举办了其最新产品——T536高性能智慧工业芯片的全球首发发布会。这款芯片采用创新的4核Cortex-A55与RISC-V混合架构,主频分别达到1.6GHz和600MHz,并集成了2TOPS算力的NPU,吸…

生信初学者教程(四):软件

文章目录 RRstudioLinux系统其他软件本书是使用R语言编写的教程,用户需要下载R和RStudio软件用于进行分析。 版权归生信学习者所有,禁止商业和盗版使用,侵权必究 R R语言是一种免费的统计计算和图形化编程语言,是一种用于数据分析和统计建模的强大工具。它具有丰富的统计…

耦合微带线单元的网络参量和等效电路公式推导

文档下载链接:耦合微带线单元的网络参量和等效电路资源-CSDN文库https://download.csdn.net/download/lu2289504634/89583027笔者水平有限,错误之处欢迎留言! 一、耦合微带线奇偶模详细推导过程 二、2,4端口开路 三、2端口短路、3端口开路 四…

智能密码、指纹锁语音芯片ic方案 可存放40s语音内容 NVD语音芯片

随着科技的飞速发展,智能家居安全领域迎来了前所未有的变革。智能密码与指纹锁作为现代家庭安全防护的重要一环,其背后的语音芯片IC开发更是这一变革中的关键技术突破。 智能密码、指纹锁语音芯片ic方案 选型与简介: NVD语音芯片是一款低成…

quiz: python网络爬虫之规则1

下面答错了: B c 8A, 9A

STM32F407之超声波模块使用

#include "sys.h" #include "delay.h" #include "usart.h" #include "includes.h" #include "HC_SR04.h"int main() {OS_ERR err;//错误uart_init(9600);//串口初始化//超声波初始化HC_SR04();//OS初始化 他是第一个运行的函…

【大数据】数据中台怎么样助力企业创新和客户实践

在当今数字化时代,数据成为了企业竞争的关键因素。企业拥有大量的数据,但如何高效地利用这些数据,实现创新和提升客户体验,成为了一项重要的挑战。数据中台作为一种重要的数据管理和分析工具,发挥着关键的作用。本文将…

大数据毕业设计选题推荐-食品销售数据分析系统-Hive-Hadoop-Spark

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

数集相等定义凸显“R各元x的对应x+1的全体=R”是几百年重大错误

黄小宁 变量x所取各数也均由x代表,x代表其变域(x所有能取的数组成的集)内任一元。设集A{x}表A各元均由x代表,{x}中变量x的变域是A。其余类推。因各数x可是数轴上点的坐标所以x∈R变换…

AWS Network Firewall -NAT网关配置只应许白名单域名出入站

1. 创建防火墙 选择防火墙的归属子网(选择公有子网) 2. 创建规则白名单域名放行 3. 绑定相关规则 继续往下拉 绑定非托管规则 4. 配置网络路由 相关规则 参考图 解释 防火墙的归属公有子网路由表规则机器实例的规则子网路由表规则nat网管路…

springboot实战学习(7)(JWT令牌的组成、JWT令牌的使用与验证)

接着上篇博客的学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验的基础上,基本完成用户模块的登录接口的主逻辑以及提到了问题:"用户未登录,需要通过登录,获取到令牌进行登录认证,…

Linux 安装redis主从模式+哨兵模式3台节点

下载 https://download.redis.io/releases/ 解压 tar -zxvf redis-7.2.4.tar.gz -C /opt chmod 777 -R /opt/redis-7.2.4/安装 # 编译 make # 安装, 一定是大写PREFIX make PREFIX/opt/redis-7.2.4/redis/ install配置为系统服务 cd /etc/systemd/system/主服务…

一文上手SpringSecuirty【六】

自定义认证流程完成之后,前端收到了后端生成的token,那么在之后的所有请求当前,都必须携带token.作为服务器来说,得验证这个token,是否合法. 一、验证token是否合法 1.1 OncePerRequestFilter过滤器 OncePerRequestFilter是 Spring 框架中的一个过滤器,用于确保在…

基于nodejs+vue的校园二手物品交易系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

Rust 语言开发 ESP32C3 并在 Wokwi 电子模拟器上运行(esp-hal 非标准库、LCD1602、I2C)

文章目录 esp-rs 简介GithubRust 包仓库Wokwi 电子模拟器开发环境Rust 环境esp-rs 环境创建 ESP32C3 项目项目结构编译项目命令运行模拟器ESP32C3 烧录 esp-rs 简介 esp-rs 是一个专注于为 Espressif 系列芯片(如 ESP32、ESP32-S2、ESP32-C3 等)提供 Ru…

如何在 Three.js 场景中创建可点击展开的标签

在复杂的可视化场景中,经常需要为 3D 对象添加可交互的标签,以便用户点击时可以查看详细信息。这篇文章将通过一个简单的案例展示,如何在 Three.js 中为对象创建可点击的标签,点击标签可以展开详细信息,再次点击可以关…

论文复现:考虑电网交互的风电、光伏与电池互补调度运行(MATLAB-Yalmip-Cplex全代码)

论文复现:考虑电网交互的风电、光伏与电池储能互补调度运行(MATLAB-Yalmip-Cplex全代码) 针对风电、光伏与电化学储能电站互补运行的问题,已有大量通过启发式算法寻优的案例,但工程上更注重实用性和普适性。Yalmip工具箱则是一种基于MATLAB平台的优化软件工具箱,被广泛应用…

基于单片机语音智能导盲仪仿真设计

文章目录 前言资料获取设计介绍设计程序具体实现截图设计获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…