【对A/B测试的看法】

开发者在Dev Center中设置几种应用变体,这几种变体有几个变量的值不一样,比如有变体A和变体B(当然还可以加上变体C,Dev Center最多支持5个变体),A和B的不同在于Button的颜色btnColor,A是Amber,B是Blue

这些值设置好之后,Dev Center通过设置的变体比例随机返回变体的变量值 ,比如变体A:变体B = 1:3,那么返回的btnColor值中Amber : Blue = 1:3

开发者根据这些值对应用做一些改变,不同的返回值对应不同的应用表现(比如界面的颜色,某个Button是否显示等等),开发者直接在应用内用随机数也可以粗浅的实现类似的效果,但Dev Center的A/B测试比应用内随机数强大太多了,比如可以方便的使用户在不同的变体间转化,还有日志功能

至于A/B测试的用途,让一小部分用户先用新功能,根据反馈数据决定是否全面上新版的用法我很喜欢,其他的自己搜吧

微软官方的例子是两种变体,差别在于Button的Content和背景色,用的事件有用户看到Button和点击Button,从这里就能看出一点A/B测试的用途了,用于判断哪种UI设计更优,然而本文的A/B测试并没有实际用途,只是我想试用一下这个新功能,做完后的效果应该是一半人看的到翻译按钮,一般人看不到翻译按钮

【进行A/B测试前置条件】

1.要测试的应用是UWP应用

2.设置好自己的开发机

【Dev Center中创建一个实验】

首先进入Dev Center的仪表板,网页左边会列出你所有的应用,选择要进行A/B测试的应用,选中服务下的实验模块,先新建一个API密钥, 点击 新API密钥给这个密钥取个名字 ,然后点击API密钥上方的新实验

输入实验名称

下面的测试实验CheckBox 选中后 实验激活了之后还可以继续编辑,可以通过勾选这个来测试客户端是否真的获取到了变量的值 ,方法为将某一个变体的 分配 调整到100%然后观察程序的表现

但微软说这个应该只在内部测试的时候勾上

Note Check this box only if you are creating a test experiment to validate parameters through internal testing. Do not check this box if you are creating an experiment that you will release to customers.

查看事件名称是用来向Dev Center写日志的,在这里的事件是 “用户看到翻译按钮”

  • 目标名称

对测试目标的描述,比如我这里的Add Translate Button,这个之后会显示在【结果摘要】里

  • 转换事件名称

A conversion event is an arbitrary string that represents an objective for this goal. Your app code will send this conversion event string to Dev Center when the user reaches an objective

这里我的理解是,转换事件名称就代表一个目标,在程序中使用这个转换事件名称写Log时就代表这个目标完成了

  • 目标

最大化或最小化转换事件的发生,这个不太清楚是什么意思,原文提到每个用户24h只记录一次事件,那这个最大化或最小化有什么区别呢?

Note Dev Center reports only the first conversion event for each user view in a 24-hour time period. If a user triggers multiple conversion events in your app within a 24-hour period, only the first conversion event is reported. This is intended to help prevent a single user from skewing the experiment results for a sample group of users when the goal is to maximize the number of users who perform a conversion.

然后是变体和设置

这里设置了两个变体 一个是Translate,代表显示翻译按钮,另一个NoTranslate代表不显示翻译按钮。

下方的三个输入框 分别填 设置名(可以理解成变量名)  变体1该设置的值 变体2该设置的值

值可以填String、Integer、Double、Boolean类型的,在写代码的时候有对应的方法直接获取

填完之后点保存,然后再点激活,Dev Center里的设置就完成了,下面开始敲代码

【应用内编写代码】

  1. 首先添加Microsoft Store Engagement SDK的引用
  2. 在项目的引用上右键单击 选择添加引用

然后就可以敲代码了,这个很明显要在各个页面中使用,所以写成一个Helper类

