1.什么是试验调试

试验调试,是验证试验策略是否被正确下发、试验策略效果是否正确展现、试验相关数据埋点是否正确上报的过程。该项工作是试验上线前验证代码正确性的一项必要工作,可帮助我们确保试验最终顺利实施。我们建议,每次A/B试验实施过程都应在试验及相关埋点采集代码上线前,预留合理的时间进行完整的、细致的试验调试工作,从而保证试验策略效果正确展现以及数据效果准确回收。

2.什么是调试设备

试验调试的过程中,最核心的工具是调试设备(含调试硬件设备、调试账号,以下统称调试设备)。调试设备将用于依次命中指定的分组策略,其产生的数据不会统计到试验报告中。

3.试验调试前的准备工作

3.1.准备操作环境与权限

神策对每个接入的独立产品线一般会开通两个项目(一个测试项目,一个正式项目,两者数据接入地址不同),项目间数据完全隔离,试验调试将集中在「测试项目」中进行。测试人员需具有「管理员权限」,以便在测试过程中使用神策A/B测试的”调试设备管理”与神策分析的埋点管理功能及时定位与排查问题。

3.2.准备调试设备

在调试工作进行前,需要备置一些测试用的硬件设备或账号用于测试。一般情况下,测试用的硬件设备/账号数量都比较有限,我们可以将这些硬件设备/账号都录入到神策A/B测试系统中,通过设备ID/登录ID进行唯一性标识,并通过规范的中文命名的方式进行管理。

调试设备的录入方式各端都有所不同,若需了解各端详细录入方式,请查阅 调试设备录入

(图:调试设备示例)

4.试验调试工作的流程

4.1.调试工作整体流程

试验调试工作的整体流程依次为以下七个步骤:

① 理解试验需求文档 ➜ 完成试验配置(进入调试状态)➜ 依次校验试验版本 ➜ 确认无误,上线测试环境 ➜ 试验埋点校验 ➜ 修复试验版本错误、埋点错误 ➜ 确认无误,上线正式环境

4.1.1.理解试验需求文档

试验设计方案包括《试验设计文档》和《试验埋点文档》。

4.1.1.1.试验设计文档

该文档是对于试验内容的具体描述,其中包括试验的基本信息以及试验的配置信息。其作用是用于了解试验意图,并作为依据在神策A/B测试平台上进行配置操作。

(图:试验设计文档示例)

4.1.1.2.试验埋点文档

该文档基于试验设计文档中关注的试验指标所设计,其中包括需要埋点事件的名称、所包含属性、触发时机等信息。研发人员在进行数据接入时,应严格按照此方案进行埋点开发。因此,测试人员的任务是校验实际采集到的数据是否符合《试验埋点文档》中的标准。

(图:试验埋点文档示例)

4.1.2.完成试验配置(进入调试状态)

首先在测试环境(测试项目)中,依据《试验设计文档》完成试验相关信息配置,并点击“完成”按钮,完成试验创建工作。此时,试验会进入“调试中”状态。

(图:完成创建操作示例)

(图:进入调试状态示例)

4.1.3.依次校验试验版本

操作步骤:

在试验列表点击“编辑试验” ➜ 划动至“设置试验分组”步骤 ➜ 在试验组中添加调试设备 ➜ 使用对应的调试设备进行展现效果验证 ➜ 确认验证成功,进行下一个版本调试直到遍历完成

4.1.3.1.客户端试验校验操作

在试验列表点击“编辑试验”

划动至“设置试验分组”

在试验组中添加调试设备

使用对应的调试设备进行展现效果验证

确认验证成功,进行下一个版本调试直到遍历完成(备注:录入调试设备后,需点击下方“完成”按钮才会生效)

4.1.3.2.服务端试验校验操作

在试验列表点击“编辑试验”

划动至“设置试验分组”

在试验组中添加调试设备

使用对应的调试设备进行展现效果验证

在服务端运行相关参数获取代码,验证接口返回的参数值是否正确。

确认验证成功,进行下一个版本调试直到遍历完成(备注:录入调试设备后,需点击下方“完成”按钮才会生效)

依次将调试设备录入下一个试验版本,在服务端运行获取该试验参数的代码并验证返回值,直至所有的版本参数都验证无误。

4.1.4.确认无误,上线测试环境

当试验版本测试无误之后,在测试环境中进行上线操作。试验上线之后,下一步要做的工作是对试验相关的埋点进行检验。

需要注意的是,用于测试埋点的设备,应为非调试设备(已添加入某试验版本中的调试设备,可以在“编辑试验”页面取消添加)。非调试设备的用户进入试验场景,将触发 $ABTestTrigger 事件,用以标志用户进入试验(调试设备状态下不会触发该事件)。在转化率类试验场景下,我们将检验该事件的上报顺序是否正确。

4.1.5.试验埋点校验

4.1.5.1.校验准备操作

了解即将要检验的埋点事件设计方案,知晓相关埋点的事件英文变量名、属性英文变量名、属性值等等基础信息。

然后进行如下操作:

