为什么数据需要 QA 流程

news2024/11/15 17:40:02

当有人问我做什么工作时,我会说我是一名数据质量保证 (QA) 工程师。他们并不真正理解我的意思。“嗯,我做数据测试,”我试图解释,但常常无济于事。我有一些从事技术和软件开发的朋友,他们不太了解数据测试是什么,为什么它是必要的,或者它在编程世界中的位置。这是可以理解的,因为数据科学是一个全新的领域,即使是每天与数据打交道的人也必须对处理工作方式的任何变化保持开放的态度。

要了解数据测试的工作原理,必须首先了解什么是数据工程。然后就可以研究数据质量以及如何衡量它。

数据工程和分析

要了解数据测试从哪里开始,需要先知道数据是如何设计的,以及它与其他类型的编程(例如软件开发)的不同之处。让我们从什么是数据开始。数据是保存在业务工具中的某种聚合信息。该工具是电子表格还是数据库取决于业务,但创建数据的原始位置才是开始的地方。

源中的原始数据对任何人来说都没有多大用处,这就是数据工程的用处。在数据工程中,将获取数据并使其有用的过程称为提取、转换、加载或 ETL。从源中提取数据后,可以根据业务需求对其进行转换并加载到业务分析工具中。业务分析师和财务分析师有机会使用数据集来创建报告、图表和其他所需的指标来为业务决策提供信息。

T 代表转换,转换可能是数据工程过程中最关键的点。这里以拥有多家商店的零售企业为例。假设有几家老店使用过时的POS系统,而新店则运行更现代的系统。每种类型的 POS 系统中的交易记录和存储方式都不同,存储在不同的数据库中。如果企业主想要查看每周的销售报告,则需要汇总两个系统的交易。

为此,必须有一个转换过程,可以从每个 POS 系统获取交易信息,并以有意义的方式将它们整合在一起。最重要的是,有关交易数据及其与销售报告的关系的问题很快就会出现。这里问一个问题:每个系统中的退货与实际销售如何计算?

接下来更进一步地讨论这个例子。原来的 POS 系统将所有内容存储在与新 POS 系统的数据库不兼容的数据库中,因此无法简单地加入信息。现在,转换阶段必须包括某种数据转换,然后才能将事务整合在一起。最终,企业主只是想在报告中接收汇总的销售信息,这在一开始听起来很简单。

对数据(销售报告)的需求以及将其转换为有意义的内容所需的技术工作(将不同的系统组合在一起)是定义数据集含义的两个关键要素。在例子中,寻找“销售”的含义,然后需要一份关于它的报告,这种模糊且主观的业务定义会让测试数据变得非常棘手。

测量数据质量

现在已经了解了数据和数据工程是什么样子。如果没有某种基准来衡量,就无法定义数据质量,并且通常在测试过程中,基准是各种可报告的指标。那么如何在数据世界中找到可衡量的东西来验证产品呢?

数据质量的六个维度

当前数据验证的行业标准是使用数据质量六个维度的某种形式来测试数据模型、管道、架构等。这些数据质量指标最初是在数据管理协会 (DAMA) 英国分会于 2013 年撰写的名为“数据质量评估的六个主要维度”的数据质量论文中定义的。这六个维度是一个得到广泛认可的系列 用于检查任何给定数据集质量的验证指标。他们帮助数据质量工程师和数据工程师创建可以改进的可衡量的验证指标。

这六个维度是:

  • • 一致性:如果数据跨多个数据库、系统、表和报告进行复制,则数据应该保持不变,从而保持一致。例如,无论在哪里找到客户当前的邮政编码,都应始终为相同的五位数。

  • • 准确性:也许是最模糊的数据质量指标,准确性是相关数据代表现实世界事件或对象的程度。假设表中有一列代表所有客户交易的总美元金额,另一列代表交易总金额。这些值中的每一个都应该能够清楚地追溯到来源,从而可以证明总数对于发生的现实世界交易是准确的。

  • • 有效性:在数据集中的任何给定字段中,可能存在某种数据类型要求。永远不会期望在州字段中看到数字,其中字段限制是美国州(例如 NY、CA 或 IL)的两个字母表示形式。如果该字段中存在整数,则会破坏数据的有效性。

  • • 唯一性:对于数据库中预期的每条唯一记录,应该有一个字段来唯一标识每条给定的记录,例如 在线购物数据库的客户帐号。该帐号的唯一性对于识别单个客户帐户的重复交易可能至关重要。

  • • 完整性:如果缺少任何关键字段,则数据不完整。也许在业务交易记录中,每笔交易都应该有一个时间戳。如果该时间戳丢失,则交易数据集不完整。

  • • 及时性:对每份报告接收新数据的期望是什么?数据的及时性是由业务需求定义的。例如,如果需要每天刷新一个数据集,那么该数据集的及时性测试指标也是每天刷新。