LogTranslateViewed在页面加载的时候调用,LogTranslateClick在翻译按钮点击时调用

 public static class ExperimentHelper
{ #region const strings
private const string API_KEY = "Your Key Here"; public const string TranslateButtonVisibility = "TranslateButtonVisibility"; private const string UseTranslateButton = "useTranslateButton"; private const string ViewEventName = "userViewedTranslateButton";
#endregion private static ExperimentClient experimentClient; private static ExperimentVariation variation; private static ExperimentVariationResult result; static ExperimentHelper()
{
experimentClient = new ExperimentClient(API_KEY);
} /// <summary>
/// 获取变量
/// </summary>
private static async void GetExperimentVariation()
{
result = await experimentClient.GetVariationAsync();
variation = result.Variation;
} /// <summary>
/// 检查变量是否需要更新
/// </summary>
private static void CheckVariationUpdate()
{
if (result.ErrorCode != EngagementErrorCode.Success || result.Variation.NeedsRefresh)
{
UpdateExperimentVariation();
}
} /// <summary>
/// 更新变量
/// </summary>
private static async void UpdateExperimentVariation()
{
result = await experimentClient.RefreshVariationAsync();
if (result.ErrorCode == EngagementErrorCode.Success)
{
variation = result.Variation;
}
} /// <summary>
/// 获取int类型变量
/// </summary>
/// <param name="name">变量设置名称</param>
/// <param name="defaultValue">默认值</param>
/// <returns></returns>
public static int GetInt(string name, int defaultValue)
{
CheckVariationUpdate();
return variation.GetInteger(name, defaultValue);
} public static bool GetBool(string name,bool defaultValue)
{
CheckVariationUpdate();
return variation.GetBoolean(name, defaultValue);
} public static double GetDouble(string name,double defaultValue)
{
CheckVariationUpdate();
return variation.GetDouble(name, defaultValue);
} public static string GetString(string name,string defaultValue)
{
CheckVariationUpdate();
return variation.GetString(name, defaultValue);
} /// <summary>
/// 向Dev Center写日志
/// </summary>
public static void LogEventToDevCenter(string eventName,ExperimentVariation variation)
{
StoreServicesCustomEvents.Log(eventName, variation);
} /// <summary>
/// 翻译按钮点击
/// </summary>
public static void LogTranslateClick()
{
LogEventToDevCenter(UseTranslateButton, variation);
} /// <summary>
/// 用户看到翻译按钮
/// </summary>
public static void LogTranslateViewd()
{
LogEventToDevCenter(ViewEventName, variation);
}
}

ExperimentHelper.cs

我的应用使用了MVVM,所以在vm里加一个属性IsTranslateVisible

 /// <summary>
/// 翻译按钮显示
/// </summary>
public bool IsTranslateVisible
{
get
{
return ExperimentHelper.GetBool(ExperimentHelper.TranslateButtonVisibility,false);
}
}

翻译按钮是否显示

然后把这个属性绑定到UI上就完成了(当然要使用一个Converter,太简单就不说了)

【运行应用收集数据】

把应用Run起来,看看我的翻译按钮是不是显示的,有种抽奖的感觉,我的pc端和模拟器分到了不同的变体,一个有翻译按钮,一个没有

获取更新的变量需要一点时间

Note that it may take up to two minutes for your app to receive an updated variation assignment.

做完上面的步骤之后,就可以开始等了,Dev Center的数据更新一直都不及时,官方的文档也说明了,坐和放宽,等几个小时吧,然后就能看到实验结果了

Note As soon as you activate an experiment, Dev Center immediately starts collecting data from any apps that are instrumented to log data for your experiment. However, it can take several hours for experiment data to appear in the dashboard.

【参考链接】

Create and run your first experiment with A/B testing

Monetize your app and engage customers with the Microsoft Store Engagement and Monetization SDK

Run app experiments with A/B testing

Define your experiment in the Dev Center dashboard

Code your app for experimentation

