產品設計方案猶豫不決?試一下A/B測試

什麼是A/B測試

AB測試是爲Web或App界面或流程製做兩個(A/B)或多個(A/B/n)版本,在同一時間維度,分別讓組成成分相同(類似)的訪客羣組(目標人羣)隨機的訪問這些版本,收集各羣組的用戶體驗數據和業務數據,最後分析、評估出最好版本,正式採用。[百度百科]前端

舉例例子來講:咱們正在作一個活動,經過文案引導用戶點擊按鈕跳轉到活動頁。這時產品和老闆分別給出了一套文案A和B。他們兩個各自有理,做爲程序員的你固然不能站在那看"笑話",你要從技術的角度來平息這場爭吵。那就能夠引入A/B測試。git

A/B測試方案

  • 純前端控制A/B桶內用戶數,將結果彙總到統計服務器上。程序員

  • 由後臺控制A/B桶內用戶數,結果彙總到後臺。github

這兩種方案都有各自的有缺點,我比較支持第二種作法,由於能夠靈活的控制A/B桶內用戶數。objective-c

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), //數字表示命中機率
                                       @"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、用戶體驗、架構、程序員發展等內容。 測試

RiverLi的公衆號
相關文章
相關標籤/搜索