什么是A/B測試
AB測試是為Web或App界面或流程制作兩個(A/B)或多個(A/B/n)版本,在同一時間維度,分別讓組成成分相同(相似)的訪客群組(目標(biāo)人群)隨機(jī)的訪問這些版本,收集各群組的用戶體驗數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù),最后分析、評估出最好版本,正式采用。[百度百科]
舉例例子來說:我們正在做一個活動,通過文案引導(dǎo)用戶點擊按鈕跳轉(zhuǎn)到活動頁。這時產(chǎn)品和老板分別給出了一套文案A和B。他們兩個各自有理,作為程序員的你當(dāng)然不能站在那看"笑話",你要從技術(shù)的角度來平息這場爭吵。那就可以引入A/B測試。
A/B測試方案
純前端控制A/B桶內(nèi)用戶數(shù),將結(jié)果匯總到統(tǒng)計服務(wù)器上。
由后臺控制A/B桶內(nèi)用戶數(shù),結(jié)果匯總到后臺。
這兩種方案都有各自的有缺點,我比較支持第二種做法,因為可以靈活的控制A/B桶內(nèi)用戶數(shù)。
A/B測試庫SkyLab
SkyLab 是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), //數(shù)字表示命中機(jī)率
@"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), //數(shù)字表示命中機(jī)率
@"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"];
}