对于任何给定的数据集,数据测试和验证应涵盖每个维度。特别是自动化单元测试,但我们稍后会讨论。

工程过程中的数据测试

现在我们了解了数据质量的六个维度、数据工程的一般工作方式以及数据需求的业务定义的至关重要性,接下来的任务就是将所有这些内容整合在一起以创建测试计划。数据质量工程师是数据工程流程的核心;他们支持工程师的技术工作以提供所需的数据集,并与业务分析师合作验证该数据。

数据 QA 测试的类型

在软件测试领域,有几种常见类型的有用质量测试,可以识别错误、确认工作组件并调查软件的预期行为。这些类型的测试在数据测试领域仍然非常有用,因此如果对这些测试类别有所了解,那么你已经了解了有关数据测试的一些知识。

这些包括但不限于:

  • • 单元测试:嵌入数据建模代码中的小型测试,用于识别基本功能所需的关键代码块内的小断点。例如,也许有一列数据中不应存在 NULL 值。快速单元测试可以检查字段中是否存在 NULL 并确保不存在 NULL。

  • • 集成测试:这些测试寻找程序或数据管道的全部部分而不是其中的一部分来工作。在数据管道示例中,集成测试将检查整个 ETL 流程是否可以从头到尾成功执行。

  • • 冒烟测试:快速测试用于有效检查数据管道中最重要且通常常见的部分是否存在故障。该术语起源于计算机硬件测试,当时第一个初始测试是将机器插入电源并查看是否有任何机械部件产生烟雾。如果没有,则硬件通过测试。然而,如果有烟雾……正如你可以想象的那样,他们会关闭机器并重试。

  • • 回归测试:用于检查程序核心操作的一系列测试,称为“回归”,因为测试套件着眼于代码中永远不应该更改的标准功能部分。通常是在产品发布之前使用的主要套件。就数据而言,回归通常涵盖关键任务转换。

  • • 功能测试:用于检查在当前发布的操作之上添加到程序中的任何新组件(“功能”)的测试。如果新功能对于生产版本至关重要并且应该保持不变,那么这些功能就会添加到回归测试套件中。

这些都是许多软件开发团队定期使用的常见、有用的测试类型。它们可以并且被应用于数据测试。

单元测试作为数据验证的秘密武器

与几乎每个 QA 角色一样,数据 QA 工程应该为工程团队的工作增加价值,并以有用的方式提供反馈。数据质量保证几乎总是从手动测试开始,特别是在拥有遗留数据库和数据仓库技术的企业中。数据 QA 工程师的笔记本电脑上可能有数百个过多的 SQL 脚本。但手动测试仍然需要有效检查数据质量的六个维度,而不成为生产发布的瓶颈。综上所述,数据测试自动化是完全可能的,尤其是在单元测试和断言方面。

根据我的经验,数据 QA 工程师最重要的角色之一是宣传数据管道中内置的单元测试。当数据工程师在数据转换开发期间实施时,单元测试可以在数据 QA 工程师查看数据集之前捕获数据错误。通常,数据工程师不习惯单元测试,因为这更多的是一种软件开发实践,但我并不是唯一一个认为数据工程在文化上需要更多单元测试的人。数据构建工具(dbt)等流行的开源框架具有内置的单元测试,可以防止完整性、唯一性和及时性方面的问题。其他开源验证工具(例如 Great Expectations)在数据管道之上分层了一套数据断言单元测试。

自动化

