77百科网
当前位置: 首页 生活百科

生产过程中的环境安全指标(生产环境又有问题)

时间:2023-05-19 作者: 小编 阅读量: 3 栏目名: 生活百科

2)将生产环境数据清理后用于测试环境生产环境数据含有PII或者其他机密,通常不能直接用于测试环境。将生产环境数据的PII和其他机密信息清除后用于测试环境,测试人员基于这些数据做测试,就能有效的提前去发现由于生产环境数据引起的问题。3)利用蓝绿部署等TiP实践蓝绿部署是一种通过运行两个相同的生产环境“蓝环境”和“绿环境”来减少停机时间和风险的技术,是TiP非常典型的一个实践。

本文笔者对脏数据的来源、脏数据的危害、脏数据的预防、如何对已出现的脏数据进行处理等问题进行详细阐述。

“小光,今天那个诡异的生产环境问题找到原因了吗?”

“还是数据问题!之前做的一个功能有一部分数据迁移工作没有做好,导致生产环境有脏数据,委托人的联系人已经不为该委托人服务了,应该移除掉的……”

“又是脏数据……”

“嗯,好在不是代码问题。”

这是在蓝鲸项目发生的真实对话。其中提到的脏数据(Dirty data),也叫坏数据(Bad data),通常是指跟期待的数据不一样、会影响系统正常行为的数据。

蓝鲸项目的QA会定期分析生产环境的缺陷,当定位某个缺陷为脏数据引起之后,往往就到此为止了。

生产环境下的缺陷分析流程是这样的:

调查分析生产环境缺陷,到最后定位是数据问题的时候,总是让人浑身轻松……于是,“脏数据”就跟测试的“随机挂”一样,成为了光荣的“背锅侠”!

脏数据 ≠ 代码问题,真的是这样吗?先来深入了解一下脏数据。

脏数据是怎么回事?

脏数据产生的原因多种多样,有的甚至很难解释清楚到底发生了什么……

通常,以下原因可能造成脏数据:

  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. 给用户培训或者提供用户手册,告诉用户该怎么正确使用系统

如何处理已产生的脏数据?

有那么多预防脏数据产生的方法,但相信脏数据的产生还是在所难免的。脏数据一旦产生,导致的系统行为也是不可预测的,可能无足轻重,也可能暴露非常严重的缺陷。

该如何应对产生的脏数据呢?

脏数据产生以后有两种存在形式,一种是已经引起某些问题被发现了,另一种是还不被人知道,不知道哪天会发生什么样的问题。

已经暴露的脏数据

对于已经暴露的脏数据,首要的是对数据的快速修复,让系统恢复正常运转。对于专业的脏数据处理可以了解一下数据清洗(Data cleaning)技术。咱们平常对于脏数据的修复,可以根据业务需求,采用数据库脚本修复,或者在前端执行JS脚本来修复。

修复数据需要特别注意不要引入新的脏数据,编写脚本之前要理清相关业务和数据之间的关系,编写好脚本之后要经过严格的测试才能在线上环境执行。

修复数据的同时,需要进一步调查数据产生的原因,检查可以在哪个环节加固防御措施,以尽量减少类似数据问题再次发生的可能性。

未暴露的脏数据

这样的数据,其实我们并不知道它的存在,就像一个在黑暗处的幽灵,不知道什么时候会给系统带来麻烦。

由于系统环境的复杂性、用户行为的多样性,生产环境更加容易产生脏数据。尽早发现这种潜在危害的脏数据非常重要。

蓝鲸项目就是这样。在跟客户做支持的同事沟通过程中,最大的担忧就是生产环境的数据总能发现问题,如何能够让这些问题尽早暴露出来?

推荐生产环境下的测试(Testing in production,TiP)的一些实践:

1) 直接在生产环境测试

生产环境是高度受保护的,不可以随意测试,以免破坏生产环境的稳定性。在生产环境写入数据要特别谨慎,大批量的读操作也要注意对系统性能的影响。

有些可以隔离出来的功能或操作,相对来说是安全的,可以在生产环境直接测试,比如:蓝鲸项目的邮件服务,常会在生产环境部署单独的服务器来测试。

需要根据项目真实情况去做决定。

2)将生产环境数据清理后用于测试环境

生产环境数据含有PII(个人身份信息,需要保护的隐私信息)或者其他机密,通常不能直接用于测试环境。

将生产环境数据的PII和其他机密信息清除后用于测试环境,测试人员基于这些数据做测试,就能有效的提前去发现由于生产环境数据引起的问题。

这个方案很好,但是要权衡ROI。对于一些复杂的系统,数据库结构过于复杂,清理的成本太高,也是不太现实的。

3)利用蓝绿部署等TiP实践

蓝绿部署是一种通过运行两个相同的生产环境“蓝环境”和“绿环境”来减少停机时间和风险的技术,是TiP非常典型的一个实践。

在任何时候,只有一个环境是活的,活的环境为所有生产流量提供服务。通常绿环境是闲置的,蓝环境是活的。部署新的版本到绿环境,可以先进行测试,而不会给真正在使用的蓝环境带来影响。完成部署和测试以后,再进行蓝绿环境的切换。

此技术可以消除由于应用程序部署导致的停机时间。此外,蓝绿部署可降低风险:如果新版本在绿环境上发生意外情况,可以通过切换回蓝环境立即回滚到上一版本。这样就有机会提前发现脏数据可能引起的问题。

类似的技术,还有金丝雀发布等,也有助于提前发现脏数据的问题。

写在最后

脏数据的防御是关键

