游戏中的abtest功能实现,演进与复盘

前言

abtest是一种很常见的,利用真实用户来测试的方法。在游戏中,可以用abtest来测试不同的活动,不同的商品,不同的定价,不同的匹配策略等等的用户接受程度。

初版:简单的ab池划分与细分

在接到第一版需求到时候,需求相当简单,策划/运营想要一个可以做abtest的工具,支持细分和多概率组。
基于这个需求,第一版本的abtest需要做三件事情,将玩家的属性统计出来;将玩家按不同的属性进行划分,进而按照不同的概率进行分池;不同业务可以配置在同一个abtest组里面,比如说玩家看到的公告需要和自己看到的商品协同。
在这一阶段:最终实现的abtest方案如下:

  1. 配置表设计
    由于需要将不同的业务可以配置到同一个组里面,abtest的配置表被设计成了三张表分离:分别是业务表,abtest表和细分表。这是出于一下考虑:
    a. abtest需要有做到不同业务可以协同测试。所以abtest表独立出来,对开发来说更加直观。
    b. abtest中有组的概念。而同一组中,对应的细分条件是一致的,也就是说,abtest中,相同的组会共用同一个细分条件,同时,不同的组,也有可能共用同一个细分条件。那么将细分纬度再抽离出一个表,是符合程序逻辑的。
    c. 在流程设计中,登陆的时候需要根据abtest的细分条件来生成玩家的标签,因此将细分条件抽出来成表,方便程序实现。
  2. 游戏测按照策划的需求,在不同的模块统计用户的行为。在玩家登出的时候进行汇总,形成玩家的属性。
    由于游戏中,玩家的不同属性是分表存储,不同行为会到不同的模块进行处理。如果每次行为都汇总到某一个特定的表或者模块中,则会将这个表/模块变成热点。举个例子,在游戏中,活动模块会接收玩家的各个事件,比如说登陆,对局结算记录,购买,获得,使用物品等事件。那么该模块在整个游戏周边系统就会就会成为一个热点,所有的玩家行为都有可能对该模块发送请求。为了避免abtest也出现这样的情况(毕竟abtest在游戏中不应该成为一个高性能开销的事情),所以采取的方案就是在不同的模块分开统计用户的行为,降低内网的请求量;在登出的时候做统一处理。
  3. 在玩家登陆的时候,依照配置表和玩家的属性,生成玩家的标签,作为玩家的基础属性,附带在玩家的请求包中。
    在初版的设计中,考虑的最多的就是降低abtest对现有业务的影响,比如说拉取db所造成的影响。如果是在玩家拉取具体业务的时候进行判断,则需要额外拉取db表,对业务来说会增加时延,同时对业务的改造会比较大。所以考虑的就是将abtest细分条件转为玩家的标签。各个业务只需要判断一下玩家的标签即可。
  4. 在玩家获取商店,活动,公告等配置的时候,根据玩家标签和概率,来判断玩家是否命中测试。
    在玩家拉取具体业
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Implementing an A/B testing system in Java can be done in a few steps. 1. Define the experiment: Start by clearly defining the experiment and its goals. What are you trying to test? What are the variables you are trying to measure? 2. Create a control group: Next, you'll need to create a control group. This is the group that will not receive any treatment and will serve as a baseline for comparison. 3. Create a treatment group: After creating the control group, create a treatment group. This group will receive the treatment that you want to test. 4. Randomly assign users: Once you have created the control and treatment groups, you'll need to randomly assign users to each group. This is important to ensure that the results are representative and not biased. 5. Collect data: Once the experiment is underway, you'll need to collect data on the variables you're interested in. This could be things like conversion rates, page views, or user engagement. 6. Analyze the results: Finally, you'll need to analyze the results of the experiment. This will involve comparing the results of the control group to the treatment group to see if there is a statistically significant difference. Here is an example of a simple A/B testing system in Java: ``` import java.util.Random; public class ABTest { public static void main(String[] args) { int controlCount = 0; int treatmentCount = 0; Random random = new Random(); for (int i = 0; i < 1000; i++) { boolean isControl = random.nextBoolean(); if (isControl) { controlCount++; } else { treatmentCount++; } } System.out.println("Control group count: " + controlCount); System.out.println("Treatment group count: " + treatmentCount); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值