自动化是数据质量领域的一个关键原则,也是数据质量六个维度的执行。例如,结合使用单元测试和数据完整性测试,数据质量工程师可以编写一个小型、快速的自动化测试来检查关键字段中的任何 NULL 值。数据管道中以各种方式检查关键数据质量维度的自动化测试越多,数据工程师要做的工作就越少。

如果数据工程师不用生成表并每次使用 SQL 和数据库连接查看它,而是拥有一个内置的回归测试套件来为她运行日常检查,会怎么样?这些是数据质量工程师所做的有用的自动化基础和测试工程。

总结

数据测试是一个每天都在增长和变化的独特领域。没有太多被广泛接受的数据质量标准,甚至像数据质量的六个维度这样的标准也存在争议。机器学习和人工智能 (AI) 等更多数据科学领域正在不断发展,并创造了验证数据准确性、一致性、完整性等的新方法。

我们所知道的是,目前的数据质量在很大程度上取决于所请求的数据集的主观含义以及数据管道末端人员的需求。这使得很难找到正确的基准来测试和提高数据质量,但仍然可以利用对有用测试类型和数据质量维度的了解来验证每天使用的数据。随着对如何使用数据的理解不断发展,数据质量指标和对数据测试的理解也会不断发展。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

[LLM 学习笔记] Transformer 基础

Transformer 基础 Transformer 模型架构 主要组成: Encoder, Decoder, Generator. Encoder (编码器) 由 N N N 层结构相同(参数不同)的 EncoderLayer 网络组成. In : [ b a t c h _ s z , s e q _ l e n , d m o d e l ] \textbf{In}: [batch\_sz, seq\_len, d_{model}] I…

【WorldView系列卫星】

WorldView系列卫星 WorldView系列卫星是美国DigitalGlobe公司推出的一系列先进商业遥感卫星,旨在提供高分辨率的地球成像服务。该系列卫星以其卓越的成像能力,如高分辨率、快速重访时间和宽幅扫描能力,引领了地球观测技术的新标准。以下是对…

LCD1602

LCD1602 是一种工业字符型液晶显示屏,能够同时显示 16x2 即 32 个字符。 LCD的显示控制 通过向 LCD1602 发送指令和数据来控制其显示内容。指令包括清屏、设置光标位置、显示模式等;数据则是要显示的字符的 ASCII 码。LCD1602 内部有一个控制器&#x…

el-form动态标题和输入值,并且最后一个输入框不校验

需求:给了固定的label,叫xx单位,要输入单位的信息,但是属性名称都一样的,UI画图也是表单的形式,所以改为动态添加的形式,实现方式也很简单,循环就完事了,连着表单校验也动…

ChatGLM-6B:部署指南与实战应用全解析

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 SD3ComfyUI文生图部署步骤DAMODEL-ChatGLM-6B 服务端部署1.1、实例创建1.2、模型准备1.3、模型启动 SD3ComfyUI文生图部署步骤 Chat…

centos系统配置本地镜像源

今天在安装docker相关的依赖包时,在centos系统上,发现很多原本的镜像地址,拉取rpm依赖包失败,因为我的centos系统,安装的时候使用的是最小化安装,很多rpm包没有安装好,所以在后续安装一些常规命…

电脑共享同屏的几种方法分享

实时共享屏幕的方法多种多样,适用于不同的设备和场景。以下是几种常见的实时共享屏幕的方法: 1. 使用无线投屏技术 原理:无线投屏技术允许设备通过Wi-Fi网络或其他无线连接方式,将屏幕内容实时投射到另一台设备上。 操作步骤&a…

如何分析开源项目

如何分析开源项目 教程:【狂神说Java】手把手教你如何分析开源项目_哔哩哔哩_bilibili 一.开源项目下载 1.下载 因为GitHub下载太慢了,下载完毕进行解压。 后端:eladmin: eladmin-jpa 版本:项目基于 Spring Boot 2.1.0 、 Jpa、…

如何在openEuler上安装和配置openGauss数据库

本文将详细介绍如何在openEuler 22.03 LTS SP1上安装和配置openGauss数据库,包括数据库的启动、停止、远程连接配置等关键步骤。 1、安装 使用OpenEuler-22.03-LTS-SP1-x64版本的系统,通过命令行安装openGauss数据库。 1.1、确保系统软件包索引是最新…

Anaconda安装保姆级教程