这跟敏捷测试的质量内建原则是一致的。质量内建强调缺陷预防,在预防缺陷产生的同时,要加强对于脏数据的防御。根据敏捷测试的节奏,在敏捷开发生命周期各个环节做好脏数据的预防和处理工作,尽量减少脏数据给生产环境带来的危害。

如果由于各种原因防御工作不到位,脏数据产生后也要分析总结,回过头来指导开发环节的工作,进一步加强防御。

脏数据让我们又爱又恨

恨的是脏数据的产生总是会导致系统行为的不可预测,让系统质量保障变得复杂。尤其是一些脏数据不停的出现,还总是找不到原因的时候,很让人抓狂!总想到此为止,让脏数据来背锅。

但这不是明智的做法,脏数据都是有原因的,不挖掘出真正的原因,可能带来更加意想不到的后果。找出根因,做到防微杜渐,才是正道。

爱的不是因为脏数据可以帮我们背锅,而是它的存在可以帮助我们暴露程序潜在的问题,是做好系统质量保障工作、生产环境下的QA不可或缺的助手。

QA朋友们,请加强对脏数据的重视,善待脏数据!

作者:ThoughtWorks林冰玉,ThoughtWorks洞见

本文由@ThoughtWorks王健 原创发布于人人都是产品经理,未经允许,禁止转载。

题图来自Unsplash, 基于CC0协议

,
    推荐阅读
  • 木兰诗中的对镜贴花黄是什么意思(木兰诗中的对镜贴花黄)

    花黄也称花子,是古代汉族妇女脸部的一种女性额饰,又称额黄、鹅黄、鸭黄、约黄等。是把黄金色的纸剪成各式装饰图样,或是在额间涂上黄色。这种化妆方式起自秦代,至南北朝隋唐时始成为流行的妇女面饰。与花黄同时出现在南北朝的还有一种梅花妆,即梅花形状的花子。采用这种妆饰的都是没有出阁的女子,慢慢的“黄花闺女”一词便成未婚少女的专有称谓了。

  • 内资和普通公司有什么区别(什么是内资公司)

    包括国有企业、集体企业、私营企业、联营企业和股份企业等五类。3、股东、监事、法人代表:股东:为公司的投资者,深圳内资公司股东要求必须为年满18周岁以上的中国合法公民,须持有有效身份证。

  • 脖子一直长痘是什么原因(是什么因素导致的)

    激素水平失衡进入青春期之后,体内激素的分泌会大大增加,特别是女性朋友体内的雌激素正常而雄性激素会明显偏高,这样就会出现雄性激素、雌性激素不平衡的情况,从而导致脸部以及脖子后面的皮脂分泌过量,引发痘痘的出现。容易过敏的人除了要在饮食方面注意,对女性而言,化妆品的选择也比较重要,最好选择植物性的化妆品,这样才能尽量避免自己出现过敏长痘痘的情况。

  • 千层手工馒头的制作方法(千层手工馒头怎么做)

    千层手工馒头的制作方法把酵母粉和温水搅拌均匀,温水的温度不超过35度,很高的水温会把酵母活性烫死了,再加入面粉和成稍微硬一点的面团,静置发酵,用温水发酵面团速度会快很多。拿一个面剂子,用手揉搓成圆形,稍微一整,成一个半圆球体。把馒头全部做好以后,放在盖帘上,盖上湿布,静置二次发酵到两倍大,用手掂一下发轻,就可以蒸了。大火烧开,上汽后蒸大约30分钟就可以了,开盖出锅。

  • 抖音私信删除了可以查到吗(关于抖音的介绍)

    以下内容大家不妨参考一二希望能帮到您!要想让双方都无法看见则需要使用撤回功能,但是撤回功能只有在发送后几分钟内可以使用,所以用户在发送了不合适的私信时要及时撤回。抖音,是由今日头条孵化的一款音乐创意短视频社交软件,该软件于2016年9月20日上线,是一个面向全年龄的短视频社区平台。

  • 相机的照片怎么传到手机 尼康相机的照片怎么传到手机

    3、查看图片时,长时间按住图片,会弹出“更多”按钮或点击右下角的“更多”,即可直接复制到手机上。

  • 言者谆谆听者藐藐的意思(言者谆谆听者藐藐的解释及出处)

    接下来我们就一起去了解一下吧!言者谆谆听者藐藐的意思释义:谆谆:教诲不倦的样子;藐藐:疏远的样子。说的人很诚恳,听的人却不放在心上。

  • 扬州乐园2020旅游文化节免费门票怎么领

    活动日期:5月1日—5月5日活动时间:9:00—18:00咨询电话:0514-89897777;13178837824活动地点:扬州市生态科技新城扬州乐园乘车路线:1.乘坐万福片区展览专线和10路到欢乐自在岛公交站步行431米到扬州乐园即到;2.乘坐99路到万福大桥东公交站步行1.3公里到扬州乐园即到;自驾线路:导航至:【扬州乐园】即可扬州乐园门票购买入口:天天周末平台您也可以回复以下关键字选择您

  • 牛犊拉稀体质弱怎么治疗(牛犊拉血又拉稀怎么办)

    牛犊拉稀和拉血同时发生这种现象,我们很多养殖户都遇到过,但是大部分人都不知道该怎么治疗。牛犊拉血便的主要原因,是它在发生了拉稀以后,肠道里面受损导致的。这种情况,我们在治疗的时候建议以中药为主,这样对小牛犊的副作用是最小的。我们可以给小牛犊使用:多维太保,它含有丰富的维生素和各种矿物质、微量元素,可以避免小牛犊在生长发育的过程中出现营养不良、异食癖、不上膘等情况的发生。