数据指标的意义
所谓的“数据指标”,简单来说就是可将某个事件量化,且可形成数字,来衡量目标,在日常工作中大家都会应用的到。在一定程度上,“数据指标”能揭示出产品用户的行为和业务水平状况。
大数据与业务数据交互图
指标测试
初识指标测试
在初次接触指标测试时,测试的指标内容是由开发敲定的,测试只是一个无情的执行工具。
没有进行任何的思考,表与字段的取值,数据的实效,均没有顾及,导致指标准确性不高,甚至出现数据丢失的情况。同时在数据测试过程中,采取逐步准备数据,准备一波同步一波数据的方式,导致时间线拉的很长,版本质量也不佳
测试分层
由于指标类项目,并不只是单一的数据指标,同时还会有相应的前端页面,对数据进行展示。
因此为了降低数据的复杂程度,采取指标开发类似的测试思路,即测试分层。
将原本冗余在一起的指标与页面功能剥离开,分为数据验证测试与功能验证测试。并分配给不同的人执行,提升测试效率,减少测试之间的耦合:
- 指标验证测试:负责从业务数据到ADS层的指标准确性
- 功能验证测试:负责ADS数据至前端页面的展示
指标验证测试
指标验证测试共涉及4个环节,即明确指标口径,验证脚本准备,数据构造脚本准备和数据验证
- 明确指标口径
- 指标的口径一定要定义清晰,无歧义。避免个人认知差造成的误解
- 在指标开发前,产品/开发/测试需要对指标涉及的表、字段取值达成一致。从源头上减少bug的产生。
- 验证脚本准备
- 在指标口径定义与表、字段确认以后,就到了测试准备环节。首先指标测试不可能想功能测试一样,根据指标的不同情况,逐个查看数据的正确性。因此,我们需要准备测试脚本,一般使用SQL对数据进行验证
- 测试需要根据指标定义,按照自己的理解,将该指标查询SQL准备出来,并在业务库验证SQL正确无误
- 由于大数据会将计算结果放在ADS层的表中。因此,我们还需要准备ADS表的验证SQL
- 数据构造脚本准备
- 在数据验证SQL准备完成后,我们就需要针对指标数据进行准备了
- 数据构造
- 如果对指标的业务表极为熟悉,甚至对业务上下游的影响范围都牢记在心。那么我们可以采取直接插入SQL的方式,进行数据准备,保留SQL脚本
- 如果对指标的库表不熟悉,那么我们就只能通过接口的方式进行构造数据,在数据创建后针对时间进行修改,确保数据在统计时效内
- 由于数据具有实效性,我们需要将自己准备数据的脚本保留下来。便于快速准备数据
- 数据验证
- 当验证脚本与构造脚本均已经完成时,此时验证工作就极为简单了,我们只需要将脚本执行一下,统计是否数据一致即可
- 当数据验证完成后,在回过头来看看自己是否有数据遗漏的情况,再次检查一下就好
功能验证测试
与指标的测试不同,功能验证的测试,只需要关注从ADS层到页面前端的展示,即数据准备、数据展示验证和功能验证。
- 数据准备
- 直接对ADS层的库表进行插入数据操作,确保数据覆盖了业务统计范围
- 数据展示验证
- 在ADS插入数据以后,直接在前端或接口查看相应的数据是否展示,是否一致
- 功能验证
- 指标类项目虽然交互单一,但由于涉及数据的统计,功能也不能忽视,常见的异常为:组织架构统计错误,人员信息变更统计出错。
指标测试困境
缘由
数据指标是高度依赖于业务数据,当业务方进行改造时,难免会影响历史指标。体现在如下方面
- 业务指标口径变更
- 业务数据表结构变更
- 基础业务数据变更(刷数据)
从现阶段来看,当业务指标口径变更与表结构变更时,对于测试人员来讲,基本等同于历史指标重测,会造成较大的人力成本。而基础业务数据变更,则会直接影响线上数据的准确性,导致用户对数据不信任。
解决思路
- 保留历史数据构造脚本与验证脚本
- 该方式可以从解决一部分重测问题。但是又会引入新的问题,数据脚本都是分散的由个人维护,无版本控制,很容易导致缺失,最后不得不重新准备
- 提高线上数据的日常检查
- 线上数据并不能随意访问,因此基础业务数据变更的问题,只能通过管理流程来规范,无法通过技术手段来解决
- 搭建相应的自动化框架
- 可通过Git来管理历史脚本数据信息,并将构建验证脚本统一管理,理想情况下可以迅速完成测试
- 需要投入一定的成本,当使用次数较少时,投入成本难以回收。