[UWP] 对应用进行A/B测试的更多相关文章

  1. 2019-11-25-加强版在国内分发-UWP-应用正确方式-通过win32安装UWP应用

    原文:2019-11-25-加强版在国内分发-UWP-应用正确方式-通过win32安装UWP应用 title author date CreateTime categories 加强版在国内分发 UW ...

  2. C#单元测试面面观

    标题有点标题党,但相信各位看完这篇文章一定会所收获,如果之前没有接触过单元测试或了解不深通过本文都能对单元测试有个全新认识.本文的特点是不脱离实际,所测试的代码都是常见的模式. 写完这篇文章后,我看了 ...

  3. xamarin.forms uwp app部署到手机移动设备进行测试,真机调试(device portal方式部署)

    最近学习xamarin.刚好 手上有一个lumia 930.所以试一试把uwp app部署到手机上,并真机调试一把. 目前环境: 1.开发pc电脑是win10,版本1607.加入了insider,所以 ...

  4. UWP简单测试

    随便写下,试试.Net Core与UWP开发,后台WCF XAML <Page x:Class="App3.MainPage" xmlns="http://sche ...

  5. UWP中实现自定义标题栏

    UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...

  6. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  7. UWP学习目录整理

    UWP学习目录整理 0x00 可以忽略的废话 10月6号靠着半听半猜和文字直播的补充看完了微软的秋季新品发布会,信仰充值成功,对UWP的开发十分感兴趣,打算后面找时间学习一下.谁想到学习的欲望越来越强 ...

  8. UWP开发之Mvvmlight实践七:如何查找设备(Mobile模拟器、实体手机、PC)中应用的Log等文件

    在开发中或者后期测试乃至最后交付使用的时候,如果应用出问题了我们一般的做法就是查看Log文件.上章也提到了查看Log文件,这章重点讲解下如何查看Log文件?如何找到我们需要的Packages安装包目录 ...

  9. UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)

    最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...

随机推荐

  1. xinetd cpu 100%

    今天,有个给客户试用的环境出现xinetd cpu 100%,而且连续运行很长时间了.之前也有环境发生过,今天排查解决了三四个问题,实在是查的身体都不舒服了,还没时间查这个问题... 知道的求解...

  2. 强大的observejs

    写在前面 各大MVVM框架的双向绑定太难以观察,很难直观地从业务代码里知道发生了什么,我不是双向绑定的反对者,只是认为双向绑定不应该糅合进底层框架,而应该出现在业务代码中,或者是业务和框架之间的代码上 ...

  3. 多页的TIFF图片在aspx页面分页显示

    一.逻辑实现:将数据库中的二进制TIFF图片读出并分页显示在页面上. 1.显示界面 public FrameDimension MyGuid; ; ; public static MemoryStre ...

  4. safari 浏览器window.history.go(-1)运行无效解决办法

    这几天做了几个手机端app的wap页面,做完之后发现一个问题,那就是ios系统下的safari浏览器不支持window.history.go(-1)..无语... 解决方法很简单!加上return f ...

  5. MYSQL基础操作之单表的增删改查

    一.添加数据. -- 1.创建表,并插入一定的数据. CREATE TABLE STUDENT( ID INT, USERNAME ), SERVLET INT, JSP INT, ADDRESS ) ...

  6. GitLab CI持续集成配置方案(补)

    上篇文章介绍了GitLab CI的持续集成配置方法,本篇文章将主要介绍NUnit的持续集成和遇到的一些坑 1.NUnit单元测试持续集成 下载NUnit.3.4.1.msi,https://githu ...

  7. 11g新特性:Health Monitor Checks

    一.什么是Health Monitor ChecksHealth Monitor Checks能够发现文件损坏,物理.逻辑块损坏,undo.redo损坏,数据字典损坏等等.Health Monitor ...

  8. Spring ApplicationContext 简解

    ApplicationContext是对BeanFactory的扩展,实现BeanFactory的所有功能,并添加了事件传播,国际化,资源文件处理等.   configure locations:(C ...

  9. screen:多重视窗管理程序

    screen:多重视窗管理程序 screen [-S SCREEN_NAME]: 创建窗口,可指定窗口名称,如果不指定,则是ID.$HOSTNAME screen -ls: 列出所有的screen窗口 ...

  10. loadrunner性能测试---添加windows多台压力机

    添加多台压力机 1.前置条件 1)保证压力机上都安装了loadrunner Agent,并启动,状态栏中会有小卫星.       2)添加的压力机与controller所在机器是否在同一个网段,建议关 ...