从神策分析系统进入埋点管理” ➜ 实时导入数据查询界面

使用该模块实时察看当前正在接收的埋点数据。可根据事件名或者用户 ID”两种模式进行事件定位,建议优先使用测试中的用户 ID 进行校验,避免多次更新事件名的操作。输入查询条件后点击开始刷新,即可看到数据实时接收情况。

4.1.5.2.埋点正确性校验

依次使用所有涉及到的设备端(Android / IOS / JS / 小程序等等),操作进入试验所在页面,逐个触发相关试验埋点。

如对应事件在测试机上被触发后显示在了“导入中数据”的数据流里,则可以认为该触发时机埋点正确;如无显示,则可以认为该触发时机埋点错误,可反馈给研发人员进行排查。

检查特殊事件 $ABTestTrigger 是否正常触发(用户在首次进入试验场景时会触发该事件。当然,如果我们对于试验流量限制了进入比例, 则会有一部分用户进入试验场景后并不会触发)

检查常规埋点事件上报的「事件英文变量名」、「属性英文变量名」、「属性值数据类型」、「属性值」是否正确。如发现上报错误、遗漏等问题,需反馈给研发人员进行排查。

确认该埋点验证成功,进行下一个埋点的校验,直到所有埋点遍历校验完成。

4.1.5.3.埋点上报顺序校验

主要针对转化率类试验,要确保分子/分母对应的两个埋点事件均上报于$ABTestTrigger 触发之后。以下图中的事件为例,该试验关注的核心指标是「购买按钮点击用户数/产品详情页浏览用户数」。

image2021-10-8_14-36-51.png

如图所示,该指标所对应的埋点事件为「产品详情页浏览」、「购买按钮点击」。

以下为上报顺序示例

正确顺序:$ABTestTrigger ➜ 产品详情页浏览 ➜ 购买按钮点击

错误顺序:产品详情页浏览 ➜ $ABTestTrigger ➜ 购买按钮点击

建议反馈:如发生错误,请相关研发检查代码执行顺序,确保先执行参数获取代码再执行埋点上报代码

备注:为确保埋点上报顺序准确性,应避免使用带“$”符号的全埋点事件作为试验埋点事件(如:$AppStart等)。我们建议,针对于试验相关的统计需求应尽量使用自定义埋点实现。

4.1.6. 修复试验版本错误、埋点错误

将校验过程中出现的「试验版本错误」或者「试验埋点错误、遗漏等问题反馈给相关研发人员,进行代码层面修复。

4.1.7. 确认无误,上线正式环境

image2021-10-8_14-41-30.png

调试工作一般是在测试环境(测试项目)中进行。当在测试环境中,对于「试验版本」和「试验埋点」均校验无误之后,正式的上线工作应该在正式环境中,依据《试验设计文档》重新对试验进行创建,并在正式环境(正式项目)中进行“上线”操作。

在代码层面,研发人员需要将测试环境的「数据接收地址、参数获取地址更改为正式环境的「数据接收地址、参数获取地址」,且检查并关闭debug调试模式,将正式程序包对外进行发布。

5.常见问题列表

5.1.调试设备是否会对已上线的试验生效?

会生效,已上线的试验也可以添加调试设备,该设备同样会展现对应试验版本。但被添加的调试设备并不会触发 $ABTestTrigger事件,以确保调试设备上报的埋点不会影响试验报告的统计。

5.2.如果没有正常触发 $ABTestTrigger,如何排查?可能的原因有哪些?

没有正确调用获取试验变量的相关接口,需调用相关接口并传入对应试验参数才会触发(接口文档详见:AB testing SDK帮助文档

因为网络原因参数没有获取成功,因而没有触发试验。这类情况只需重新进入页面,重新调用接口即可。

因为设置了流量进入比例不到100%,导致部分用户被判定不触发试验。一般在测试阶段,推荐让单个试验独占一个试验层,设置的流量比例为100%,确保都能触发试验。

该设备已经触发同试验层的其他试验,导致分流服务判定其不能再进入当前试验。这类问题请检查试验层配置,通过查询该设备过往触发过的试验情况来进行定位。测试阶段,推荐让单个试验独占一个试验层。

5.3.试验已经进入调试中状态,但通过参数获取接口进行请求,却无法命中试验策略,是什么原因?

首先需明确的是,“调试中状态的试验,非调试设备是不能命中的,必须在试验中的任一试验组内添加该调试设备,该设备才可命中。但如果是通过调试设备进行请求,依然未返回试验策略,可从以下方面进行排查:

检查调试设备是否被添加到试验的某个组,如果只是在调试设备列表中,但未被添加到试验的某个组,将无法命中试验。

录入调试设备是否正确,过往常见因部门内部测试设备较多,型号雷同或命名不规范,导致实际使用时发生混淆。

③ 检查请求试验参数时用的“参数请求地址”与试验创建完成时示例代码中的“参数请求地址”是否一致。过往常见在“项目A”环境中进行调试操作,但获取参数时使用的请求地址却是“项目B”的请求地址,因而导致无策略返回。