1.下载Anaconda 可以在官网下载地址链接: Anaconda官网 推荐:清华大学镜像 2.安装 推荐,允许其他程序,如VSCode、PyCham等自动检测anaconda作为系统上的主Python。 3.配置环境变量 D:\Anaconda3为安装路径 D:\Anaconda3 D:\Anaconda3\S…

HT6819 3.3W带数字音量控制/防削顶低EMI立体声D类音频功率放大器

特点 降低了内阻和热耗的EDMA专利技术,极大提升了 输出功率和产品可靠性 Po3.3 W(VDD5.0V,RL4Ω,THDN10%) Po1.7 W(VDD3.6V,RL4Ω,THDN10%) 优异的全带宽EMI抑制性能 a)独创的主动边沿控制专利(AROC,Active edge Ringing and Overshoot Control circuitr…

monaco-editor基本使用

前言 公司项目需要代码编辑器,多方参考之后用了monaco-editor。 一、monaco-editor是什么? Monaco Editor 是微软开源的基于 VS Code 的代码编辑器,运行在浏览器环境中。 二、使用步骤 1.npm下载插件 //我下载的版本 npm i monaco-edit…

Java_Day05学习

Object类被子类经常重写的方法 方法说明toString()返回当前对象本身的有关信息,按字符串对象返回equals()比较两个对象是否是同一个对象,是则返回****truehashCode()返回该对象的哈希代码值getClass()获取当前对象所属的类信息,返回Class对象…

使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一个轻量级、简单、易用的 Java 日志系统

要使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一个轻量级、简单、易用的 Java 日志系统,您可以按以下步骤进行。这个系统将利用 Loki 作为日志存储和聚合系统,Loki4j 作为 Java 的日志插件,Grafana 用于日志的可视化。 1.工具介绍&…

中兴数通产品厉害了,获得CC EAL3+认证!

不知道朋友们最近听说没有,中兴的数通产品是真争气,有25款成功通过了国际信息技术安全评估通用准则CC的EAL 3级别认证。中兴一直是通讯行业的领先企业,这次CC EAL 3级别认证覆盖了多款主流设备型号,证明了它在网络安全领域的实力确…

TraceId在线程池及@Async异步线程中如何传递

何时使用线程池 提起线程池相信大家都不陌生,什么情况下会考虑使用线程池呢?我总结了一下大概是这么几种情况 第一种情况:程序中有任务需要异步执行。这样不可避免的要分配线程去执行,如果这个异步任务执行的频次很低&#xff0…

模拟实现 string 类的一些常用函数

目录 构造函数 析构函数 拷贝构造 赋值重载 迭代器( begin() 和 end() ) 运算符重载流插入( operator << ( ) ) size() capacity() 运算符重载operator[ ] clear() reserve ( ) push_back ( ) append ( ) 运算符重载 operator ( ) insert ( ) erase ( )…

IO相关流

IO流 一、C语言的输入与输出1、介绍2、输入输出缓冲区&#xff08;1&#xff09;介绍&#xff08;2&#xff09;示意图 二、流1、介绍2、主要特点 三、CIO流1、介绍2、示意图 四、iostream1、介绍2、基本概念3、注意 五、类型转换1、operator bool&#xff08;1&#xff09;介绍…

计算机毕业设计非遗项目网站 登录注册搜索 评论留言资讯 前后台管理/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序

遗项目网站需求&#xff0c;以下是一个基于Spring Boot、Java Web、J2EE技术栈&#xff0c;使用MySQL数据库&#xff0c;并结合Vue实现前后端分离的简要设计方案&#xff1a; 系统功能概述 ‌用户登录与注册‌&#xff1a;实现用户的注册、登录功能&#xff0c;确保用户信息的…

【Python】PyCharm: 强大的 Python 开发环境

⭕️宇宙起点 &#x1f4e2; 引言&#x1f3ac; 什么是 PyCharm&#xff1f;&#x1f528; PyCharm 的核心特性1. 智能代码编辑2. 调试和测试3. 项目和代码结构导航4. 集成 AI 助手5. 远程开发6. 集成数据库7. 科学工具8. 版本控制集成9. Web 开发 &#x1f4e6; 安装 PyCharm&…