告别背锅侠!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.xdnf.cn/news/1549609.html

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

相关文章

linux项目_c语言:Makefile编写、动态库生成、添加动态库路径

一直想搞懂Linux中Makefile是怎么管理项目的&#xff0c;知识积累到一定程度后&#xff0c;我就做了一个自己的缩小项目去把剩下的细节搞清楚 代码&#xff1a; Service.c: #include <stdio.h> #include "lib_sevr.h" int main(){printf("输入a, b的值…

【Linux网络】详解TCP协议(3)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux网络 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 TCP的流量控制和滑动窗口 的相关内容。 如果看到最后您觉得这篇…

MySQL - 单表查询

DQL (数据查询语言)是用来查询数据库表中的记录的操作。在实际的业务系统中&#xff0c;查询操作的频率远远高于增删改。常见的查询操作包括条件查询、排序、分组等。 1. DQL 语法 SELECT 字段列表 FROM 表名列表 [WHERE 条件列表] [GROUP BY 分组字段] [HAVING 分组后条件]…

57 长短期记忆网络(LSTM)_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录长短期记忆网络&#xff08;LSTM&#xff09;门控记忆元输入门、忘记门和输出门候选记忆元 (相当于RNN中计算 H t H_t Ht​)记忆元隐状态 从零开始实现初始化模型参数定义模型训练和预测 简洁实现小结练习 长短期记忆网络&#xff08;LSTM&a…

QT基础 制作简单登录界面

作业&#xff1a; 1、创建一个新项目&#xff0c;将默认提供的程序都注释上意义 01zy.pro代码 QT core gui # QT表示要引入的类库 core&#xff1a;核心库例如IO操作在该库中 gui&#xff1a;图形化界面库 # 如果要使用其他类库中的相关函数&#xff0c;则需要加对…

【深度学习】—线性回归 线性回归的基本元素 线性模型 损失函数 解析解 随机梯度下降

【深度学习】— 线性回归线性回归的基本元素 线性模型损失函数解析解随机梯度下降小批量随机梯度下降梯度下降算法的详细步骤解释公式 线性回归 回归&#xff08;regression&#xff09;是能为⼀个或多个⾃变量与因变量之间关系建模的⼀类⽅法。在⾃然科学和社会科学领域&…

正点原子——DS100示波器操作手册

目录 基础按键&#xff1a; 快捷键 主界面&#xff1a; 垂直设置&#xff1a; 通道设置&#xff1a; 探头比列&#xff1a; 垂直档位&#xff1a; 垂直偏移&#xff1a; 幅度单位&#xff1a; 水平设置&#xff1a; 触发方式&#xff1a; 测量和运算: 光标测量&am…

如何用好通义灵码企业知识库问答能力?

通义灵码企业版&#xff1a;通义灵码企业标准版快速入门_智能编码助手_AI编程_智能编码助手通义灵码(Lingma)-阿里云帮助中心 通义灵码提供了基于企业知识库的问答检索增强的能力&#xff0c;在开发者使用通义灵码 IDE 插件时&#xff0c;可以结合企业知识库内上传的文档、文件…

《深度学习》【项目】OpenCV 发票识别 透视变换、轮廓检测解析及案例解析

目录 一、透视变换 1、什么是透视变换 2、操作步骤 1&#xff09;选择透视变换的源图像和目标图像 2&#xff09;确定透视变换所需的关键点 3&#xff09;计算透视变换的变换矩阵 4&#xff09;对源图像进行透视变换 5&#xff09;对变换后的图像进行插值处理 二、轮廓检测…

YOLOv8改进,YOLOv8主干网络替换为GhostNetV3(2024年华为提出的轻量化架构,全网首发),助力涨点

摘要 GhostNetV3 是由华为诺亚方舟实验室的团队发布的,于2024年4月发布。 摘要:紧凑型神经网络专为边缘设备上的应用设计,具备更快的推理速度,但性能相对适中。然而,紧凑型模型的训练策略目前借鉴自传统模型,这忽略了它们在模型容量上的差异,可能阻碍紧凑型模型的性能…

【d53】【Java】【力扣】24.两两交换链表中的节点

