什么是试验调试
试验调试,是验证试验策略是否被正确下发、试验策略效果是否正确展现、试验相关数据埋点是否正确上报的过程。该项工作是试验上线前验证代码正确性的一项必要工作,可帮助我们确保试验最终顺利实施。我们建议,每次A/B试验实施过程都应在试验及相关埋点采集代码上线前,预留合理的时间进行完整的、细致的试验调试工作,从而保证试验策略效果正确展现以及数据效果准确回收。
什么是调试设备
试验调试的过程中,最核心的工具是调试设备(含调试硬件设备、调试账号,以下统称调试设备)。调试设备将用于依次命中指定的分组策略,其产生的数据不会统计到试验报告中。
试验调试前的准备工作
准备操作环境与权限
神策对每个接入的独立产品线一般会开通两个项目(一个测试项目,一个正式项目,两者数据接入地址不同),项目间数据完全隔离,试验调试将集中在「测试项目」中进行。测试人员需具有「管理员权限」,以便在测试过程中使用神策A/B测试的”调试设备管理”与神策分析的”埋点管理”功能及时定位与排查问题。
准备调试设备
在调试工作进行前,需要备置一些测试用的硬件设备或账号用于测试。一般情况下,测试用的硬件设备/账号数量都比较有限,我们可以将这些硬件设备/账号都录入到神策A/B测试系统中,通过设备ID/登录ID进行唯一性标识,并通过规范的中文命名的方式进行管理。
调试设备的录入方式各端都有所不同,若需了解各端详细录入方式,请查阅 调试设备录入
(图:调试设备示例)
试验调试工作的流程
调试工作整体流程
试验调试工作的整体流程依次为以下七个步骤:
① 理解试验需求文档 ➜ ② 完成试验配置(进入调试状态)➜ ③ 依次校验试验版本 ➜ ④ 确认无误,上线测试环境 ➜ ⑤ 试验埋点校验 ➜ ⑥ 修复试验版本错误、埋点错误 ➜ ⑦ 确认无误,上线正式环境
理解试验需求文档
试验设计方案包括《试验设计文档》和《试验埋点文档》。
试验设计文档
该文档是对于试验内容的具体描述,其中包括试验的基本信息以及试验的配置信息。其作用是用于了解试验意图,并作为依据在神策A/B测试平台上进行配置操作。
(图:试验设计文档示例)
试验埋点文档
该文档基于试验设计文档中关注的试验指标所设计,其中包括需要埋点事件的名称、所包含属性、触发时机等信息。研发人员在进行数据接入时,应严格按照此方案进行埋点开发。因此,测试人员的任务是校验实际采集到的数据是否符合《试验埋点文档》中的标准。
(图:试验埋点文档示例)
完成试验配置(进入调试状态)
首先在测试环境(测试项目)中,依据《试验设计文档》完成试验相关信息配置,并点击“完成配置”按钮,完成试验创建工作。此时,试验会进入“调试中”状态。
(图:完成创建操作示例)
(图:进入调试状态示例)
依次校验试验版本
操作步骤:
① 在试验列表点击“编辑试验” ➜ ② 划动至“分配流量”步骤 ➜ ③ 在试验组中添加调试设备 ➜ ④ 使用对应的调试设备进行展现效果验证 ➜ ⑤ 确认验证成功,进行下一个版本调试直到遍历完成
客户端试验校验操作
① 在试验列表点击“编辑试验”
② 划动至“分配流量”步骤
③ 在试验组中添加调试设备
③使用对应的调试设备进行展现效果验证
⑤ 确认验证成功,进行下一个版本调试直到遍历完成(备注:录入调试设备后,需点击下方“完成”按钮才会生效)
服务端试验校验操作
① 在试验列表点击“编辑试验”
② 划动至“分配流量”
③ 在试验组中添加调试设备
④ 使用对应的调试设备进行展现效果验证
在服务端运行相关参数获取代码,验证接口返回的参数值是否正确。
⑤ 确认验证成功,进行下一个版本调试直到遍历完成(备注:录入调试设备后,需点击下方“完成”按钮才会生效)
依次将调试设备录入下一个试验版本,在服务端运行获取该试验参数的代码并验证返回值,直至所有的版本参数都验证无误。
确认无误,上线测试环境
当试验版本测试无误之后,在测试环境中进行上线操作。试验上线之后,下一步要做的工作是对试验相关的埋点进行检验。
需要注意的是,用于测试埋点的设备,应为非调试设备(已添加入某试验版本中的调试设备,可以在“编辑试验”页面取消添加)。非调试设备的用户进入试验场景,将触发 $ABTestTrigger 事件,用以标志用户进入试验(调试设备状态下不会触发该事件)。在转化率类试验场景下,我们将检验该事件的上报顺序是否正确。
试验埋点校验
校验准备操作
了解即将要检验的埋点事件设计方案,知晓相关埋点的事件英文变量名、属性英文变量名、属性值等等基础信息。
然后进行如下操作:
① 从神策分析系统进入“埋点管理” ➜ “实时导入数据查询”界面
② 使用该模块实时察看当前正在接收的埋点数据。可根据“事件名”或者“用户 ID”两种模式进行事件定位,建议优先使用测试中的用户 ID 进行校验,避免多次更新事件名的操作。输入查询条件后点击“开始刷新”,即可看到数据实时接收情况。
埋点正确性校验
① 依次使用所有涉及到的设备端(Android / IOS / JS / 小程序等等),操作进入试验所在页面,逐个触发相关试验埋点。
② 如对应事件在测试机上被触发后显示在了“导入中数据”的数据流里,则可以认为该触发时机埋点正确;如无显示,则可以认为该触发时机埋点错误,可反馈给研发人员进行排查。
③ 检查特殊事件 $ABTestTrigger 是否正常触发(用户在首次进入试验场景时会触发该事件。当然,如果我们对于试验流量限制了进入比例, 则会有一部分用户进入试验场景后并不会触发)
④ 检查常规埋点事件上报的「事件英文变量名」、「属性英文变量名」、「属性值数据类型」、「属性值」是否正确。如发现上报错误、遗漏等问题,需反馈给研发人员进行排查。
⑤ 确认该埋点验证成功,进行下一个埋点的校验,直到所有埋点遍历校验完成。
埋点上报顺序校验
主要针对转化率类试验,要确保“分子/分母”对应的两个埋点事件均上报于$ABTestTrigger 触发之后。以下图中的事件为例,该试验关注的核心指标是「购买按钮点击用户数/产品详情页浏览用户数」。
如图所示,该指标所对应的埋点事件为「产品详情页浏览」、「购买按钮点击」。
以下为上报顺序示例:
正确顺序:$ABTestTrigger ➜ 产品详情页浏览 ➜ 购买按钮点击
错误顺序:产品详情页浏览 ➜ $ABTestTrigger ➜ 购买按钮点击
建议反馈:如发生错误,请相关研发检查代码执行顺序,确保先执行“参数获取代码”再执行“埋点上报代码”
备注:为确保埋点上报顺序准确性,应避免使用带“$”符号的全埋点事件作为试验埋点事件(如:$AppStart等)。我们建议,针对于试验相关的统计需求应尽量使用自定义埋点实现。
修复试验版本错误、埋点错误
将校验过程中出现的「试验版本错误」或者「试验埋点错误、遗漏」等问题反馈给相关研发人员,进行代码层面修复。
确认无误,上线正式环境
调试工作一般是在测试环境(测试项目)中进行。当在测试环境中,对于「试验版本」和「试验埋点」均校验无误之后,正式的上线工作应该在正式环境中,依据《试验设计文档》重新对试验进行创建,并在正式环境(正式项目)中进行“上线”操作。
在代码层面,研发人员需要将测试环境的「数据接收地址、参数获取地址」更改为正式环境的「数据接收地址、参数获取地址」,且检查并关闭debug调试模式,将正式程序包对外进行发布。
常见问题列表
调试设备是否会对已上线的试验生效?
会生效,已上线的试验也可以添加调试设备,该设备同样会展现对应试验版本。但被添加的调试设备并不会触发 $ABTestTrigger事件,以确保调试设备上报的埋点不会影响试验报告的统计。
如果没有正常触发 $ABTestTrigger,如何排查?可能的原因有哪些?
① 没有正确调用获取试验变量的相关接口,需调用相关接口并传入对应试验参数才会触发(接口文档详见:AB testing SDK帮助文档)
② 因为网络原因参数没有获取成功,因而没有触发试验。这类情况只需重新进入页面,重新调用接口即可。
③ 因为设置了流量进入比例不到100%,导致部分用户被判定不触发试验。一般在测试阶段,推荐让单个试验独占一个试验层,设置的流量比例为100%,确保都能触发试验。
④ 该设备已经触发同试验层的其他试验,导致分流服务判定其不能再进入当前试验。这类问题请检查试验层配置,通过查询该设备过往触发过的试验情况来进行定位。测试阶段,推荐让单个试验独占一个试验层。
试验已经进入“调试中”状态,但通过参数获取接口进行请求,却无法命中试验策略,是什么原因?
首先需明确的是,“调试中”状态的试验,非调试设备是不能命中的,必须在试验中的任一试验组内添加该调试设备,该设备才可命中。但如果是通过调试设备进行请求,依然未返回试验策略,可从以下方面进行排查:
① 检查调试设备是否被添加到试验的某个组,如果只是在调试设备列表中,但未被添加到试验的某个组,将无法命中试验。
② 录入调试设备是否正确,过往常见因部门内部测试设备较多,型号雷同或命名不规范,导致实际使用时发生混淆。
③ 检查请求试验参数时用的“参数请求地址”与试验创建完成时示例代码中的“参数请求地址”是否一致。过往常见在“项目A”环境中进行调试操作,但获取参数时使用的请求地址却是“项目B”的请求地址,因而导致无策略返回。