AB測試是爲Web或App界面或流程製做兩個(A/B)或多個(A/B/n)版本,在同一時間維度,分別讓組成成分相同(類似)的訪客羣組(目標人羣)隨機的訪問這些版本,收集各羣組的用戶體驗數據和業務數據,最後分析、評估出最好版本,正式採用。[百度百科]前端
舉例例子來講:咱們正在作一個活動,經過文案引導用戶點擊按鈕跳轉到活動頁。這時產品和老闆分別給出了一套文案A和B。他們兩個各自有理,做爲程序員的你固然不能站在那看"笑話",你要從技術的角度來平息這場爭吵。那就能夠引入A/B測試。git
純前端控制A/B桶內用戶數,將結果彙總到統計服務器上。程序員
由後臺控制A/B桶內用戶數,結果彙總到後臺。github
這兩種方案都有各自的有缺點,我比較支持第二種作法,由於能夠靈活的控制A/B桶內用戶數。objective-c
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), //數字表示命中機率
@"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、用戶體驗、架構、程序員發展等內容。 測試