(一)脏数据的产生

脏数据(Dirty data),也叫坏数据(Bad data),通常是指跟期待的数据不一样、会影响系统正常行为的数据。
生产环境下的缺陷分析流程是这样的:
调查分析生产环境缺陷,到最后定位是数据问题的时候,总是让人浑身轻松… 于是,“脏数据”就跟测试的“随机挂”一样,成为了光荣的“背锅侠”!
脏数据 ≠ 代码问题,真的是这样吗?先来深入了解一下脏数据。
脏数据是怎么回事?

脏数据产生的原因多种多样,有的甚至很难解释清楚到底发生了什么…通常,以下原因可能造成脏数据:

  1. 脏读:读了事务处理中间状态的数据
  2. 重复插入了相同的数据:多次点击同一个按钮导致
  3. 不能为空的字段存为空:数据库字段没有验证,或者对于历史数据没有做好迁移处理
  4. 人工录入不合法的数据:比如电话号码含有特殊字符
  5. 运行SQL脚本插入了不合法数据:比如不同实体id搞混等
  6. 存入了多余的空格
  7. 测试环境可能由于部署了半成品产生一些不合法数据
  8. ……

因此,脏数据跟代码有关,脏数据的产生是因为没有做好防御工作!

脏数据有哪些危害?
根据不同的系统、不同的业务,脏数据带来的危害也会不一样。
脏读产生的数据往往是错误的,导致数据不真实性,或者数据的不一致性;
重复和其他不合法数据则可能导致系统行为的不正常,有时候还可能导致非常严重的故障,甚至有些没有暴露的脏数据可能带来不可预知的致命错误,危害可能是相当大的。
脏数据带来的危害很难估量,有很大的不可预测性,对于脏数据的预防至关重要。
那么,如何能够防范于未然呢?

如何预防脏数据的产生?
尝试对脏数据引起的生产环境缺陷做进一步分析,总结出脏数据的几种类型,可以在敏捷软件开发生命周期的不同阶段对其进行防御。

  • 业务需求分析阶段

在业务分析的时候,根据业务需求,明确业务相关数据的特定要求,如:

  1. 不能为空的字段
  2. 不能重复的数据
  3. 日期范围
  4. 电话号码可以有“ext.”、“+”和“-” 但不能有其他字符
  5. 特殊字符的限定
  6. 功能升级的时候考虑已有数据的迁移
  7. 还有一些跟常识不同有特定业务含义的数据需求
  8. ……
  • 数据库和代码实现阶段

明确了数据的需求,可以根据需求定义和软件使用常识,在实现层面对数据进行严格的约束和校验:

  1. 数据库表的主外键、字段类型、是否允许为空,事务处理隔离等
  2. 前后端对数据进行严格的校验,防止各种手段存入不合法的数据,包括需求定义的数据和常识性的数据,比如身份证号码最多18位等
  3. 考虑多用户同时处理可能带来的并发问题
  4. 防止按钮或者链接被重复多次点击,可重复点击通常在网速较慢时可能存入重复数据
  5. 程序读取数据的时候进行处理,比如去掉多余空格、去重、大小写不敏感数据的处理
  6. ……
  • 测试的进一步保障

有了需求定义和实现层面的校验,大部分的不合法数据被阻止了,但是还是会有漏网之鱼,在测试的时候继续采取相应的措施来进一步防御。

  1. 业务需求规定的数据:这个毫无疑问是需要测试的,有底层的单元测试覆盖会更好
  2. 常识性的数据:由于不同的人可能有不同的常识,这些问题在测试的时候还需要特别关注
  3. 探索隐藏边界:关于隐藏边界的概念大家可能不是很熟悉。咱们通常说的等价类、边界值分析方法设计测试用例,都是根据可见的边界来考虑的,其实咱们程序后台可能还存在一些隐藏的边界,也是很有可能会导致数据问题的,需要在测试过程中进行探索发现它们并进行验证。

关于隐藏边界,可以参考John Ruberto的文章《Uncovering Hidden Boundary Values in Testing》,里边提到了四种隐藏边界:数据类型边界、信任域边界、特殊数据值、复活节彩蛋。除此之外,咱们平常测试过程中可以多积累,总结出还有哪些可能会导致数据问题的隐藏边界。

  • 对用户的培训

做了前面一层层的防御,如果最终用户在使用的时候能够按照规范操作数据,对减少脏数据的产生会很有帮助。
下面两个措施可以培训用户更规范的操作数据:

  1. 在界面上给出清晰的提示,告诉用户某些数据输入的要求
  2. 给用户培训或者提供用户手册,告诉用户该怎么正确使用系统

原文地址:https://www.cnblogs.com/wchwch/p/11180074.html

时间: 2024-10-11 22:36:48

(一)脏数据的产生的相关文章

脏数据

