Facebook 的移动端 A/B 测试框架
2023-09-11 14:20:33 时间
两年前,我们重写了我们移动端(iOS,Android)的应用,使用了原生的开发栈(native development stacks)代替我们以前定制开发的 Web 栈(custom web-stack)。这给了我们在关于项目在那里/怎样下载、缓存、释放等等方面一个更好的控制。它分别深入地和操作系统整合在一起,提供在底层调整修改所有系统的一整套工具。
测试是我们开发的一个重要部分,但在转换到原生的之后,我们没有了 A/B 测试的能力。并不是每个测试都可以用到生产中,但即使是失败的测试也能帮助我们理解如何才能更好地改进。失去的这部分能力变成了一个我们要应对的挑战。
A/B 测试
要把我们的应用移植到 iOS 和 Android 上,需要来自不同团队的人来进行协作,每四周就要产生一个新的修复一些 bug 和带有一些新特性的二进制软件包。在我们发布一些更新之后,对于我们很重要的事情是要去明白:
● 新特性的使用情况
● bug 修复后的运行情况和稳定性
● 用户界面改进之后用户是怎么使用这个应用及在哪里花的时间多
为了去了解这些事情,我们需要一个移动端进行 A/B 测试的基础组件,这个组件能让我们的用户分别使用不同版本的应用(版本 A 和版本 B),这些版本在除某些特别需要测试的部分外,其他各层面都是一样的。所以我们创造了 Airlock,一个可以让我们比较不同版本应用的度量数据(metric data)和进行各种各样测试的测试框架,这帮助我们决定采用那个版本或者后续如何迭代。
从一点一滴中建成
我们尽可能从最简单的试验开始:使用已有的 Web-Stack A/B 分箱(binning system)系统。我们构造了一个测试:把聊天按钮换成文字"Chat"的试验。当应用启动的的时候,它会发送一个到我们服务器上的网络请求,询问这个试验的参数。当有回应返回后,我们就会更新按钮。一些员工会有按钮,另一些员工会有文字"Chat"。我们期望这仅仅会影响信息发送的数量(看起来不会太多),其他的东西不会受影响。
曝光日志
当这个版本的应用公开发布了,我们等待数据能稳定下来,然后发现看到文字"Chat" 的版本会更热衷于使用这个应用。是不是我们发现了什么秘密,或者诱惑般的魔法?沮丧地说,并不是。我们遇到了很多 bug,其中一个很大的问题是,某个组件并不能正确地缓冲数值。由于这是个大的系统,基础设施(the infrastructure)必须要是 "防弹的",不然收集到的数据就没用了。
从服务器开始的数据管道决定某个人的版本是属于那种变体的。然后,数据就会被打包,接着发送到设备上,设备分析返回的信息然后保存。接着,这个值会被用于重新配置 UI,然后最终在屏幕上显示。问题是我们在依靠服务器对我们数据分析的分类。一个简单的 bug 就导致了一大群用户在使用有别于我们期望的的变种版本。服务器还在坚持:"我告诉了设备去显示字符串!" 但在某处地方这个语句变得有点令人模糊(一个在客户端存贮逻辑上的 bug)。
一个试验的部署图:
上面图表展示了一个试验的部署。浅绿色的条柱是试验用户的数量,黑绿色的条柱是实际被影响的用户数。我们可以看到,服务器和设备的数据区别还是很大的: 在第一天,大多数用户收到这个配置,但大多数用户没有留意到我们试验。
当问题不仅仅是设备收到返回的数据,而需要加上我们的数据分析需要知道什么时候收到信息,然后把它正确地显示在 UI 上时,问题变得更大了。即使信息能正确地到达,在 UI 不正确时也有一个延迟。我们通过
添加双向握手(wo-way handshake)解决了这个问题。设备请求用于试验的数据,服务器记录它发出的回应。因此,即使某用户没有看到我们想让他看到的,我们仍然可以进行正确性分析(但也必须意识到选择性偏差(selection bias)的问题,还有分发时由于某些原因变得不平均)。
可伸缩性
在进行了几个月这样的"课程"之后,我们必须将支持两个试验的系统升级支持整个应用的系统。这个促使 Airlock 发生变革的试验是以前我们原想着进化和简化我们应用内的导航模块而开发的。在经历这几个月之后,我们把这个应用改变了很多,你可以去下载 Facebook for iPhone 来体验一下,这里面很多是测试的功劳。
随后,Airlock 被用于支持更多的试验,其请求的参数,数据的记录、客户端计算等等都快速地变多。Airlock 充分地被用于测试原生的应用,使得我们的应用运行得前所未有的轻快,伴随着测试的自由,再测试,和评估测试结果,我们期望能建造更好的测试和创造更好的用户体验。
最新内容请见作者的GitHub页:http://qaseven.github.io/
Airlock:Facebook 的移动端 A/B 测试框架 两年前,我们重写了我们移动端(iOS,Android)的应用,使用了原生的开发栈(native development stacks)代替我们以前定制开发的 Web 栈(custom web-stack)。这给了我们在关于项目在那里/怎样下载、缓存、释放等等方面一个更好的控制。它分别深入地和操作系统整合在一起,提供在底层调整修改所有系统的一整套工具。
开源多年后,Facebook这个调试工具,再登Github热门榜 让许多工程师合作开发大型应用大多会面临一个挑战,通常没有一个人知道每个模块是如何工作的,这种技能会让开发新功能、调查Bug或优化性能变得困难,为了解决这个问题,Facebook创建并开源了Flipper,一个可扩展的跨平台的调试工具,用来调试 iOS 和 Android 应用。近日又双叒登上了Github热榜。
Facebook开源静态代码分析工具Infer介绍 Infer是Facebook公司的一个开源的静态分析工具。Infer 可以分析 Objective-C, Java 或者 C 代码,用于发现潜在的问题。其作用类似于sonar和fortify。Infer更倾向于发现代码中的空指针异常、资源泄露以及内存泄漏的问题。
图神经网络版本的PyTorch来了,Facebook开源GTN框架,还可对图自动微分 近日,Facebook的AI研究院发表了一篇论文「DIFFERENTIABLE WEIGHTED FINITE-STATE TRANSDUCERS」,开源了用于图网络建模的GTN框架,操作类似于PyTorch这种传统的框架,也可以进行自动微分等操作,大大提高了对图模型建模的效率。
Facebook 将神奇动画引擎 Pop 开源了! Facebook 2月发布的新闻类应用Paper,因为其灵动的用户界面和交互,成为近来最令人眼前一亮的移动产品之一。 而这个产品的背后是2011年Facebook收购的Push Pop Press,创始人是分别在Apple任设计师和工程师的Mike Matas与Kimon Tsinteris。他们的合作者还有传奇人物Bret Victor。他们为美国前副总统Al Gore开发的电子书Our Choice当时就曾技惊四座。
Facebook 发布开源编程语言 Hack Facebook周四发布一款名为“Hack”的全新编程语言,并声称该语言将能使代码的编写和测试更加高效快速。Facebook已在公司内部使用该语言超过一年时间,现在将以开源的形式将其正式发布。
Conceal —— Facebook推出的android数据加密的开源APIandroid数据加密的开源API 现如今很多的智能手机,都支持把应用安装到SD卡中,这会帮用户节省很多空间,但是许多黑客也会利用这一点窃取用户的隐私。一般情况下,应用都有SD卡的读写权限,当然他也可以读取到其他应用,存储在SD卡上的数据。这意味着如果你安装了恶意的应用,他就可以轻易的获取SD卡上的所有数据。
![](http://www.51testing.com/attachments/2014/02/14982672_201402201020371HDes.jpg)
Airlock:Facebook 的移动端 A/B 测试框架 两年前,我们重写了我们移动端(iOS,Android)的应用,使用了原生的开发栈(native development stacks)代替我们以前定制开发的 Web 栈(custom web-stack)。这给了我们在关于项目在那里/怎样下载、缓存、释放等等方面一个更好的控制。它分别深入地和操作系统整合在一起,提供在底层调整修改所有系统的一整套工具。
开源多年后,Facebook这个调试工具,再登Github热门榜 让许多工程师合作开发大型应用大多会面临一个挑战,通常没有一个人知道每个模块是如何工作的,这种技能会让开发新功能、调查Bug或优化性能变得困难,为了解决这个问题,Facebook创建并开源了Flipper,一个可扩展的跨平台的调试工具,用来调试 iOS 和 Android 应用。近日又双叒登上了Github热榜。
Facebook开源静态代码分析工具Infer介绍 Infer是Facebook公司的一个开源的静态分析工具。Infer 可以分析 Objective-C, Java 或者 C 代码,用于发现潜在的问题。其作用类似于sonar和fortify。Infer更倾向于发现代码中的空指针异常、资源泄露以及内存泄漏的问题。
图神经网络版本的PyTorch来了,Facebook开源GTN框架,还可对图自动微分 近日,Facebook的AI研究院发表了一篇论文「DIFFERENTIABLE WEIGHTED FINITE-STATE TRANSDUCERS」,开源了用于图网络建模的GTN框架,操作类似于PyTorch这种传统的框架,也可以进行自动微分等操作,大大提高了对图模型建模的效率。
Facebook 将神奇动画引擎 Pop 开源了! Facebook 2月发布的新闻类应用Paper,因为其灵动的用户界面和交互,成为近来最令人眼前一亮的移动产品之一。 而这个产品的背后是2011年Facebook收购的Push Pop Press,创始人是分别在Apple任设计师和工程师的Mike Matas与Kimon Tsinteris。他们的合作者还有传奇人物Bret Victor。他们为美国前副总统Al Gore开发的电子书Our Choice当时就曾技惊四座。
Facebook 发布开源编程语言 Hack Facebook周四发布一款名为“Hack”的全新编程语言,并声称该语言将能使代码的编写和测试更加高效快速。Facebook已在公司内部使用该语言超过一年时间,现在将以开源的形式将其正式发布。
Conceal —— Facebook推出的android数据加密的开源APIandroid数据加密的开源API 现如今很多的智能手机,都支持把应用安装到SD卡中,这会帮用户节省很多空间,但是许多黑客也会利用这一点窃取用户的隐私。一般情况下,应用都有SD卡的读写权限,当然他也可以读取到其他应用,存储在SD卡上的数据。这意味着如果你安装了恶意的应用,他就可以轻易的获取SD卡上的所有数据。
相关文章
- 【软件测试】七款最优秀的Java测试框架
- 性能测试中Disruptor框架ExceptionHandler使用分享
- 手机APP测试要点
- 软件测试之测试驱动开发
- 史上最全 Appium 自动化测试从入门到框架实战精华学习笔记(三)
- 10个自动化测试框架,测试工程师用起来
- L车改装浅析及性能测试
- 超详细从入门到精通,pytest自动化测试框架实战-fixture多样玩法(九)
- 3种python自动化测试框架推荐,看看哪个适合你?
- 软件测试之银行测试
- 手机充值的功能测试框架 - 测试要点
- 在软件测试领域,Java和Python哪个更适合做自动化测试?
- 《 软件测试价值提升之路》——2.5 测试价值的层次
- 如何在IDEA中使用jcstress进行并发压力测试
- 《树莓派渗透测试实战》——1.7 树莓派渗透测试场景
- Apache Flink 流计算基准测试框架
- SSM框架的搭建与测试
- Appium移动端自动化测试之整合unittest单元测试框架(十)
- HTTP长连接、短连接使用及测试
- 移动应用测试框架—Cedar(iOS)
- LoadRunner驱动MySQL性能测试
- LTest接口测试框架简介
- 自动化测试框架比较
- 测试即文档:自动化测试框架Concordion
- U3D客户端框架之小堆顶高性能定时器测试10W计时器耗时1.9ms