1. 试验参数概述

试验参数定义:试验参数是一个健值对 { key : value } ,由「参数名」和「参数值」组成,不同的参数值对应的是不同版本的试验策略,参数值决定了每个试验分组生效什么策略。    

用一个例子理解试验参数: 

如上图所示,客户端/服务端均可向A/B分流服务端发起参数获取请求,A/B服务端收到参数获取请求后下发不同的参数值,客户端/服务端收到参数值后会根据接受到的不同值执行不同的试验策略。

(1)如图中客户端请求参数名为颜色「color」, A/B 分流服务端收到参数获取请求后下发参数值「#E97256 」,客户端接受到参数值后在页面中对应的按钮显示为橘红色。

(2)如图中服务端请求参数名为折扣力度「discount」,A/B 分流服务端收到参数获取请求后下发参数值「97」,服务端接收到参数值后会为对应用户执行97折的折扣力度。

2. 四类试验参数及其格式示例

神策 A/B 测试中所支持的参数值类型有四种:Sring、Integer、BoolJson

2.1. String 型

参数中文名

参数英文名

参数值格式示例

参数值含义

按钮颜色

button_color

#FF0000;#00FF00

纯红色;纯绿色

背景图片

background

data:image/123

图片链接

2.2. Integer 型

参数中文名

参数英文名

参数值格式示例

参数值含义

折扣力度

discount

85;95

85折;95

2.3. Bool 型

参数中文名

参数英文名

参数值格式示例

参数值含义

是否弹窗

is_popup

True;False

弹窗;不弹窗

2.4. Json 型

参数中文名

参数英文名

参数值格式示例

参数值含义

弹窗属性

Popup_property

{ "is_popup":true,

"title":"百万补贴",

"oktext":"立刻参与",

"background-color":"#FFFFFF"}

弹窗开启;

活动标题:百万补贴;

确认按钮:立刻参与;

背景色为纯白色

3. 参数生效的规则

1、试验调试中,调试设备可以被指定录入到任一试验组获取该试验组的参数值,并运行对应的策略;

2、试验运行中,满足一定筛选条件的受众用户在进入试验后会被随机地分配到不同的试验分组中,然后会下发对应试验组下所对应的试验参数值,以运行对应的策略;如果参数值未获取成功或未获取到参数时则会运行默认策略;

3、由于参数具有全局唯一性,当使用某参数的试验正在运行中未下线时,若此时新建一个试验也输入了同名参数,则该参数名的设置会被拦截,必须修改为非重复的参数名才可生效。

4. 参数设计和管理的最佳实践

1、将参数值的格式设计为可直接被程序使用的格式(可直接赋值给相应变量)

案例:按钮颜色的设置

正反类型

参数中文名

参数英文名

参数值格式示例

参数值含义

(出错) 反例

按钮颜色

button_color

red / green

纯红色 / 纯绿色

(滴答) 正例

按钮颜色

button_color

#FF0000 / #00FF00

纯红色 / 纯绿色

解释:正例中的参数值被设计成了对应的「16位颜色码」格式,相比于反例中的「文字描述」,正例中的「16位颜色码」可以直接供程序使用,且满足参数灵活性,后续可长期复用。

2、树立规范的命名方式,避免多团队在参数命名上发生冲突

通常采用的方式是按「业务线」「业务模块」「负责团队」等业务组织结构,通过加「前缀」「后缀」等方式,进行规范性命名

正反类型

参数中文名

参数英文名

参数值格式示例

参数值含义

(出错) 反例 1

按钮颜色

button_color

#FF0000

纯红色

(滴答) 正例 1

支付按钮颜色

recharge_button_color

#FF0000

纯红色

(出错) 反例 2

banner位背景图

banner_background

data:image/123

图片链接

(滴答) 正例 2

首页顶部banner位背景图

homepage_top_banner_background

data:image/123

图片链接

对比反例1,正例1中的参数命名可以区分「按钮的位置」以及「按钮所在页面位置」;

对比反例2,正例2中的参数命名也可以清楚的区分banner位轮播图的所在页面及所在页面位置。

5. 常见问题列表

(1)我不是开发,不知道怎么设计参数名和参数值格式怎么办?

答:参数的设计需要业务方和技术方共同完成,作为业务方,您只需要先将相应的策略以文字的形式表达清楚,后续再和技术方一同探讨确定适合的参数命名和参数格式即可。

(2)不同的试验组,参数值是否可以设为相同的值?

答:可以,通常在做AA试验时,会有多个试验组的参数值是相同的。

(3)默认策略为什么也需要设置参数值?

答:当出现网络异常等情况时,用户可能会请求不到参数值,这时应该有个默认策略确保业务能够正常运作,因此和试验策略一样需要设置一个参数值。

(4)在哪里配置默认策略的参数?

答: 在试验配置完成后会跳转到 SDK 说明文档页面,可复制文档中的示例代码至您的项目,在「代码中的相应位置」填写入对应的默认参数值。(以下以 Android 代码为例)

(5)试验下线之后,参数会立即失效吗?

答:如果您使用的不是 asyncFetchABTest 接口(忽略本地缓存,从服务端获取数据)的情况下,因为 SDK 会有缓存机制,所以试验策略并不会立即失效,同时因为神策 SDK 会每十分钟进行一次试验策略的同步,所以失效通常会在10分钟内完成。

(6)参数名和参数值有长度的限制吗?

答:参数值没有长度限制,目前参数名长度限制为100,建议在清晰表达的前提下最大程度保持参数名简短。