博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
产品设计方案犹豫不决?试一下A/B测试
阅读量:6218 次
发布时间:2019-06-21

本文共 3054 字,大约阅读时间需要 10 分钟。

什么是A/B测试

AB测试是为Web或App界面或流程制作两个(A/B)或多个(A/B/n)版本,在同一时间维度,分别让组成成分相同(相似)的访客群组(目标人群)随机的访问这些版本,收集各群组的用户体验数据和业务数据,最后分析、评估出最好版本,正式采用。[百度百科]

举例例子来说:我们正在做一个活动,通过文案引导用户点击按钮跳转到活动页。这时产品和老板分别给出了一套文案A和B。他们两个各自有理,作为程序员的你当然不能站在那看"笑话",你要从技术的角度来平息这场争吵。那就可以引入A/B测试。

A/B测试方案

  • 纯前端控制A/B桶内用户数,将结果汇总到统计服务器上。

  • 由后台控制A/B桶内用户数,结果汇总到后台。

这两种方案都有各自的有缺点,我比较支持第二种做法,因为可以灵活的控制A/B桶内用户数。

A/B测试库

是iOS端的一个A/B、多元测试框架。我们看一下使用方法:

A/B测试

- (void)viewDidLoad { 	[super viewDidLoad]; 	[SkyLab abTestWithName:@"Title" A:^{ 		self.tipLabel.text = @"我在使用方案A"; 	} B:^{ 		self.tipLabel.text = @"我在使用方案B"; 	}]; }- (IBAction)resetPlanButton:(id)sender { 	[SkyLab resetTestNamed:@"Title"]; } 复制代码

多元测试 :可能命中一个或多个

- (void)viewDidLoad {    [super viewDidLoad];        [SkyLab multivariateTestWithName:@"MTitle"                           variables:@{                                       @"A" : @(0.5), //数字表示命中机率                                       @"B" : @(0.5),                                       @"C" : @(0.5)                                       }                               block:^(NSSet *assignedVariables) {                                   NSString *text = @"正在使用";                                   if ([assignedVariables containsObject:@"A"]) {                                       text = [text stringByAppendingString:@"A"];                                   }                                   if ([assignedVariables containsObject:@"B"]) {                                       text = [text stringByAppendingString:@"B"];                                   }                                   if ([assignedVariables containsObject:@"C"]) {                                       text = [text stringByAppendingString:@"C"];                                   }                                   self.tipLabel.text = text;                               }];}- (IBAction)resetPlanButton:(id)sender {    [SkyLab resetTestNamed:@"MTitle"];}复制代码

分割测试:只会命中一个

- (void)viewDidLoad {    [super viewDidLoad];    [SkyLab splitTestWithName:@"STitle"                   conditions:@{                                @"A" : @(0.5), //数字表示命中机率                                @"B" : @(0.5),                                @"C" : @(0.5)                                }                        block:^(id condition) {                            NSString *text = @"正在使用";                            if ([condition isEqualToString:@"A"]) {                                text = [text stringByAppendingString:@"A"];                            } else if ([condition isEqualToString:@"B"]) {                                text = [text stringByAppendingString:@"B"];                            } else if ([condition isEqualToString:@"C"]) {                                text = [text stringByAppendingString:@"C"];                            }                            self.tipLabel.text = text;                        }];}- (IBAction)resetPlanButton:(id)sender {    [SkyLab resetTestNamed:@"STitle"];}复制代码

交流讨论

欢迎你关注我的,一起讨论:算法、前端、iOS、Android、用户体验、架构、程序员发展等内容。

转载于:https://juejin.im/post/5cd368f4518825356e261eef

你可能感兴趣的文章
安卓巴士精选Android开发教程
查看>>
c++中捕捉内存泄露、异常
查看>>
Spark 优化器 ML的论文
查看>>
Spring透过ApplicationListener来触发contextrefreshedevent事件
查看>>
socket连接和TCP连接的关系
查看>>
ABP框架 - 缓存( 转)
查看>>
S域传递函数的零点和极点
查看>>
网络免费API接口整理
查看>>
PHP 运行模式
查看>>
Python:range 对象并不是迭代器
查看>>
TortoiseGit 软件安装过程截图及配置
查看>>
来自一个程序员的反思
查看>>
为什么我们应该使用 pnpm(译)
查看>>
图片服务器------FastDFS
查看>>
springboot--如何优雅的使用mybatis
查看>>
以太坊智能合约学习笔记(一)
查看>>
一篇文章带你了解js作用域
查看>>
说说分布式事务(五)
查看>>
JSDuck实战
查看>>
ikbc G87&104 双子座 使用说明书
查看>>