从广义上看,脏数据是指没有进行过数据预处理而直接接收到的.处于原始状态的数据: 从狭义上看,是不符合研究要求,以及不能够对其直接进行相应的数据分析. 脏数据依据不同的分析目的有不同的定义,如在常见的数据挖掘工作中,脏数据是指不完整.含噪声.不一致的数据:而在问卷分析中,脏数据则是指不符合问卷要求的数据. 开发中: 脏数据是指源系统中的数据不在给定的范围内或对于实际业务毫无意义,或是数据格式非法,以及在源系统中存在不规范的编码和含糊的业务逻辑. 在数据库技术中,脏数据在临时更新(脏读)中产生.事务

Hibernate脏数据检查

脏数据检查:    什么是脏数据?脏数据并不是废弃和无用的数据,而是状态前后发生变化的数据.我们看下面的代码:  Transaction tx=session.beginTransaction();  User user=(User)session.load(User.class,"1");//从数据库中加载符合条件的数据  user.setName("zx");//改变了user对象的姓名属性,此时user对象成为了所谓的"脏数据"  tx.c

如何使用R语言解决可恶的脏数据

转自:http://shujuren.org/article/45.html 在数据分析过程中最头疼的应该是如何应付脏数据,脏数据的存在将会对后期的建模.挖掘等工作造成严重的错误,所以必须谨慎的处理那些脏数据. 脏数据的存在形式主要有如下几种情况: 1)缺失值 2)异常值 3)数据的不一致性 下面就跟大家侃侃如何处理这些脏数据. 一.缺失值 缺失值,顾名思义就是一种数据的遗漏,根据CRM中常见的缺失值做一个汇总: 1)会员信息缺失,如身份证号.手机号.性别.年龄等 2)消费数据缺失,如消费次数.

在ASP.NET MVC下有关上传图片脏数据的解决方案

在"在ASP.NET MVC下实现单个图片上传, 客户端服务端双重限制图片大小和格式, 服务端裁剪图片"中,已经实现了在客户端和服务端限制图片大小和格式,以及在服务端裁剪图片.但还有一个重要的话题是需要面对的,那就是图片脏数据问题. 假设用户添加产品信息,并且上传了图片,可之后用户没有点击页面上的添加按钮,这就导致上传图片成为"脏数据",存在着却一直不会被使用.解决这个问题的大致思路是: ○ 在上传图片的时候,把图片保存到一个临时文件夹,或者叫缓存文件夹○ 当用户真

事务 脏数据

关于脏数据比如说,有两个用户A,B同时操作数据库,A开始了一个事务,修改了某行,但还未提交,这个时候,B开始另一个事务,读取了该行,然后A回滚了事务,即修改被取消了,那么,B读取到的那一行数据就是脏数据 上面这句话正确吗?如果事物A未提交,事物B能读到A所修改的数据吗? 如何判断A,B 是否属于同一个事物? 在PL/SQL 中先删一条数据(没有提交)紧接着在查刚才那条数据是查不到的,既然没有提交为什么会查不到呢? 希望各位能详细回答一下,小弟不胜感激. Q:如果事物A未提交,事物B能读到A所修改

好记性不如烂笔头24-JAVA处理数据库事务(2) - 脏数据

读"脏"数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被除撤消,而此时T1把已修改过的数据又恢复原值,T2读到的数据与数据库的数据不一致,则T2读到的数据就为"脏"数据,即不正确的数据. 脏数据在比较复杂的交互式系统中,非常常见. 1.用JAVA处理数据库事务的准备 要有一个能够访问数据库的应用.下面的示例都基于ORACLE进行. create table ffm_account( id int primary key , n

Ceph剔除主机,Crushmap遗留脏数据

背景: 1. 一个集群总共有5台主机(Host11,Host12,Host13,Host14,Host16),由于资源过剩,需要剔除两台主机用于其他用途,host11-13都是monitor+node,Pool的副本数目是2.所以优先考虑剔除主机14和16 操作步骤: 1. Monitor操作,将OSD的状态设置Out 2. 登录对应OSD节点 ,停止OSD守护进程 3. Crushmap中删除OSD 4. 删除OSD的认证信息 5. 登录对应OSD节点 ,取消挂载文件系统 注意事项: 1. 由

(二)脏数据的预防及处理

(啊···我的排版好垃圾·····) 如何处理已产生的脏数据?有那么多预防脏数据产生的方法,但相信脏数据的产生还是在所难免的.脏数据一旦产生,导致的系统行为也是不可预测的,可能无足轻重,也可能暴露非常严重的缺陷.该如何应对产生的脏数据呢? 脏数据产生以后有两种存在形式,一种是已经引起某些问题被发现了,另一种是还不被人知道,不知道哪天会发生什么样的问题. 已经暴露的脏数据 首要的是对数据的快速修复,让系统恢复正常运转.对于专业的脏数据处理可以了解一下数据清洗(Data cleaning)技术.咱们

如何清除工作流脏数据

问题: 工作流待我审批出现条数但是没有数据 解决方案: 去流程监控里面找到清理脏数据按钮即可 加入JEPaaS技术交流群,了解更多 原文地址:https://blog.51cto.com/13797782/2433522