思路 定义一个指针cur, 先指向头节点&#xff0c; 1.判断后一个节点是否为空&#xff0c;不为空则交换值&#xff0c; 2.指针向后走两次 代码 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*…

Java_集合_双列集合_Map

第一章Map集合 Map是双列集合顶级接口 什么叫做双列集合:一个元素有两部分构成:key和value -> 键值对 1.1.HashMap 常用方法: V put(K key, V value) -> 添加元素,返回的是被替换的value值 V remove(Object key) ->根据key删除键值对,返回的是被删除的value…

Codeforces Round 975 (Div. 1) D. Max Plus Min Plus Size(思维题 并查集/动态dp 线段树维护状态合并)

题目 思路来源 hhoppitree代码 官方题解 题解 注意到最大值一定会被取到&#xff0c; 对于最小值固定的话&#xff0c;对于1 2 3 4 5的连续段&#xff0c;要么贪心地取1 3 5&#xff0c;要么取2 4 如果最大值被包含在1 3 5里显然取1 3 5&#xff0c;否则换成2 4一定能取到…

亚马逊爆款三明治封口器发明专利维权,恐涉及大量卖家,速查

案件基本情况&#xff1a;起诉时间&#xff1a;2024-9-18案件号&#xff1a;2024-cv-08606原告&#xff1a;Jetteo, LLC原告律所&#xff1a;AVEK IP, LLC起诉地&#xff1a;伊利诺伊州北部法院涉案商标/版权&#xff1a;原告品牌简介&#xff1a;Jetteo&#xff0c;LLC&#x…

蜂鸟bebirdt15、西圣find、泰视朗可视挖耳勺好用吗?测评数据对比看这里

可视挖耳勺在当下已经被广泛使用&#xff0c;不过对于新手来说&#xff0c;选择一款优质产品却并不容易。蜂鸟t15、西圣find、泰视朗可视挖耳勺好用吗&#xff1f;作为一个测评博主&#xff0c;近期有不少用户问我这个问题。 根据目前市场上可视挖耳勺的品牌情况来看&#xff0…

A股突破3000,连续大涨,公司国庆假放10天

关注▲洋洋科创星球▲一起成长&#xff01; 庆祝A股突破3000&#xff0c;连续大涨&#xff0c;也不知道老板抽了什么风&#xff0c;公司今天开始放国庆假了&#xff0c;连休10天&#xff0c;哈哈哈哈哈哈。 27号开始放国庆假&#xff0c;连休10&#xff0c;刺激。 中秋国庆这一…

【C++】继承,菱形继承,虚拟继承,组合详解

目录 1. 继承概念与定义 1.1 概念 1.2 定义 2. 父类与子类的赋值规则 3. 继承的作用域 4. 子类的默认成员函数 5. 继承与友元 6. 继承与静态成员 7. 菱形继承 7.1 继承关系 7.2 菱形继承的问题 7.3 虚拟继承 8. 继承与组合 1. 继承概念与定义 1.1 概念 1. 继承&a…

论文速递 | Management Science 8月文章合集

编者按 在本系列文章中&#xff0c;我们对顶刊《Management Science》于8月份发布文章中进行了精选&#xff08;共9篇&#xff09;&#xff0c;并总结其基本信息&#xff0c;旨在帮助读者快速洞察行业最新动态。 推荐文章1 ● 题目&#xff1a;Optimal Mechanism Design with …

红队信息搜集扫描使用

红队信息搜集扫描使用 红队行动中需要工具化一些常用攻击&#xff0c;所以学习一下 nmap 等的常规使用&#xff0c;提供灵感 nmap 帮助 nmap --help主机扫描 Scan and no port scan&#xff08;扫描但不端口扫描&#xff09;。-sn 在老版本中是 -sP&#xff0c;P的含义是 P…

基于SPI协议的Flash驱动控制

1、理论知识 SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外围设备接口&#xff09;通讯协议&#xff0c;是Motorola公司提出的一种同步串行接口技术&#xff0c;是一种高速、全双工、同步通信总线&#xff0c;在芯片中只占用四根管脚用来控制及数据传输&#…